4.2、Android Studio壓縮你的程式碼和資源
為了讓你的APK檔案儘可能的小,你需要在構建的時候開啟壓縮來移除無用的程式碼和資源。
程式碼壓縮可在ProGuard中使用,可以檢測和清除無用的類,變數,方法和屬性,甚至包括你引用的庫。ProGuard同樣可以優化位元組碼,移除無用的程式碼,並且模糊剩下的類,變數和方法。程式碼模糊可以讓增加APK逆向工程的成本。
資源壓縮可在Andorid的Gradle外掛中使用,可以清除你打包的APP中無用的資源,包含你引用的庫中的無用的資源。
壓縮你的程式碼
為了啟用ProGuard的程式碼壓縮,需要在build.gradle中新增minifyEnabled true。
需要注意的是,程式碼壓縮會拖慢構建速度,所以,如果可能的話,儘量避免在debug構建是使用。
如下:
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
'proguard-rules.pro'
}
}
...
}
注意:Android Studio在使用Instant Run時會禁用ProGuard。
自定義哪些程式碼需要保留
在很多情況下,ProGuard很難正確的去分析,它可能會清除你的app需要的程式碼。
1、 當你的app從AndroidManifest.xml中引用一個類時
2、 當你的app呼叫一個JNI方法
3、 當你的app使用反射來控制程式碼
為了避免這個問題,需要使用-keep,如下:
-keep public class MyClass
同樣,可以新增@Keep註解來實現。
壓縮你的資源
資源壓縮需要跟程式碼壓縮一起才能正常使用。在程式碼壓縮出去所有的無用的程式碼之後,才能辨別哪些資源仍然未被使用。如下:
android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt' ),
'proguard-rules.pro'
}
}
}
自定義哪些資源需要保留
如果這裡有些特別的資源你需要保留或丟棄,在你的專案中建立一個包含標籤的XML檔案,用tools:keep指明需要保留的資源,用tools:discard指明需要丟棄的檔案。
比如:
<?xml version=1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />
本文作者:宋志輝
個人微博:點選進入