安装包性能优化:
1.减小APK大小
2.提高APK运行速率
APK为什么越来越大?
1.随着Android系统版本的碎片化发展和手机类型的极大丰富,每个APP要支持的主流dpi分类越来越多。
2.随着Android生态系统的不断发展,逐渐变得成熟,出现了很多好用的三方库,使用非常方便,由于引入了三方库,就不可避免的引入一些无用的或重复的代码和资源文件。
3.为了提高用户体验,对APP的UI产生了更高的要求,APP提供的资源细节越来越丰富。占用的体积也就越来越大。
从APK文件结构说起
apk解压后的目录assets:该目录主要存放需要打包到Android应用程序中的静态文件,例如:图片文件,JOSN配置文件,渠道配置文件,数据库文件等。该目录下的文件不会生成对应的资源ID。
lib:该目录主要存放的是应用程序依赖的不同的ABI类型的.so文件。
META-INF:该目录存放的是APK签名相关的密钥文件。用于验证APK包的完整性以及保证系统的安全。
res:该目录存放的是应用的资源文件,包括图片资源、布局资源、尺寸资源、字符串资源等;该目录下的资源文件都会生成对应的资源ID,存放在R.java文件中。
AndroidMainifest.mxl:清单文件,用来控制应用的名称,桌面图标,访问权限等全局属性;此外还有Android 四大组件的生命配置等。
classes.dex:应用程序的可执行文件。Android 代码都打包在该文件中。单个dex文件中的方法数不能超过“64K”;
resources.arsc:资源索引表,资源的描述文件,用来描述具有ID值的资源的对应关系。
根据APK包的组成,影响APK大小的文件可以分为三种类型,分别如下:
i.Java代码文件:classes*.dex;
ii.Native(本地)代码文件:lib目录下的.so文件
iii.资源文件:包括aeests目录、res目录以及resources.arsc文件
综上所述,通过以下几个方面对APK文件进行瘦身:
1.优化图片--图片压缩
目前Android平台原生支持的图片格式有:JPEG、PNG、GIF、BMP、Web
可以通过图片压缩工具对原始图片进行压缩,可以大大较小图片的大小,从而节省空间。
图片压缩工具:tinypng.com/
图片压缩转换工具:isparta.github.io/
2.使用AS自带的Lint工具删除无用资源
Lint不仅能检测内存泄漏,还能检测出没有用到的资源,该工具只是提出建议优化的地方,并不是100%靠谱。
Lint代码检测3.资源动态加载--插件化开发
插件化开发也是减少一个App体积的可行的途径,某些模块功能代码不必内置APK中,在程序运行的时候动态加载。
4.Proguard(混淆)
通过代码混淆不仅能够提高APK的反编译,还能较小APK大小;混淆可以删除注释和无用的代码;可以将Java文件,变量,方法名登改为短名,这样就可以缩减字符所占的空间,但并不是所有的文件都可以混淆;比如res下的文件,文件res下的资源文件在R.java 文件中都会有对应的ID,如果直接将文件名改了,资源和ID就不对应了。导致程序崩溃。
代码混淆5.资源“混淆”
上面提到,res下的资源文件不能混淆,如果我们可以将res下的资源文件名也改成短名,并且ID对应关系也改成对应的;这样就可以实现资源文件的“混淆了”,通过对应的工具代码:将资源文件名和对应关系改掉,resources.arsc文件就是资源的描述文件,所以需要对该文件进行读写操作;
resources.arsc文件格式6.重构和优化代码
保持良好的编码习惯,对你的代码进行持续的优化或者重构,减少代码的重复,实现代码的复用。
最后附上代码:
安装包优化工具代码:github.com/guofudong/ResProguard.git
网友评论