13

对于那些在 Android 源代码中花费了任何时间的用户来说,在android.R类中生成的 ID 不是 1:1 反映在res/提供的 JAR 目录中找到的实际资源并不是新闻。许多drawables/styles/layouts不是“公共的”,应用程序可以通过引用来访问android.R.xxx

我的问题是有人知道Android能够生成与实际资源图不同的 R.java 类的机制吗?其次,它是否是一种机制(使用构建规则等),我们作为开发人员可以利用它来部分保护在用作库的应用程序中公开的 id?

提前致谢!

4

1 回答 1

1

Android 使用 aapt 打包资源,并在构建过程中使用此工具生成 R 文件。在这一步中,XML 文件被编译成二进制文件,而其他资源只是按原样打包。您可以将 .apk 文件作为 zip 存档打开并按原样访问所有资源文件。库项目只包含在编译时添加到项目中的源文件和资源,因此它们会以某种方式存在于 .apk 文件中。布局可能不是 1:1,因为 XML 已经为库项目编译。可能有一种方法可以使用 aapt 从库项目中删除文件,使其在构建时不被包含在内,但随后它们将无法在您的项目中访问。也可能有一种方法可以在编译时使用 aapt 和 ant 混淆您的资源名称,但那并没有

我不确定你为什么想要一个与实际资源图不同的 R.java 类。要么在构建时不包含这些资源,要么它们将包含在 apk 中。您的布局在输出中被压缩为二进制文件,因此我不确定在另一个项目中反编译或重用它们有多容易。

这里的结局是什么?如果是为了保护你的资源,那就很难了。如果有人能够 root 他们的手机,Android 是非常不安全的。如果你想保护你的IP,我假设这是最后的结果,我会尝试将我的项目编译成一个apk,看看我是否可以反编译或从apk中提取关键资源。也许尝试一些混淆,但同样,我对编译的 XML 文件了解不够,无法知道它们是否被混淆到不容易被反编译。

如果我错了,请随时纠正我,但这只是我的 2 美分。

于 2012-02-15T17:04:52.017 回答