1.apk变大的原因
(1)主流dpi分类越来越多,从基础的ldpi、mdpi和hdpi到后来的1x、2x、3x等dpi;
(2)第三方sdk、函数库的引入;
(3)视觉要求提高,图片细节丰富,体积变大。
2.apk结构
apk包文件主要分为Java代码文件、Native代码文件和资源文件三类。
(1)Java代码文件:打包后主要存储在classes.dex文件中(方法数目没有超过65K的情况下,如果超过可以有多个classes.dex文件);
(2)Native代码文件:主要是lib下的.so文件库;
(3)资源文件:assets目录、res目录和resources目录。
3.瘦身方法
(1)优化图片
a.首选WebP格式(Android4.0开始支持),也可通过第三方函数库如webp-android-backport将其它格式的图片转换为WebP格式。微信、微博、淘宝都在使用这种格式;
b.无损压缩,使用ImageOptim压缩工具;
c.有损压缩,如ImageAlpha、TinyPNG工具进行有损压缩,但压缩过的图片要经过设计师的检验才能上线,否则会影响视觉效果;
d.尽量使用.9.png图片,优点,体积小、拉伸不变形,能够很好地适配各种机型,Androidstudio中提供了编辑工具和转换功能。
(2)使用Android Lint删除无用资源
通过Android Lint工具分析res目录下的资源文件,结果会在Unused resources文件夹中显示哪些图片是多余的,删除即可;
注:Java反射使用的图片也会被检测出来,所以删除这些图片的时候还要人工检查一下
(3)利用Android Gradle配置
a.minifyEnable=true;//开启Proguard混淆;
b.shrinkResources =true;//省略无效文件,和Lint功能相似,所以谨慎使用;
c.除去第三方sdk中不使用的dpi包、国际化文件资源和不同平台的.sou库,如只保留armeabi-v7a和x86平台;
(4)优化、重构代码
减少重复代码的书写,服用公共代码,提供基础的工具类,如网络、数据库、加解密、utils工具包等;
(5)插件化
不过首先你要实现一个插件化框架,用来在线的下载并加载各个插件。如果插件化知识掌握的不够清晰的话,不要在面试的时候说这一条,不要自己挖坑,哈哈。