基本知识Android知识Android开发

压缩代码和资源

2017-05-19  本文已影响61人  GYLEE
低角度拍摄
   这部分内容,自己其实看过很多遍,但是无一例外的是:在若干天后,自己在用到这一方面的内容时,竟然忘了,我怀疑自己有个假脑袋,所以还是记录一下,毕竟再看时会产生相应的联想,有助于理解和记忆。

内容主要来源:官方链接

1.目的

尽可能的减少 APK 的大小,所以应该在应用中启用 压缩 来移除在版本构建中未使用的代码和资源。

2 . 代码压缩

要通过 ProGuard 启用代码压缩,请在 build.gradle文件内相应的构建类型中添加 minifyEnabled true

注意: 代码压缩会拖慢构建速度,因此您应该尽可能避免在调试构建中使用

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
    ...
}

proguard-android.txt 文件位置:Android SDK 文件目录 tools/proguard/
proguard-rules.pro 文件用于添加自定义 ProGuard 规则。默认情况下,该文件位于模块根目录(build.gradle 文件旁)

每次构建时 ProGuard 都会输出下列文件:
dump.txt
说明 APK 中所有类文件的内部结构。
mapping.txt
提供原始与混淆过的类、方法和字段名称之间的转换。
seeds.txt
列出未进行混淆的类和成员。
usage.txt
列出从 APK 移除的代码。
这些文件保存在 <module-name>/build/outputs/mapping/release/ 中

2 . 资源压缩

资源压缩只与代码压缩协同工作。代码压缩器移除所有未使用的代码后,资源压缩器便可确定应用仍然使用的资源。这在您添加包含资源的代码库时体现得尤为明显 - 您必须移除未使用的库代码,使库资源变为未引用资源,才能通过资源压缩器将它们移除。

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}

如果您尚未使用代码压缩用途的 minifyEnabled 构建应用,请先尝试使用它,然后再启用 shrinkResources,因为您可能需要编辑 proguard-rules.pro 文件以保留动态创建或调用的类或方法,然后再开始移除资源。

2 . 移除未使用的备用资源

Gradle 资源压缩器只会移除未被您的应用代码引用的资源,这意味着它不会移除用于不同设备配置的备用资源。必要时,您可以使用 Android Gradle 插件的 resConfigs属性来移除您的应用不需要的备用资源文件。
栗子:
如果您使用的库包含语言资源(例如使用的是 AppCompat 或 Google Play 服务),则 APK 将包括这些库中消息的所有已翻译语言字符串,无论应用的其余部分是否翻译为同一语言。如果您想只保留应用正式支持的语言,则可以利用 resConfig 属性指定这些语言。系统会移除未指定语言的所有资源。
下面这段代码展示了如何将语言资源限定为仅支持英语和法语:

android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}
上一篇 下一篇

猜你喜欢

热点阅读