【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积

resConfigs介绍

  • 官网 https://developer.android.com/studio/build/shrink-code
    在官网中有介绍,如下所示:

Gradle 资源压缩器只会移除未被您的应用代码引用的资源,这意味着它不会移除用于不同设备配置的备用资源。必要时,您可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件。

例如,如果您使用的库包含语言资源(例如使用的是 AppCompat 或 Google Play 服务),则 APK 将包括这些库中消息的所有已翻译语言字符串,无论应用的其余部分是否翻译为同一语言。如果您想只保留应用正式支持的语言,则可以利用 resConfig 属性指定这些语言。系统会移除未指定语言的所有资源。

下面这段代码展示了如何将语言资源限定为仅支持英语和法语:

android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

同理,您也可以利用 APK 拆分为不同设备构建不同的 APK,自定义在 APK 中包括的屏幕密度或 ABI 资源。

【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第1张图片

二、实战

2.1 Resource.arsc 介绍

  • 资源打包过程简述
    【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第2张图片

打包工具负责编译和打包资源,编译完成之后,会生成一个resources.arsc文件和一个R.java,前者保存的是一个资源索引表,后者定义了各个资源ID常量,供在代码中索引资源。

  • Resources.arsc文件格式
    resources.arsc文件的作用就是通过一样的ID,根据不同的配置索引到最佳的资源显示在UI中。

从整体上来看,其结构为:资源索引表头部+字符串资源池+N个Package数据块。文件格式:
【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第3张图片

具体的关于Resource.arsc的内容,请看下面的几篇文章了解详情

  • https://www.jianshu.com/p/3cc131db2002
  • https://www.jianshu.com/p/de7c4f239ab6
  • https://blog.csdn.net/jiangwei0910410003/article/details/50628894

2.1 先不添加resConfigs ,查看编译出来的apk体积以及resources.arsc大小

未配置resConfigs的编译出来的apk分析如下所示:

  • apk体积为 52.1MB
  • resources.arsc体积为 4.2MB
  • string的配置语言有97个

【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第4张图片
【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第5张图片

2.2 添加resConfigs ,查看编译出来的apk体积以及resources.arsc大小

添加 resConfigs 配置,如下所示,我们apk只需要支持默认英文、还有中文的简体和繁体即可。

  //指定语言只使用中文、英文、繁体,注意英文是默认语言,可以不写
  resConfigs "zh-rCN", "zh-rHK", "zh-rMO", "zh-rTW"

配置resConfigs的编译出来的apk分析如下所示:

  • apk体积为 49.8MB
  • resources.arsc体积为1.8MB
  • string的配置语言有5个

【我的Android进阶之旅】使用resConfigs 去除无用语言资源,减少你的apk体积_第6张图片

有此可见,只配置你项目需要的语言,去掉不需要的语言,可以大大减少apk的体积。


作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/97646945
☞ 本人QQ: 3024665621
☞ QQ交流群: 123133153
☞ github.com/ouyangpeng
[email protected]


你可能感兴趣的:(我的Android进阶之旅)