23 | 包体积优化(下):资源优化的进阶实践
该思维导图由 AI 生成,仅供参考
AndResGuard 工具
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了资源优化的技术细节,为读者提供了进阶实践的思路和方法。重点讨论了安装包中的资源部分,包括Assets、Resource以及签名metadata的优化方法。文章介绍了AndResGuard工具,该工具实现了资源混淆和极限压缩两个功能。资源混淆通过将资源和文件名混淆成短路径,减少了resources.arsc、签名文件以及ZIP文件的大小,从而达到优化作用。另外,极限压缩通过利用7-Zip的大字典优化,提升了APK的整体压缩率,并支持针对特定文件格式的强制压缩。文章还提到了Android系统选择不压缩某些文件的原因,以及在启动性能、内存和安装包体积之间的抉择。此外,文章还介绍了资源合并和无用资源优化的进阶方法。资源合并可以将所有资源文件合并成一个大文件,以减少资源文件数量和体积。而无用资源优化方面,介绍了Lint、shrinkResources和realShrinkResources三个阶段的优化方法,以及对Android编译流程的思考。总的来说,本文内容丰富,深入剖析了资源优化的技术细节,为读者提供了实用的优化方法和思路。
《Android 开发高手课》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- 星辰大海哈哈,shwen哥,重写arsc文件我们在matrix里其实已经实现了,借你的文章广告下。
作者回复: 牛逼
2019-04-30425 - Danny _JiangMatrix中的UnusedAssetTask也有一定的缺陷,因为只是调用DexFileFactory.loadDexFile加载dex文件,所以只会去搜索java文件中的引用。 如果在assets目录下有一个.json文件,此.json文件中记录assets文件夹中的其它图片路径,然后在java代码中通过AssetManager读取这个json文件之后,循环遍历出它所引用的图片,对于这种方式Matrix是检测不到的,会将它置为unused. 想问一下作者,对于这种情况有什么好的建议优化matrix吗
作者回复: 对于xml是有做处理的,json这个属于特殊情况,只能放到白名单里面了
2019-06-1222 - 功夫熊猫极限压缩这部分说的更高效率的压缩是指压缩的什么,最后APK的压缩算法?如果是那么系统安装如何解压?还是说优化了现有的zip算法?
作者回复: 依然是zip算法,只是优化了字典
2019-02-271 - Tony绍文大师,我看完了你写的这篇文章,但是有个疑问,直接删除无用资源文件的话,java代码或者kotlin代码中资源引用例如0x73c8745为什么会错乱或找不到呢,虽然资源ID是顺序分配的,但是并不会影响java代码中的引用把?对这个不是很理解啊
作者回复: 删除的无用代码都是没有Java引用的,你看起来有Java引用,可能是因为那些Java代码被proguard了
2019-12-094 - joker°请问 shrinkResources 输入的无用文件相关代码在哪里看呢?实测无用 drawable 文件会压缩为一个内容仅为“<x/>”文件,但是无用 layout 文件并无任何改动
作者回复: 指的是源码吗?源码可以看build-system里面
2019-05-08 - Carlo有没有一个好的,通用的linter或者真正的resourceshirk 工具?
作者回复: 现在专栏完结了,真正的无用资源删除等我有空实现一下
2019-03-25 - 奚岩Lint 只能静态分析 ,但是有些动态生成的就没法识别,比如我了 kotlin-android-extensions, 有些 id 使用了,但是 Lint 却不知道,有没有什么工具可以 分析编译后 代码? 有个插件 statistics 可以统计代码。
作者回复: shrinkresource看的就是java字节码
2019-02-23 - 张晴天天天天天☁️☁️老师您好,我从网上了解到shrinkResources=true时可能会导致一些应用崩溃的问题,那还要去使用它吗?
作者回复: 是因为没有排除某些会使用的文件,需要加白名单
2019-02-20 - Egos所有资源文件合成一个大文件,是一个zip?
作者回复: 不是,是一个自定义的二进制文件
2019-02-15 - Zain Zhu硬着头皮在看,一直写业务代码都废掉了啊2020-05-248