一:apk的分析
- 将apk直接拖入到android studio中,可以分析出lib,res等文件的大小
- 可以用https://nimbledroid.com/;这个网址可以直接分析apk的文件大小,dex方法数,sdk方法数
二:代码瘦身
1.第三方库的瘦身
- 各个三方库依赖的同个库版本需一致
- 对于同类型的库,选择方法数少的,可以用插件android method count来计算
- 对于一个库中只需要用其一个模块的功能,只需要集成对应功能即可,例如fresco中只需要其webp图片加载功能
2.删除无用的代码
- 业务代码不断的增加
- 代码太多不敢删除,怕以后还得用到
- 用aop统计使用情况
三:资源瘦身
- 右键 -> Refactor -> remove unused res。-> preview。这个去除没有用到的资源文件
- 图片压缩,可以用熊猫网站压缩图片
- 图片格式的选择,对于网络图片可以用webp格式的,一些图标也可以用svg格式的
- 资源混淆:https://github.com/shwenzhang/AndResGuard;可以将冗长的资源路径变短
- 图片可以只保留一份,在mipmap-xhdpi,其会自动放大缩小根据分辨率
- 对于一些图片可以放到服务器,app启动对其预加载
四:so库瘦身
目前支持的cpu架构有:armeabi-v7a(arm32),arm64- v8a(arm64),x86,x86-64的四种,对于so库我们应该选择v7a还是v8a呢?
举个例子:
1.arm64-v8a手机,只放armeabi-v7a的app;在找so文件时,会发现没有arm64- v8a目录,那就会去找armeabi-v7a目录,(如果没有发现没有armeabi-v7a目录,就会去找armeabi目录)
2.armeabi-v7a手机,只放了arm64-v8a的app;在找so文件时,就会找不到对应的so库,所以只放v8a的,就会放弃掉32位的设备
3.需要注意的是:如果你的app,arm64-v8a目录放了a.b so文件,
armeabi-v7a目录放了c so文件,那c这个so文件就找不到了,因为发现有arm64-v8a目录后,就不会再去找32位的目录了
可以看到微信也是32和64都打了包,所以我们可以看需求:
最好是32位的打一个,64的打一个,毕竟64的效率肯定更高;如果不想这么麻烦就直接用armeabi-v7a即可
面试
apk的长期瘦身的有效处理
- 在后期开发新功能的时候,发版之前需与上一个版本包体积对比,超过阈值则必须要优化
- 模块推进以插件化的形式进行动态下发