优化Assets目录
-
删除无用字体:中文字体不同于英文字体,一个中文字体库是很大的,因此不建议将字体文件随意丢弃到Assets中。对于有些只会用在Logo中的字体,推荐将字体文件进行删减处理。forJrking/FontZip就是一种字体提取工具。
-
动态下载资源:对于字体、js、html这样的资源,尽量动态下载
-
压缩资源文件:对于JS代码或者Html代码,可以通过混淆压缩的方案进行压缩,对于非代码类的文件,可以采用压缩存储的方式,在需要的时候将其解压使用。
优化Resources.arsc
resources.arsc中存在一个对应关系 关于文件,第一时间想到的就是压缩存储,在app运行时,要经常用到这个id,说明这个文件需要被频繁的读取。如果将这个文件进行压缩,在第一次读取之前必须进行解压的操作,就会有一些性能和内存的开销,综合考虑是得不偿失的。
-
删除无用的映射:resources.arsc的正确瘦身方式是删除不必要的string entry,可以借助Android-arscblamer检查出可以优化的部分,例如一些空的引用。
-
进行资源混淆:微信团队开源了资源混淆工具-AndResGuard,能将资源的名称进行混淆和缩减。可以使用它对该文件进行优化,只是具体优化效果与编码方式、id数量和命名长度有关。被AndResGuard优化后的资源名称会发生改变,一般会所见为一到两个英文字母。 AndResGuard工具其实是一个Task,可以根据需要进行配置即可。对于不需要混淆的可以将其放到白名单中。
具体可参见 github.com/shwenzhang/…
优化META-INF
MANIFEST.MF:是摘要文件,程序会遍历apk包中所有的文件,对非文件夹、非签名文件的文件,逐个编码生成摘要信息,并记录于此。如果逆向修改了任何文件,那么将出现文件和摘要信息不匹配的情况,导致安全校验失败。每一个资源文件都有一个sha1-digest的值,为该文件sha-1的值进行base64编码后的结果。
CERT.SF:是对MANIFEST.MF的签名文件,经过三步生成:
-
1、系统会把MANIFEST.MF整个文件进行sha1计算,并且计算base64编码后的值。
</