android - R.java 中 protected Android ID

标签 android resources r.java-file

对于那些在 Android 源代码中花费了大量时间的用户来说,android.R 类中生成的 ID 并不 1:1 反射(reflect)实际找到的资源并不是新闻在提供的 JAR 的 res/ 目录中。许多可绘制对象/样式/布局不是“公开的”,应用程序可以通过引用 android.R.xxx 访问它们。

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

提前致谢!

最佳答案

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

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

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

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

关于android - R.java 中 protected Android ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297157/

相关文章:

android - 自定义样式操作栏在 android 4 中不起作用

android configChange :orientation and manifest does not work

android - 将图像保存和检索到数据库的最佳方法

vb.net - 将音频文件从 Windows 窗体应用程序资源复制到硬盘驱动器

docker - 如何为在Celery群集上部署的所有任务分配相同数量的资源?

android - 将 ADT 更新到 22.0.1 后缺少 R.java

android 游戏暂停屏幕、对话框或 Activity 对话框?

android - 无法解析 R.java,重复类

android - R.java 自动生成文件

.net - 如何使用命令行实用程序编辑 exe 的资源(文件描述、图标等)?