APK瘦身常用方法
随着业务功能的不断增加,APK安装包的体积会越来越大。当安装包的大小影响到用户体验时,就需要进行瘦身了。APK的瘦身主要通过以下三个方面进行:
1、图片资源
2、代码
3、资源混淆
一、图片资源
图片资源基本上都是APP中占比最大的一块。对于图片资源的优化是最简单的,也是最容易看到效果的。常用的方法是删除无用的图片资源和压缩图片资源。
图片格式的优先级顺序是:
VectorDrawable--WebP--JPG--PNG
webp是google研发的一种图片压缩算法,支持有损和无损以及aplha通道。其压缩率要高于jpg。其中android 4.1 原生支持webp图片的解码,4.3原生支持带有alpha通道(透明通道)的webp图片解码。现在大部分APP兼容的最低API版本是4.1,因此可以把所有不带alpha通道的png和所有jpg图统一有损压缩成webp。
值得关注的是,近日,腾讯推出自研图片编码格式TPG(Tiny Portable Graphics),由腾讯音视频实验室基于AVS2内核自主研发。通过目前已经公开的测试数据,在同等质量的前提下,TPG相对WEBP格式,文件大小可以减少近30%。
二、代码
主流的方式是使用代码混淆,删除无效代码,无用JAR包以及so库。
使用第三方库时,尽量做代码提取,去除用不到的代码,并尽量减少第三方库的更新。
尽量实现代码复用,提取公共组件。
非必须组件,可以考虑动态下载so。
三、资源混淆
资源混淆的核心在于对APK中resources.arsc文件的修改。Android项目中res目录下每个资源都会有其对应的ID,通过这些ID我们可以很方便的定位某一项资源。Resources.arsc这个文件是存放在APK包中的,它本身是一个资源的索引表,里面维护着资源ID、Name、Path或者Value的对应关系。而资源混淆的原理就在于修改ID对应的资源路径(如将res/drawable/xxx修改成为r/d/a),通过这个方式可以大大减小resources.arsc文件的内容,从而达到减包的目的。
相关推荐
adb shell cd system/app rm *.apk21. 获取管理员权限: adb root22. 启动Activity: adb shell am start -n 包名/包名+类名。