您的位置:首页 > 移动开发 > Android开发

【实践】Android apk瘦身实践

2017-07-13 00:26 267 查看

项目背景:

更小的安装包可以提升用户转化率,所以安装包瘦身是很有必要的。

1:去除无用的语言资源

resConfigs “zh”

2:so库兼容

So(shared object,共享库)是机器可以直接运行的二进制代码,是Android上的动态链接库,类似于Windows上的dll。每一个Android应用所支持的ABI是由其APK提供的.so文件决定的,这些so文件被打包在apk文件的lib/目录下。

So的常见的场景如:加解密算法、音视频编解码、核心代码等。在生成SO文件时,需要考虑适配市面上不同手机CPU架构,而生成支持不同平台的SO文件进行兼容。目前Android共支持七种不同类型的CPU架构,分别是:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),Mips (从2012年起),ARMv8,Mips64和x86_64 (从2014年起)。

理论上对应CPU架构的So的执行效率是最高的,但是这样会导致在libs目录下放置各个架构平台的So文件,Apk文件的大小自然也就更大了。那么我们自然想到缩减Libs的目录,一般情况(注意限定)下留下armeabi目录即可,armeabi目录下的So可以兼容别的平台的So,但是性能会有所损耗,失去对特定平台的优化。

因此需要根据自己使用到的So功能来做具体的区分:对于性能敏感模块使用的So可以都放在armeabi目录,然后通过代码判断设备的CPU类型,再加载其对应架构的SO文件,例如微信就是这么做的。既缩减了Apk的体积,也不影响性能敏感模块的执行。

移除特定平台So的方式,这样打包就只保存armeabi里的So。

ndk {
//设置支持的SO库架构
abiFilters  'armeabi'
}


备注:

原本x86架构的CPU是不支持运行arm架构的So,但Intel和Google合作在x86机子的系统内核层之上加入了一个名为houdini的Binary Translator(二进制转换中间层),这个中间层会在运行期间动态的读取arm指令并将之转换为x86指令去执行。

http://blog.csdn.net/michael1112/article/details/54579911

http://www.open-open.com/lib/view/open1440421271716.html

3:png图片转webp

基本上,对于Android4.0的手机就有对WebP的 支持了,不过根据相关的数据显示,对于Android 4.1才开始对WebP有了比较稳定的部分支持(即大多数只支持不含alpha通道的WebP图片),Android 4.2才基本完全支持WebP。

Android4.2开始基本才完全支持WebP(4.0有些手机可能不支持,4.1可能不支持有alpha通道的WebP),而我们的应用本身最低支持的系统版本为4.1,怎么办?这里采用了折中的方式,将可以去掉alpha通道的图片进行WebP化,其他图片尽量都进行一次压缩。不过如果以后能将大部分甚至是全部图片WebP化,估计应用大小会大大减小。

现在可以开始我们的裁包啦,由于项目中图片资源过多,我们把目标锁定在文件大小大于30KB的图片,对于小于30KB的则不管啦。

简单的总结一下流程:

1. 通过APK Analyzer找出能WebP化的大图


2. 将该图片转JPG,去掉alpha通道 //根据实际情况考虑哦


3. 将JPG转WebP,并压缩其余PNG图片


4. 最总要的一点,项目中没用到的图片赶紧删掉啦啦啦


4:字体文件剪裁

对ttf字体文件压缩,可以采用FontCreator工具只提取出你需要的文字。比如在做日期显示时,其实只需要数字字体,但是使用原有的字体库可能需要10MB大小,如果只是把你需要的字体提取出来生成的字体文件只有10KB。

5:梳理依赖库

去掉一些冗余的依赖库。或者去掉功能重复的依赖库。

6:微信的资源混淆

7:facebook的redex方案

8:插件化

资源离线+插件化

9:蘑菇街的方案

https://github.com/meili/ThinRPlugin/blob/master/README.zh-cn.md

参考资料:

是时候使用 webp 给 apk 瘦身了!

https://juejin.im/entry/583a9cab61ff4b007ecbf597

APK包瘦身——追上那个胖子(百度)

https://mp.weixin.qq.com/s/w-JnlBRLiSbRRi_btwFDgA

Android性能优化(十)之App瘦身攻略

https://mp.weixin.qq.com/s?__biz=MzI3OTU3OTQ1Mw==&mid=2247483785&idx=1&sn=81fb5a5f57dd119e9b61477db1f5d2a5&chksm=eb44dfdbdc3356cd140a01d4b36df683798442347709eed031ec25daf73d82869474f84e69e2&mpshare=1&scene=23&srcid=05240yGaBTSiJEEcEEzWRpyO#rd

Android APK 瘦身 - JOOX Music项目实战(腾讯)

https://mp.weixin.qq.com/s/9IGYG6hNKL1V7N_p16p2Hg

Android 减包 - 减少APK大小(腾讯)

https://mp.weixin.qq.com/s/u7qZp7ifUZoty8d8McH5QA

Android App包瘦身优化实践(美团)

http://www.jianshu.com/p/6c17f6438aab?from=jiantop.com

APK瘦身记,如何实现高达53%的压缩效果(阿里)

https://yq.aliyun.com/articles/57284?&utm_source=qq
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: