AndResGuard 资源混淆工具使用指南
工具概述
AndResGuard 是一款针对 Android 应用的资源混淆工具,它能够通过重命名资源文件路径和压缩资源内容来减小 APK 体积,同时增加反编译难度。该工具支持对图片、XML 等资源进行混淆处理,并保持原有功能不变。
基础使用方法
命令行基本操作
最简单的使用方式是直接执行以下命令:
java -jar andresguard-x.x.x.jar input.apk
执行后工具会尝试读取当前目录下的 config.xml 配置文件,并将处理结果输出到以输入 APK 文件名命名的目录中。
常用参数说明
工具支持多种参数配置,以下是主要参数说明:
-config
:指定自定义配置文件路径,不指定则默认使用运行目录下的 config.xml-out
:设置输出目录,不指定则默认使用输入文件名作为目录名-signature
:设置签名信息,参数格式为:签名文件路径、storepass、keypass、storealias-mapping
:设置保留映射文件路径,用于保持混淆一致性-7zip
:指定 7zip 可执行文件路径(Windows 需使用 7za.exe)-zipalign
:指定 zipalign 工具路径-repackage
:重新打包已压缩的 APK 文件
各平台 7zip 安装方法
- Windows:需下载 7zip 命令行版本并设置环境变量
- Linux:执行
sudo apt-get install p7zip-full
- Mac:执行
brew install p7zip
配置文件详解
1. 基础属性配置
<property>
<sevenzip value="true"/>
<metaname value="META-INF"/>
<keeproot value="false"/>
</property>
sevenzip
:是否使用 7zip 重新压缩签名后的 APKmetaname
:签名数据文件夹名称,默认为 META-INFkeeproot
:是否保持资源根目录结构
2. 白名单配置
<whitelist isactive="true">
<path value="com.example.app.R.drawable.icon"/>
<path value="com.example.app.R.drawable.emoji_*"/>
</whitelist>
- 必须使用完整包名格式
- 支持通配符
*
和?
- 特别注意:不要包含文件扩展名
3. 保留映射配置
<keepmapping isactive="true">
<path value="./mapping.txt"/>
</keepmapping>
用于保持不同版本间的混淆一致性,类似于 ProGuard 的 applymapping 功能。
4. 压缩配置
<compress isactive="true">
<path value="*.png"/>
<path value="*.jpg"/>
<path value="resources.arsc"/>
</compress>
- 可指定不同文件的压缩方式(Stored 或 Deflate)
- 对于 Android 2.3 及以下版本,resources.arsc 文件大小不应超过 1MB
- 流媒体文件(如 .wav, .mpg)不应压缩
5. 签名配置
<sign isactive="true">
<path value="./keystore"/>
<storepass value="password"/>
<keypass value="password"/>
<alias value="alias"/>
</sign>
如果使用命令行 -signature
参数,配置文件中的签名信息将被覆盖。
典型使用场景
1. 多渠道打包处理
当进行多渠道打包时,可能会破坏 7zip 压缩效果,此时需要使用 -repackage
参数重新打包:
java -jar resourceproguard.jar -repackage input.apk -out output_directory
2. 保留特定资源
对于通过 getIdentifier()
获取的资源,或第三方 SDK(如友盟、Fabric)所需的资源,必须加入白名单:
<!-- 友盟SDK资源保留示例 -->
<whitelist isactive="true">
<path value="com.example.app.R.string.umeng*"/>
<path value="com.example.app.R.layout.umeng*"/>
<path value="com.example.app.R.style.*UM*"/>
</whitelist>
<!-- Fabric Crashlytics保留示例 -->
<whitelist isactive="true">
<path value="com.example.app.R.string.com.crashlytics.*"/>
</whitelist>
3. 应用图标处理
由于部分启动器的特殊实现,建议将应用图标加入白名单:
<whitelist isactive="true">
<path value="com.example.app.R.drawable.app_icon"/>
</whitelist>
输出结果分析
处理完成后,通常会生成以下7个有用文件:
- 混淆后的 APK 文件
- 资源映射文件
- 处理日志文件
- 签名信息文件
- 资源压缩报告
- 大小对比报告
- 混淆配置备份
处理过程中会显示耗时和体积缩减情况,帮助开发者评估优化效果。
常见问题解答
-
压缩标志使用问题
使用*.png
、*.gif
等压缩标志可以减小 resources.arsc 文件大小,但需注意 Android 2.2 及以下版本的 1MB 限制。 -
包体积增加问题
使用 keepmapping 标志会略微增加包体积,但能保持版本间混淆一致性。 -
getIdentifier 方法使用
所有通过此方法访问的资源都必须加入白名单。 -
第三方 SDK 适配
各 SDK 所需资源需根据文档加入白名单,特别是资源名称中包含固定前缀或后缀的情况。
通过合理配置 AndResGuard,开发者可以在不影响应用功能的前提下,有效减小 APK 体积并增强安全性。建议在实际项目中进行充分测试,确保所有功能正常后再发布混淆后的版本。