為了讓你的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中援用1個類時
2、 當你的app調用1個JNI方法
3、 當你的app使用反射來控制代碼
為了不這個問題,需要使用-keep,以下:
-keep public class MyClass
一樣,可以添加@Keep注解來實現。
緊縮你的資源
資源緊縮需要跟代碼緊縮1起才能正常使用。在代碼緊縮出去所有的無用的代碼以后,才能辨別哪些資源依然未被使用。以下:
android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
自定義哪些資源需要保存
如果這里有些特別的資源你需要保存或拋棄,在你的項目中創建1個包括標簽的XML文件,用tools:keep指明需要保存的資源,用tools:discard指明需要拋棄的文件。
比如:
<?xml version=1.0" encoding="utf⑻"?>
<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" />
本文作者:宋志輝
個人微博:點擊進入
下一篇 搜索二維矩陣II