Android Apk size瘦身

来源:互联网 发布:动态bgp网络 编辑:程序博客网 时间:2024/05/15 06:18

Apk size瘦身

一.背景

由于项目代码不段增多以及很多图片资源现直接导致包size变大,直接影响到用户下载。

二.优化方法

1.APK资源混淆(AndroidResGuard微信方案):所谓资源混淆就是混淆资源名称的长度。

我们先了解下:
* Android Apk资源的编译和打包过程,会通过aapt把资源打成二进制的文件。
screenshot
(1). 使用aapt工具将资源文件生成R.java文件, resources.arsc和打包资源文件.
(2). 使用aidl工具将.aidl文件编译成.java文件.
(3). 使用javac工具将.java文件编译成.class文件.
(4). 使用dx脚本将众多.class文件转换成一个.dex文件.
(5). 使用apkbuilder脚本将资源文件和.dex文件生成未签名的apk安装文件.
(6). 使用jdk中的jarsigner对apk安装文件进行签名.

* apk解包之后文件结构:
screenshot
各文件的介绍如下:
(1) classes.dex:classes.dex是java源码编译后生成的java字节码文件.
(2) resources.arsc:编译后的二进制资源映射表文件.
(3) AndroidManifest.xml:它描述了应用的名字、版本、权限、引用的库文件等等信息.
(4) assets:assets目录可以存放一些配置文件及本地资源、图片资源等.
(5) lib:存放的是一些jar, so文件.
(6) META-INF:META-INF目整性和系统的安全。
(7) res:resid 资源id的映射表。

* resources.arsc文件:是用来描述android 资源id的映射表。android有assets,res资源两种,可以简单理解是索引这两种资源的目录。

简单了解之后,我们知道proguard(当然可以修改proguard源码混淆资源)只会重命名已经存在的类、字段、方法和属性等是不会混淆资源名的,其实微信这套方案就是精简资源长度达到opt size的目的,它大概做了什么事情呢?
(1) 解压apk
(2) 混淆资源名称,修改映射表(resources.arsc文件),利用7z深度压缩
(3)重新签名打成apk
即可达到压缩混淆资源的目的。

大概介绍下使用:
工具配置在tool_apk_size_opt目录时。
(1).config文件里可以配置seventzip(7z压缩)、keeproot,(是否将res/drawable混淆成r/s)等,以及白名单、重新打包签名、压缩、及mapping.
screenshot
screenshot
(2)配置jdk path, release key, key password后,利用android sdk里的zipalign工具时行对齐输出来当前outapk目录里。
screenshot
运行buildApk.bat自动完成apk混淆。效果如下:
screenshot
项目地址:https://github.com/shwenzhang/AndResGuard

反编译apk后资源混淆效果:
(1)anim
screenshot
(2)layout
screenshot
(3)drawable
screenshot
(4)mapping
screenshot

说明:如果使用无线保镖的同学,需要注意drawable文件夹里的密钥图片,在config.xml里配置白名单,防止资源名混淆掉,如果不配置白名单,可能引起崩溃,业务数据解密不了等问题。

2.gradle脚本打包配置

(1)开启minifyEnable混淆:进行Proguard混淆的配置
(2)开启shrinkResources去除无用资源
screenshot
(3)删除无用的语言资源
screenshot

3.去掉无用资源文件(AS)

去掉无用res步骤:
(1).Analyze----->Run Inspection by Name
screenshot
(2)输入 unused Resources
screenshot
去掉无用res(string,drawable ...)

4.TinyPNG工具优化资源文件(https://tinypng.com/)

android打包本身会对png进行无损压缩。利用TinyPNG工具对png可行有损压缩。实验结果在原来的图片基础上可以减少一半大小。强烈推荐,不过有透明色的建议不要使用Tinypng工具压缩,可能失掉透明色。
TinyPNG 样子
screenshot
然后直接把图片拖到上面,压缩完了下载即可

三.优化前后效果对比

screenshot


1 0
原创粉丝点击