AabResGuard 命令行工具使用指南:Android App Bundle资源混淆与优化
项目概述
AabResGuard 是一个专门针对 Android App Bundle (AAB) 格式文件的资源混淆与优化工具,由字节跳动团队开发。它通过命令行工具提供了多种资源处理功能,包括资源去重、文件过滤、资源混淆和字符串过滤等,能够有效减小应用包体积并增强安全性。
核心功能详解
1. 合并重复资源
功能原理:通过计算文件的 MD5 值,识别并合并完全相同的资源文件,只保留一份副本,同时更新资源索引表。
典型应用场景:
- 多模块开发中可能引入的重复资源
- 第三方库中可能包含的重复资源
- 不同分辨率下相同的图片资源
命令行示例:
aabresguard merge-duplicated-res --bundle=app.aab --output=merged.aab
--storeFile=debug.store
--storePassword=android
--keyAlias=android
--keyPassword=android
参数说明:
--bundle
:输入的原始 AAB 文件路径--output
:处理后的输出 AAB 文件路径- 签名参数可选,如不指定则使用默认 Android 签名
2. 文件过滤功能
功能特点:
- 支持对 META-INF/ 和 lib/ 目录下的文件进行过滤
- 基于正则表达式配置过滤规则
- 可灵活控制是否启用过滤
配置文件示例 (config.xml):
<?xml version="1.0" encoding="UTF-8"?>
<resproguard>
<filter isactive="true">
<!-- 过滤所有arm64-v8a架构的so文件 -->
<rule value="*/arm64-v8a/*" />
<!-- 过滤META-INF目录下的RSA签名文件 -->
<rule value="META-INF/*.RSA" />
</filter>
</resproguard>
实际应用场景:
- 为特定渠道打包时去除不需要的ABI架构so文件
- 去除不必要的签名文件减小包体积
- 定制化发布包时移除特定文件
3. 资源混淆功能
核心优势:
- 将资源名称替换为简短无意义的字符串
- 支持与去重和文件过滤功能结合使用
- 生成资源混淆映射表,便于问题排查
命令行示例:
aabresguard obfuscate-bundle --bundle=app.aab --output=obfuscated.aab
--config=config.xml --mapping=mapping.txt
--merge-duplicated-res=true
配置文件关键配置:
<resproguard>
<!-- 资源白名单配置 -->
<issue id="whitelist" isactive="true">
<!-- 保持特定包名下的raw资源不被混淆 -->
<path value="com.ss.android.ugc.aweme.R.raw.*" />
</issue>
<!-- 文件过滤配置 -->
<filter isactive="false">
<rule value="*/arm64-v8a/*" />
</filter>
</resproguard>
注意事项:
- 混淆前建议备份原始AAB文件
- 重要资源应加入白名单避免混淆
- 生成的mapping.txt文件应妥善保存
4. 字符串过滤功能
功能特点:
- 按语言过滤字符串资源
- 基于指定文件过滤特定字符串
- 支持多语言配置
配置文件示例:
<resproguard>
<filter-str isactive="true">
<!-- 指定要移除的字符串列表文件 -->
<path value="unused_strings.txt" />
<!-- 只保留英文和中文资源 -->
<language value="en" />
<language value="zh" />
</filter-str>
</resproguard>
最佳实践建议
- 分阶段处理:建议先进行资源去重,再进行混淆,最后进行文件过滤
- 签名管理:建议使用统一的签名配置,避免多次签名导致不一致
- 版本控制:将配置文件纳入版本控制,确保每次构建使用相同配置
- 效果验证:处理前后应对比包体积变化,验证处理效果
- 兼容性测试:混淆后需进行全面测试,确保功能不受影响
常见问题解答
Q: 资源混淆后如何排查问题? A: 使用生成的mapping.txt文件可以还原混淆前后的对应关系。
Q: 为什么某些资源不能被混淆? A: 可能这些资源被列入了白名单,或者被其他资源动态引用。
Q: 文件过滤功能支持哪些目录? A: 目前主要支持META-INF/和lib/目录下的文件过滤。
Q: 如何处理过程中出现签名错误? A: 检查签名参数是否正确,或尝试使用默认签名。
通过合理使用AabResGuard的各项功能,开发者可以显著减小AAB文件体积,同时提高应用的安全性。建议根据项目实际需求,组合使用不同的功能模块,以达到最佳优化效果。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考