Android Apk极限瘦身

随着功能集成的越来越多,我们APK的体积也越来越大,所以带来了很多的问题,
1.用户看着Apk包太大,下载的时候望而却步;
2.占用手机的内存越来越大;
3.随着版本的迭代,代码里的无用资源以及冗余代码越来越多 。
所以Apk的瘦身优化,也就越来越重要 。
Apk瘦身主要从以下7个方面进行
一.将图片转换成WebP格式;
二.去除多语言;
三. so库优化;
四.移除无用资源-Lint检查
五.开启混淆
六.开启删除无用资源
七.微信资源压缩方案;
下面说一下具体操作
(一).WebP格式转换
WebP格式是谷歌2010开发的一种旨在加快图片加载速度的图片格式,来源于VP8视频编码解码 。WebP是通过预测技术对图片进行编码 。WebP编码流程 WebP会将图片划分为两个8*8色度像素宏块和一个16*16亮度像素宏块 。在每个宏块内,编码器基于之前处理的宏块来预测冗余动作和颜色信息 。通过图像关键帧运算,使用宏块中已解码的像素来绘制图像中未知部分通过预测模式去除冗余数据,实现更高效的压缩
在 中也给我们提供了相对应的转换方法
从图中我们可以看出来,我们图片的大小缩小了三倍多,。。而且对我们的视觉效果基本上没有影响;
(二).去除多语言
由于第三方库,如-v7的引入,库中包含了大量的国际化资源,根据情况通过配置进行删除
(三).so库优化 --- 只保留-v7a
如果项目中包含第三方SDK或者自己使用了ndk,如果不进行配置会打包全cpu架构的动态库进入apk.对于真机只需要保留一个(-v7a)就可以了
(四).移除无用资源
1.一键移除,
如果出现使用动态id,使用资源会出现问题(不建议使用) eg: int= .(“iv_bg”, “”,()); .(); 特别注意: 动态获取资源id,未直接使用R.xx.xx,则这个id代表的资源会被 认为没有使用过(类似不能混淆反射类一样)

Android Apk极限瘦身

文章插图
2.lint检查
Lint是 提供的代码扫描工具,他可以帮助我们发现代码结构/质量问题,同时提供一些解决方案,而且这个过程不需要我们手写测试用例 。代码迭代版本一多,很容易遗留一些无用的代码,资源文件,我们可以使用Lint来进行清除
(五).开启混淆
【Android Apk极限瘦身】的三大作用
1.压缩 移除未被使用的类,属性,方法等,并且会在优化动作执行之后再次执行(因为优化后可能再次暴露一些违背使用的类和成员) 。
2.优化 优化字节码,并删除未使用的结构
3.混淆 将类名,属性名,方法名混淆为难以读懂的字母
(六).开启删除无用资源(与Lint不同)
用来开启压缩无用资源,也就是没有被引用的文件(经过实测是,layou,实际并不是删除,而是保留文件名,但是没有内容),但是因为需要知道是否被引用所以需要配合使用,只有当两者都是true的时候才会起到真正的删除无效代码和无用资源的目的 。与去除无用资源不同的是,比如某个java类没有用到,被混淆时删除了,而该类引入了资源 。此时会将这个资源也压缩掉 。
(七).微信资源压缩方案
什么是? 是一个缩小APK大小的工具,他的原理类似Java ,但是只针对资源 。他会将原本冗长的资源路径变短,例如res//变为r/d/a.
git地址: