最近开发某物业公司的APP,项目写完后感受Apk安装包肥了点,给它作个减肥套餐。java
优化的目的git
减小APK文件大小、下载、安装时间。github
一、能够看到主要是如下部分占用了应用大小
- classes.dex: Java字节码文件
- res: 资源文件、xml、图片等其余文件。
- lib: so库、jar包。
- resources.arsc: 二进制资源映射表
- assets: 存储音视频等原始资源文件。
1. 优化Dex文件
- minifyEnabled true proguard混淆、剔除代码。
- zipAlignEnabled true 4字节对齐提升运行效率(若是在Google play上架必须开启)
- 多余依赖库(项目基础框架包含较多库,部分库可能这个项目没有使用到)
External Libraries能够看到jar,根据项目检查是否是所用到的。web
经优化减小5344-4087=1257kb微信
二、优化Res文件夹
- 尽可能保留一套图片资源、会自动根据高低密度缩放,主流720P 、1080P放xhdpi或xxhdpi。
- 开启shrinkResources true 剔除无效资源
- png图片压缩、www.tinypng.com
- webp格式 在4.2.1以上会支持比较好,4.0~4.1不支持无损、透明通道(该方案暂未使用)。
经优化减小4087-3899=188kb架构
三、优化so库
- abiFilters 配置支持的cpu架构类型
so库有不少CPU架构的如:'armeabi','armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'等,通常armeabi是兼容armeabi-v7a的,v7在图形渲染方面作了优化,若是没有特别要求能够不须要。app
经优化减小3899-3591=308kb框架
四、优化resources.arsc
- 有美团方案、微信方案,我选择微信方案,关闭V2签名。
- resConfigs zh 因为项目没有国际化,暂支持中文
按官网配置后,选择构建便可。工具
构建后能够看到,资源混淆成功。优化
经优化减小3591-3009=582kb
五、其它优化
- 使用本身资源覆盖第三方未使用到的资源,好比第三方有大图在aar里面,可是这张大图并无实际展现出来,能够放1x1大小图片覆盖,从而减小apk大小。
能够解压apk文件查看有哪些大图,建立1*1放到对应目录覆盖。
小结
最终APK大小 5.21M瘦身到2.93M,其实还能够再优化好比剔除R文件等,这些下次再好好琢磨补充文章。
二、其余建议
- 使用插件化(上架Google Play慎用)
- 尽可能使用xml文件代替图片(shape,selector等)
- 剔除R文件(此次优化尚未用上)。
- 使用Webp格式(这个坑尚未掌握,项目要求4.0+,还有国产手机改了rom不支持webp)
- 使用点9图
- 使用常量代替枚举
- HTML混合开发。
参考资料
- 老司机谈APK瘦身套路-项目优化篇 http://blog.csdn.net/mynameishuangshuai/article/details/51766185
- 【推荐】 Android APP终极瘦身指南 https://mp.weixin.qq.com/s/3oSsVY5mbPUdZ-jW5T-0kQ
- 爱奇艺Android移动客户端app瘦身经验 http://blog.csdn.net/wenyiqingnianiii/article/details/52152091
- Android资源混淆打包方案 http://blog.csdn.net/xiangzhihong8/article/details/54989020
- 微信资源混淆工具 https://github.com/shwenzhang/AndResGuard
- 剔除R文件 https://github.com/meili/ThinRPlugin/blob/master/README.zh-cn.md
- 四字节对齐 http://blog.csdn.net/liujianli123/article/details/47045929
打个广告: Square开源交流 QQ群166354503 (Rxjava Retrofit EventBus MVP OKHttp等等交流)。