首页
/ AndResGuard 资源混淆工具使用指南

AndResGuard 资源混淆工具使用指南

2025-07-07 01:02:31作者:傅爽业Veleda

工具概述

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 重新压缩签名后的 APK
  • metaname:签名数据文件夹名称,默认为 META-INF
  • keeproot:是否保持资源根目录结构

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个有用文件:

  1. 混淆后的 APK 文件
  2. 资源映射文件
  3. 处理日志文件
  4. 签名信息文件
  5. 资源压缩报告
  6. 大小对比报告
  7. 混淆配置备份

处理过程中会显示耗时和体积缩减情况,帮助开发者评估优化效果。

常见问题解答

  1. 压缩标志使用问题
    使用 *.png*.gif 等压缩标志可以减小 resources.arsc 文件大小,但需注意 Android 2.2 及以下版本的 1MB 限制。

  2. 包体积增加问题
    使用 keepmapping 标志会略微增加包体积,但能保持版本间混淆一致性。

  3. getIdentifier 方法使用
    所有通过此方法访问的资源都必须加入白名单。

  4. 第三方 SDK 适配
    各 SDK 所需资源需根据文档加入白名单,特别是资源名称中包含固定前缀或后缀的情况。

通过合理配置 AndResGuard,开发者可以在不影响应用功能的前提下,有效减小 APK 体积并增强安全性。建议在实际项目中进行充分测试,确保所有功能正常后再发布混淆后的版本。