1. 程式人生 > >4.2、Android Studio壓縮你的程式碼和資源

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" />

本文作者:宋志輝
個人微博:點選進入