android APK大小优化

APK里面包含哪些文件?
用解压缩工具打开APK,一般会看到如下文件
META-INF/: 包含 CERT.SF 和 CERT.RSA 签名文件, 以及 MANIFEST.MF文件
assets/: 包含应用资源, 可通过 AssetManager 获取
res/: 不能被编译进 resources.arsc的资源文件
lib/: 包含编译好的代码. 根据不同平台包含不同的子目录,比如 armeabi, armeabi-v7a,
      arm64-v8a, x86, x86_64, mips
resources.arsc: 资源索引文件
classes*.dex代码文件
分析各项占比,确定优化方向。

缩减APP大小
缩减APP大小包括资源文件和代码两方面

1、删除无用的资源文件
1.1 使用lint工具

可发现res/下未被引用的资源文件,使用android studio的clear unusedResources一键清理,清理完后,有可能报错,需要修复报错并且复查一下。

1.2 添加的libaraies

未被使用的资源文件可通过开启shrinkResources自动清除
开启minifyEnabled和shrinkResources,在build时先通过proguard去除无用代码,然后gradle再去除无用资源

1.3 裁剪依赖库
1)、如果项目使用到了第三方库,很多情况下只会用到其中的一部分功能,可以通过裁剪无用的部分减小依赖库;
2)、有一些依赖库功能比较庞大,可使用替代库或者手机版依赖库(动态依赖)

1.4 图片资源
1)、使用webp格式替换png格式图片资源,webp相比较png格式,文件较小但图像质量丝毫不差;
2)、使用压缩优化工具压缩png和jpeg图片,常用的有tinypng, pngcrush, pngquant,  zopflipng
3)、使用矢量图代替图片资源,矢量图体积较小,可支持任何分辨率
4)、第三方应用为了支持尽可能多的机型,需要支持尽可能多的分辨率,部分情况可针对特定密度的机型保留对应分辨率的图片资源,这样的优化在低密度设备上效果比较明显
5)、使用代码代替图片资源进行渲染

2 缩减代码,一般代码体积会减少30%-70%
通过minifyEnabled 打开proguard,移除无用代码,用短名称混淆类、字段和方法,可有效缩减代码
缺点:
1、代码压缩会增加构建速度
2、如果不能充分地自定义要保留的代码,可能会引入错误,如对提供对外的接口、变量的混淆,导致调用失败。
3、定位日志输出时,需要对应map文件查询。

附录工具地址:
https://github.com/KeepSafe/android-resource-remover
https://github.com/krschultz/android-proguard-snippets
https://github.com/shwenzhang/AndResGuard
https://tinypng.com/
https://webp-converter.com/
 

你可能感兴趣的:(移动开发)