1. APK 瘦身的好处

虽然手机的内存越来越大但是应用包大小也在增加,内存资源依旧短缺。用户自然都希望一个应用的安装包能越小越好,更小的 APK 标示着更多的用户愿意去下载和体验。面对动辄几十兆的 App 来说在非 WIFI 情况下用户会犹豫是否下载,不下载就可能因此失去了一个用户。APK 包体的大小,会严重影响推广的难度。减少 APK 的大小就显得尤为重要,所以 APK 瘦身是一项非常必要的事情。

2. APK 体积变大的原因

随着业务复杂度的逐渐增加,代码、资源文件也在不断的增加,APK 大小也在不断增加。APK 安装包体积变大的主要原因大致如下:

  • 随着版本迭代,代码量越来越大,冗余代码越来越多。
  • 引入的第三方 SDK 或开源库越来越多,增加了很多重复资源、方法以及无效代码。
  • App 支持的主流 dpi 越来越多,如 ldpi、mdpi、hdpi、xh、 xxh、 xxxh 等等,间接导致资源增多。
  • 冗余的资源文件未及时删除。
  • 用于体验要求高,图片资源为保证清晰度会使用分辨率更高的图片。

了解 APK 体积变大的原因之后,就可以从这些切入点来减少 APK 体积。

3. 如何实现 APK 瘦身

3.1. 减少 Java 代码体积

无效、冗余代码以及第三方库的大量引入都会导致 APK 包体积变大。可以通过以下方式来避免这种问题:

  • 开启 minifyEnable:混淆代码,类名、属性名变短;压缩优化,遍历所有代码并找出没有引用到的代码,这些代码不会生成在 APK  中。
  • 定期 Code Review 重构代码:对代码的不断优化减少冗余代码,精简逻辑。
  • 慎重选择你使用的开源库:选择精简 SDK ,根据场景考虑是否使用源码依赖,手动移除不必要的文件资源。
  • 避免重复库:避免引用功能相同的第三方库。
  • 根据项目需要选择合适平台的 so 文件,so 文件可以放到网络中加载。
  • 避免使用枚举。

3.2. 优化资源文件

资源文件在 APK 中占有较大比重。及时适当的优化资源文件可明显降低 APK 大小。可采用如下方法进行优化:

  • 及时删除冗余资源文件,可以使用 Android Studio Analyze下的 Android Lint 用来去除无用资源,去除无用的 xml 和图片、包体积优化以及对代码进行优化。
  • 对图片进行处理, 使用 Webp 格式的图片,Webp 相对于 PNG 或 JPG 格式图片,压缩比高效果更好;对项目中使用的大图进行适当的缩小。
  • 第三方库中无用的大图使用小图替换。
  • 减少图片使用,很多纯色的渐变的圆角的图片都可以用 shape 实现,代码灵活可控,省去了大量的背景图片。
  • 要启用资源压缩,请在 build.gradle 文件中将 shrinkResources 属性设置为 true。
  • 将大资源文件放到服务端,启动后自动下载使用。

3.3. 支持插件化

插件化技术支持动态的加载代码和动态的加载资源,把 App 的一部分功能分离出来,对于业务庞大的项目来说非常有用,显著的分解了 APK 大小。因为插件化技术需要一定的技术保障和服务端系统支持,有一定的风险,可根据项目实际需要选择。

 

每日一问的答案中可能无法全完解读这个问题,如果您是相关技术专家或者是对本问题有自己的见解,欢迎带着「批判性」的态度阅读,指正其中的不足。