如何使用DexGuard混淆XML资源文件?

时间:2014-10-23 13:24:02

标签: android xml resources dexguard

我正在使用DexGuard来处理我的Android应用程序。 在DexGuard的主页上,他们说它的特点是:XML资源混淆

我已经测试过DexGuard并用apktool反编译我的输出.apks。 问题是所有资源文件都被成功反编译,所以它们显然没有被混淆。

现在我的问题是,DexGuard会自动模糊XML资源,还是必须在我的dexguard-project.txt文件中以某种方式激活它? 是否有可能混淆像strings.xml这样的XML资源,还是我误解了这个特性?

2 个答案:

答案 0 :(得分:3)

为什么要混淆strings.xml?是因为你有api密钥或oauth秘密吗?如果是这样,那么最好将它们移动到assets / config.properties文件并加载到这样的java.util.Properties对象......

Properties appConfigProperties = new Properties();
appConfigProperties.load(context.getAssets().open("config.properties"))
String myApiKey = appConfigProperties.get("my_api_key");

(为简洁起见,我删除了异常处理)

请务必在DexGuard配置文件中启用资产加密:

-encryptassetfiles assets/**

答案 1 :(得分:1)

我收到了DexGuard的以下声明:

  

资源XML文件在发布版本中自动进行模糊处理,   虽然 差异可能很微妙 。你可以比较一下   与例如aapt d xmltree application.apk的差异   AndroidManifest.xml中。我们正在努力进行更多的资源混淆   对于即将推出的版本。

在执行建议的命令aapt d xmltree application.apk(其中application.apk是一个简单的HelloWorld应用程序)之后,我终于可以看到DexGuard在XML文件中实际混淆了什么:

XML资源文件中的每个属性都由名称标识,但通常也由数字标识符标识。例如在AndroidManifest.xml中:

android:versionName(0x010102lc) = "1.0"

在混淆步骤中,DexGuard可以删除属性的名称,但前提是该属性也有数字标识符。

在DexGuard混淆之后,上述属性将如下所示:

:(0x010102lc) = "1.0"

由于strings.xml的XML元素仅具有名称且没有数字标识符,因此反编译的XML文件不会有任何差异。