APK 如何做到包体积优化?
https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1878
总结:
安装包监控:
Android Studio 的 APK Analyser:
这是 Android Studio 提供的一个 APK 检测工具,通过它可以查看一个 APK 文件内部各项内容所占的大小,并且按照大小排序显示。
APK Analyzer 的使用非常简单,只要将需要分析的 APK 文件拖入 Android Studio 中即可。
Matrix中 的 ApkChecker:
ApkChecker 是腾讯开源框架 Matrix 的一部分,主要是用来对 Android 安装包进行分析检测,并输出较为详细的检测结果报告。
安装包优化实践:
删除无用文件:
1.使用 Lint 查看未引用资源。Lint 是一个静态扫描工具,它可以识别出项目中没有被任何代码所引用到的资源文件。具体使用也很简单,只要在 Android Studio 中点击 Analyze -> Inspect Code,然后选中整个项目即可。
可以在项目编译时期减少被打包到 APK 中的文件, 使用 shrinkResources 能够在项目编译阶段,删除所有在项目中未被使用到的资源文件。但是需要将 minifyEnabled 选项设置为 true。
2.使用 resConfig 限定国际化资源文件。有时候我们使用到的三方库中可能会对各种国际化语言进行支持,但是我们自己的项目只支持某个语言,比如中文,那我们可以在 gradle 的 defaultConfig 中使用 resConfig 来限制打包到 APK 中的国际化资源文件。
文件优化:
1.关于静态图片优化
优先使用 VectorDrawable 图片,如果 UI 无法提供 VectorDrawable 图片,那么 webp 格式是一个不错的选择。Android Studio 也支持直接将 png 或者 jpg 格式图片转化为 webp 格式。
2.关于动态图片优化
实际上 webp 也可以作动态图,只是目前对 webp 动图支持的三方库并不多,谷歌官方推荐的 Glide 对 webp 支持也不是很友好。但是谷歌推出了一套 C++ 依赖库,上层开发人员可以基于此库的基础上使用 JNI 来解析 Animated webp 图片,并将解析出来的每一帧封装成一个 Bitmap,并根据解析出来的时间差值动态显示相应的帧 Bitmap 即可。如果 JNI 不熟或者不想再花时间精力去实现 JNI 调用,可以考虑使用 GitHub 的 Android-WebP 。Android 开发人员只需使用 WebpImageView 控件并指定图片路径即可。
另外针对动态图片,我们也做了其他方面的尝试。做过游戏开发的一般都比较熟悉 TextureAlas 这种图片格式。
3.关于引入三方库
无需全量引入,只引入使用到的部分功能即可。
4.关于 App Bundle
如果 App 是海外项目,因为谷歌官方支持动态发布。正常情况下我们的 APK 中为了更好地适配屏幕、语言等,会在项目里添加多套相应的资源文件,比如不同 hdpi 的 drawable,或者不同 CPU 下的 so 文件,最终打包生成的 APK 中会包含所有的资源文件。但是实际上一台手机设备只会用到这其中的一套资源,这无形中就已经产生了一些不必要的资源浪费。而谷歌的 Dynamic Delivery 功能就天然地解决了这个问题,通过 Google Play Store 安装 APK 时,会根据安装设备的属性,只选取相应的资源打包到 APK 文件中。
另外我们在项目中也使用了另一个 App Bundle 中比较好用的选项--Dynamic Asset Delivery。这个功能本来只是针对安装包超过 100M 的 App,但是不影响我们使用这套方案进行安装包优化。具体做法就是将大部分 assets 中的资源使用无损压缩的方式,压缩成一个 .obb 格式的文件,然后每次发布 APK 时都将此 obb 文件设置为 APK 的 bundle 文件,这样也可以减少用户实际的安装包大小。
但是 App Bundle 目前只适合在 Google Play Store 上发布的项目,国内目前还是通过各家的插件化方案来实现动态部署,一定程度上也可以算作减少安装包大小的方案。
归纳:
安装包的监控
主要介绍了几个可以用来分析安装包大小以及详细内容的工具:Apk Analyzer 和 ApkChecker。实际上,在开发过程中,良好的编程习惯和严格的 code review 也是非常重要的。
安装包优化实践
主要思路就是删减无用资源或者代码,并对资源文件进行相应的压缩优化。实际上除了资源文件,对于代码部分也可以更进一步的优化,比如使用 Proguard,或者直接使用 R8 编译方式。 只是因为 R8 还处于实验阶段,我们项目中没有过多的实践过程。
APK 包体积优化方法与实践
本文围绕 APK 包体积优化展开,介绍了安装包监控工具,如 Android Studio 的 APK Analyser 和 Matrix 中的 ApkChecker。在优化实践方面,包括删除无用文件、限定国际化资源,对静态和动态图片优化,按需引入三方库,还提及 App Bundle 及国内插件化方案,最后归纳了优化思路。
1568

被折叠的 条评论
为什么被折叠?



