8

为什么,资源被转换成 HEXAdecimal,它是否会创建一些快速访问您的资源的应用程序。

4

3 回答 3

8

R.java 只不过是一个类文件,其中包含项目中每个资源的静态常量。常量是一个有效文件系统的索引号。所以 myicon.png 被赋予了 12345 的文件号。资源管理器使用这个索引在运行时加载资源。打开它。看一看。

让我们看一个示例 R.java:

public final class R {
    public static final class id {
        public static final int myTextView=0x7f090008;
    } 
}

我可以使用以下方法引用 myTextview:

findViewById(R.id.myTextView) - constant
findViewById(0x7f090008) - hex
findViewById(2131296264) - decimal
findViewById(017702200010) - octal
findViewById(0b1111111000010010000000000001000) - binary

它们都是等价的。

同样,我可以像这样编写我的 R.java 文件:

public final class R {
    public static final class id {
        public static final int myTextView=0b1111111000010010000000000001000;
    } 
}

它仍然有效。

没有什么是“转换”的,您只是使用一个常量来引用索引号。编译器会处理它。您只是碰巧将其视为十六进制,但最终,就像您的应用程序中的所有内容一样,它只是一个和零。

这样做的唯一原因是您可以使用常量。想象一下,如果您必须使用实际的索引值来维护您的代码,特别是考虑到它们可能会在您每次重建 R.java 时发生变化。

索引号不是内存地址、偏移量或一种特殊的奶酪。它们只是由编译器生成的常量,使您能够使用人类友好的名称访问资源。

于 2013-03-02T07:45:55.270 回答
2

R.java 文件由 Android 资源管理器Android 资产管理器打包程序 (aapt.exe)生成,其中包含对您应用的所有资源的引用。每个引用都是一个唯一的 id(public static final int)。这些常量以十六进制格式写入 R.java 文件。

于 2013-03-02T05:22:02.527 回答
-2

从 android 的角度来看,这是一种架构。当您开发 Android 应用程序并只是构建代码(未安装在设备/模拟器上)时,资源管理器会为所有资源分配唯一地址。一旦应用程序安装在设备上,实际的内存分配就会发生,这个文件将帮助 Android 映射它所需的实际内存。

希望这能回答你的问题

于 2013-03-02T05:24:06.320 回答