Android的APK安装包瘦身
2016-09-14 18:12
337 查看
概述:
年初我们的apk随着业务量的增加,尤其是加入地图导航后,apk的大小从10M徒增到了20M。apk体积增大的原因:
业务量的增加
增加高分辨率图片
依赖了更多的第三方库
无用的资源
本文将根据自己在项目中采取的方法来减小apk的体积。减小apk体积也是一种android的优化手段,包过大会增加用户流量,降低下载欲望,同时也会降低安装失败的概率。
1.Analyze APK
Android Studio 2.2版本增加了Analyze APK功能,可以直接查看apk中各个模块占用的空间,我们可以利用此功能来查看需要优化的部分可以看出apk中各部分占用空间的比重,现在我们可以知道从何处下手来进行优化。
2.lint检查去除冗余
Android Studio-> Analyze -> Run Inspection by Name 输入unused resources,此功能可以筛选出无用的资源,看一下分析结果竟有300多个无用的资源文件,这里需要参考这份报告手动去删除,删除一波。
3.使用一套图片资源
我们知道Android支持多套图片资源适配,但对于大多数的app一套图就足够了,鉴于现在的形式,建议1080p的资源放在xxhdpi目录中。也有人建议720p的资源,虽然720p占用的硬盘的内存更小,但是在应用内存中占用更大的空间(可以参考这篇文章:http://blog.csdn.net/wrg_20100512/article/details/51295317),这会增加内存溢出的概率,虽然1080p占用的硬盘内存更大一些,但我们可以通过下面的方法近一步的优化。4.TinyPng有损压缩
官方网站:https://tinypng.com/很好的图片压缩网站,直接上传资源然后下载即可,使用非常方便,同时压缩效果非常好,强烈推荐。
5.使用jpg格式
像一些启动页、背景图、轮播图的png图片比较大,就算利用TinyPng有损压缩后感觉还是大,把这个图片转换为jpg后效果很明显。6.使用webp格式
如果png图片转换成jpg格式后还是很大,此时想压缩的更小,而尽量不降低画质,那么可以考虑一下webp。webp从Android4.0+开始原生支持,所以4.0以下设备将无法看到图片,使用的时候请注意,不过我们的app最低兼容的就是4.0+,所以无需担心。webp使用方法:
首先来下载工具,webp官网下载:https://developers.google.com/speed/webp/docs/precompiled,根据自己的系统下载合适的版本;
解压下载的文件,命令行进入bin目录;
执行转换命令:cwebp -q <quality> input.jpg -o output.webp 其中quality官方评测75是最佳值,我们可以自己定义数值,我这里用的是75;
看一下结果,可以看到直接从201KB减小到了43KB,效果很明显;
7.使用shape背景
在开发的时候我们能用代码做出来的效果就尽量不要用图片,这样可减少图片资源的数量,从而减少体积,很多背景图如按钮的背景、纯色背景都可以使用shape来制作,代码灵活可控,省去了大量的背景图片。8.开启shrinkResources去除无用资源
通过lint我们已经去除了很多无用的资源,但是我们依赖的一些官方库和第三方库中也可能引用了资源图片,我们不需要这些资源,此时在gradle中使用shrinkResources去除无用资源,效果不错。9.代码混淆
在gradle中使用minifyEnabled进行Proguard混淆的配置,可减小apk的体积详细的proguard配置可根据自身项目酌情编写,开启后要做好测试工作。
10.删除无用语言
通过配置resConfig可以选择支持打包的语言,从而去掉世界各地的语言支持11.使用微信资源压缩打包
微信资源压缩打包原理一句话总结就是:直接处理安装包,不依赖源码,不依赖编译过程,仅仅输入一个安装包,得到一个混淆包。主要是混淆资源ID长度(例如将res/drawable/icon.png混淆成r/s/a.png),同时利用7z深度压缩,大大减小apk体积。具体源码和使用方法在github中:https://github.com/shwenzhang/AndResGuard
原理介绍:安装包立减1M--微信Android资源混淆打包工具
12.避免重复库
避免重复库看似简单,但其中有玄机,要当心你引用的库中又引用了哪个第三方库,这样就容易出现功能重复的库了,常见的如图片加载的库:Glide、Picasso、ImageLoader等等。可通过studio查看External Libraries目录中是否有重复库的存在,减小apk体积。13.使用更小的库
顾名思义,更小的库代表体积更小,很好理解。有些时候同样功能的库在大小上的悬殊有可能是很大的,如果对某个库的要求不是非常苛刻,尽量选择更小的库,这会减小apk的体积,这种方案不是决定性因素,可作为参考。14.删除无用的so包
我们在加入百度地图后,会引入很多很多的so包,这些so文件占用很大的体积,像x86和x86_64都是跑在模拟器上面的,我们无需去支持,可以直接删除,或者在defaultConfig中配置:15.风险评估
方法条例 | 适用范围 | 易用性 | 风险指数 | 备注 |
---|---|---|---|---|
lint检查去冗余 | 全部 | 易 | 无 | |
使用一套图片资源 | 非极高UI要求的APP | 易 | 无 | |
TinyPng有损压缩 | 非极高UI要求的APP | 易 | 无 | |
使用jpg格式 | 仅限非透明大图 | 易 | 中 | |
使用webp格式 | 仅限4.0+设备 | 中 | 中 | |
使用shape背景 | 全部 | 易 | 无 | |
开启shrinkResources去无用资源 | 全部 | 易 | 无 | |
代码混淆 | 全部 | 易 | 无 | |
删除无用语言 | 非全球国际化应用 | 易 | 无 | |
使用微信资源压缩打包 | 全部 | 中 | 中 | 要配置白名单 |
避免重复库 | 全部 | 中 | 中 | |
使用更小的库 | 全部 | 中 | 中 | |
删除无用so包 | 限对特定设备不兼容(例如模拟器) | 易 | 高 | |
小结:
上述步骤已经能够把APP极大的瘦身下来,但考虑到风险,建议挑选适合自己的方法;还有一些方法没有列举出来,只因自己还没有亲身试用,等试用过后会及时补充更新。参考文章:
http://jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/?spm=a313e.7916648.0.0.VW6Cyb
http://jayfeng.com/2016/03/01/Android-APP%E7%BB%88%E6%9E%81%E7%98%A6%E8%BA%AB%E6%8C%87%E5%8D%97/?spm=a313e.7916648.0.0.VW6Cyb
http://www.cnblogs.com/soaringEveryday/p/5254520.html
相关文章推荐
- Android APK安装包瘦身
- Android APK安装包瘦身法则
- Android APK安装包瘦身
- Android APK安装包瘦身
- Android APK安装包瘦身
- Android APK安装包瘦身
- Android 安装包APK瘦身、多渠道打包总结
- Android APK安装包瘦身-------优化apk
- Android APK安装包瘦身
- Android APK安装包瘦身[转]
- Android 减小安装包大小(二) 利用 APK Analyzer 为应用“瘦身”
- android安装包apk的秘密
- Android安装包apk文件在某些版本操作系统上安装解析包出错问题的解决办法
- Android apk安装过程及Java、JNI读取安装包内assets资源文件的两种方法(附源码实例)
- android 生成apk安装包
- Robotium 测试Android apk安装包
- 如何给你的Android 安装文件(APK)瘦身
- android 获取apk安装路径、安装包路径
- 如何给你的Android 安装文件(APK)瘦身
- 如何给你的Android 安装文件(APK)瘦身