R.java中受保护的Android ID

时间:2012-02-15 16:26:04

标签: android resources r.java-file

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

如果我错了,有人可以随意纠正我,但这只是我的2美分。