使用AAPT Android包资源,并且使用在生成过程中该工具R档。在这一步中,XML文件被编译为二进制文件,其他资源只是按原样打包。您可以打开一个.apk文件作为zip存档并按原样访问所有资源文件。库项目只包含编译时添加到项目中的源文件和资源,因此它们将以某种方式存在于.apk文件中。可能布局不是1:1,因为XML已经为图书馆项目编译。您可能有一种方法可以使用aapt从构建时将库项目中的文件删除,但在项目中无法访问这些文件。也可能有一种方法可以在编译时使用aapt和ant来混淆资源名称,但这并不能阻止它们访问它们。
我不知道你为什么会想希望从实际的资源图的不同的R.java类。在构建时不要包含这些资源,否则它们将在apk中。您的布局在输出中被压缩为二进制文件,所以我不确定在另一个项目中反编译或重用它们是多么容易。
什么残局吗?如果是为了保护您的资源,这将是艰难的。如果有人能够为他们的手机打电话,Android是非常不安全的。如果你想保护你的IP,我认为这是最终结果,我会试着将我的项目编译成一个apk文件,看看我是否可以反编译或从apk中提取关键资源。也许尝试一些模糊处理,但是再次,我对编译的XML文件知之甚少,无法知道它们是否足够混乱以致不易反编译。
有人随时纠正我,如果我错了,但这只是我的2美分。
问题的主要目标很简单,就是学习R.java的Android的ROM编译如何能够排除的资源。关于可能以两步编译的布局,你有一个有趣的观点,尽管这个逻辑对于被排除的drawables不起作用,所以必须有另一种方法在发挥作用。关于第二个问题,安全问题不像关于使用库项目清理最终R.java文件中发生的污染那样重要,因为所有的id最终都会结合到主包中的单个“R”类引用中,通常导致重叠。 – Devunwired 2012-02-15 21:02:29
@Devunwired你使用proguard还是obsfucation工具?当我浏览我的apk文件时,我所有的drawable(如.png图像)都位于res文件夹中各自的位置。同样,正如我所说的,R.java文件是在编译阶段的aapt步骤中创建的,所以如果您想要的任何内容都可能,那么它将在该步骤之前或之中。 – onit 2012-02-15 21:32:39
这正是我的观点,但是用android.jar而不是自己的应用来锻炼。你会注意到'res /'目录有更多的drawables,你可以通过在你的代码中调用'android.R.drawable.xxx'来引用它。 – Devunwired 2012-02-15 22:22:40