概述

APK(Android Package)包体积优化关于Android应用开发非常重要。

  1. 用户体会方面:较小的APK包体积能够使应用程序更快地下载和装置,以及更快地在设备上运转。这能够进步用户体会并削减用户的等待时间。
  2. 存储空间方面:许多用户设备的存储空间有限,特别是在低端设备上。经过优化APK包的体积,能够节省用户设备上的存储空间,使他们能够装置更多的应用程序。
  3. 带宽耗费方面:较小的APK包体积能够削减应用程序的下载所需的带宽。尤其是在网络条件欠安的地区或无限流量方案限制的用户,APK包体积优化能够明显削减应用程序的下载耗费。
  4. 更新和维护方面:较小的APK包体积能够加速应用程序的更新速度。当应用程序有更新时,较小的包体积意味着更少的数据需求下载,然后削减了更新所需的时间和流量。

管理好app的包体积,首要分为两个方面的作业:

  • 包体积监控
  • 包体积优化

包体积监控

当发布新版app时,经过合适的东西分分出 新包与旧包的体积差具体体现在什么地方,能够给咱们的后续包体积优化供给根据。

AndroidStudio的Apk Analyser

它能够具体呈现出 apk中哪个部分占有的空间最大。运用方法也非常简单,就是在androidStudio中双击一个apk文件,会自动出现如下窗口:

二十四、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代码再去运用这些图片,关于这种状况,它是无法处理的

运用方法演示

文档

官方文档

jar包下载地址

二十四、Apk包体积优化
点击蓝色matrix-apk-canary-2.1.0.jar

运用文档

运用留意

留意,运用它时要装备一个config.json文件,这个json中指定了一些要害参数,

包含

  • 要剖析的apk文件途径
  • 混杂mapping.txt文件途径
  • 资源映射文件途径
  • 剖析报告输出目录

等,还有一些其他的具体装备,参考 运用文档

二十四、Apk包体积优化

装置包体积优化

Lint查看未运用的资源

Lint是一个静态扫描东西,它能够识别出 没有被任何代码运用到的资源文件。

二十四、Apk包体积优化

选择whole project作为目标去扫描,就能得到类似如下的成果:

二十四、Apk包体积优化

咱们能够酌情删去这些未被运用的资源。

打包时不包含无用文件

  • shirnkResources 能够在打包编译阶段,删去掉一切没有被运用的资源,可是有必要一起敞开混杂 minifyEnable 有必要设置为true

  • 运用resConfig限制国际化资源文件

    • 这种方法,能够在打包时,只是将指定言语的资源文件打到apk内,比方咱们依照发布的国家去发包,那么能够经过多途径装备,来指定每个途径引证的 限制言语。
    • 二十四、Apk包体积优化

文件优化

静态图片优化

优先运用 drawable矢量图,假如不可的话,webp是最优选择。 如下图,androidStudio支撑直接将 png或者 jpg等批量转化成 webp格局,缩小体积最大能够到90%

二十四、Apk包体积优化

动态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
    • 后者的定制化功用更强大一些,而且能够集成到自动化体系中
  • 装置包体积优化

    • 首要思路是 删减未运用的资源和代码,而且对 资源文件进行相应的体积紧缩
    • 当然,启用代码资源的混杂也能够节省必定的空间,