概述
APK(Android Package)包体积优化关于Android应用开发非常重要。
- 用户体会方面:较小的APK包体积能够使应用程序更快地下载和装置,以及更快地在设备上运转。这能够进步用户体会并削减用户的等待时间。
- 存储空间方面:许多用户设备的存储空间有限,特别是在低端设备上。经过优化APK包的体积,能够节省用户设备上的存储空间,使他们能够装置更多的应用程序。
- 带宽耗费方面:较小的APK包体积能够削减应用程序的下载所需的带宽。尤其是在网络条件欠安的地区或无限流量方案限制的用户,APK包体积优化能够明显削减应用程序的下载耗费。
- 更新和维护方面:较小的APK包体积能够加速应用程序的更新速度。当应用程序有更新时,较小的包体积意味着更少的数据需求下载,然后削减了更新所需的时间和流量。
管理好app的包体积,首要分为两个方面的作业:
- 包体积监控
- 包体积优化
包体积监控
当发布新版app时,经过合适的东西分分出 新包与旧包的体积差具体体现在什么地方,能够给咱们的后续包体积优化供给根据。
AndroidStudio的Apk Analyser
它能够具体呈现出 apk中哪个部分占有的空间最大。运用方法也非常简单,就是在androidStudio中双击一个apk文件,会自动出现如下窗口:
上图中,apl analyser将一个apk文件中的各个部分的占用空间进行了从大到小的排序。
实际上,它的作用不止如此,咱们乃至能够用它来剖析一些优秀的apk,逆向推断出它所用的 目录结构,代码标准,乃至运用了哪些 动态库技能等。
Matrix 中的 Apk Checker
Matrix是腾讯的一款开源库,Apk Checker
则是 Matrix的其中一个组件。首要用来对Android 装置包进行剖析检测,并输出较为具体的检测报告。
一般咱们需求下载Matrix的源代码,然后独自编译 matrix-apk-cananry
部分。
可是也有速成的方法,在网上下载 ApkChecker.jar
文件,然后装备一个 json文件即可。
ApkChecker
的优势在于,这是一个jar包,它能够用命令行来执行,这意味着咱们能够将 apk包的检测动作集成到 自动化体系中(比方 Gradle插件,批处理命令等),并将产出的剖析报告发送到指定位置。这样,咱们就能对当时版别的apk有一个大约的评估。
Apk Checker 的缺点
它会自动分分出 apk中打包了,可是实际上没有运用到的资源,可是这种剖析,仅针对Java代码中直接引证的资源。 关于直接引证的,比方 java代码先读取一个json,json中放置了多个图片的途径,然后java代码再去运用这些图片,关于这种状况,它是无法处理的
运用方法演示
文档
点击蓝色matrix-apk-canary-2.1.0.jar
运用留意
留意,运用它时要装备一个config.json
文件,这个json中指定了一些要害参数,
包含
- 要剖析的apk文件途径
- 混杂mapping.txt文件途径
- 资源映射文件途径
- 剖析报告输出目录
等,还有一些其他的具体装备,参考 运用文档。
装置包体积优化
Lint查看未运用的资源
Lint是一个静态扫描东西,它能够识别出 没有被任何代码运用到的资源文件。
选择whole project
作为目标去扫描,就能得到类似如下的成果:
咱们能够酌情删去这些未被运用的资源。
打包时不包含无用文件
-
shirnkResources
能够在打包编译阶段,删去掉一切没有被运用的资源,可是有必要一起敞开混杂minifyEnable 有必要设置为true
-
运用
resConfig
限制国际化资源文件- 这种方法,能够在打包时,只是将指定言语的资源文件打到apk内,比方咱们依照发布的国家去发包,那么能够经过多途径装备,来指定每个途径引证的 限制言语。
文件优化
静态图片优化
优先运用 drawable矢量图,假如不可的话,webp是最优选择。
如下图,androidStudio支撑直接将 png或者 jpg等批量转化成 webp格局,缩小体积最大能够到90%
动态gif图片优化
webp也能够做动态图,只不过稳定的第三方库并不多。 谷歌推出了一套 C++依靠库,上层开发人员能够经过封装jni来解析 动态webp图片,并将每一帧封装成一个bitmap,并根据解分出来的时间差值显现对应帧的bitmap呈现动态效果。
假如不想封装JNI,能够直接运用 Github
上的Andorid-WebP
,并运用其中的 WebpImageView
控件并指定图片途径。
合理引证第三方库
在引进第三方依靠之前,需求权衡一下是否需求将依靠中的代码和资源一次性全部引进。
假如只是是为了一个小功用的完成,引进一个巨大的框架,就显得很冗余,理想的做法是,阅览第三方的源代码,然后抠出咱们需求的部分经过自行编码的方法来完成想要的功用。
Apk Bundle
谷歌官方支撑动态发布,ap为了更好的适配多言语,多屏幕,往往会在项目中添加多套 资源装备,可是一台设备局,往往只需求其中一套资源,假如装置一个巨大的包,包含了很多永久不会被用到的资源,就显得很浪费空间。谷歌的动态发布,经过 Google Play Store
也就是谷歌应用商铺装置app时,会根据装置设备的属性,只选取所需的资源到apk中。
惋惜。这种做法,关于国内,无法测验。
总结
本文总结了 apk优化的理论知识以及实践经验,
-
装置包监控
- 谷歌官方的 androidStudio
apk analyser
- 腾讯的 matrix 中 的 apk checker
- 后者的定制化功用更强大一些,而且能够集成到自动化体系中
- 谷歌官方的 androidStudio
-
装置包体积优化
- 首要思路是 删减未运用的资源和代码,而且对 资源文件进行相应的体积紧缩
- 当然,启用代码资源的混杂也能够节省必定的空间,