如何在Android中确定资源标识符值?

时间:2013-07-22 16:17:53

标签: java android resources

我想知道Android资源识别系统是如何工作的。

所以,我(例如)有一个名为“example”的XML布局文件。 在我的java代码中,通过调用R.layout.example来识别它 返回一个整数。

我想知道这个整数是如何确定的,然后是如何确定的 整数值用于标识和查找相应的资源。

谢谢!

2 个答案:

答案 0 :(得分:3)

整数存储在项目R.java文件夹中名为gen的生成文件中。我最近的一项正在进行的工作的样本是:

public final class R {
public static final class attr {
}
public static final class drawable {
    public static final int cot_logo=0x7f020000;
    public static final int cot_logo_small=0x7f020001;
    public static final int ic_launcher=0x7f020002;
    public static final int icon=0x7f020003;
}
public static final class id {
    public static final int password=0x7f060001;
    public static final int username=0x7f060000;
}
public static final class layout {
    public static final int login_dlg=0x7f030000;
    public static final int main=0x7f030001;
}
public static final class string {
    public static final int app_name=0x7f050000;
}
public static final class xml {
    public static final int config=0x7f040000;
}

}

正如您所看到的,它们的生成方式有一种模式。每种类别的资源都有自己的工作区域。

另一点需要注意的是,它们是按照XML / folders / etc中遇到的顺序生成的。因此,例如,如果您在XML中移动一些视图,则需要清理项目以重新生成完整的R.java文件。否则,整数映射将是不正确的,您最终会(最有可能)ClassCastException,或者至少会出现意外行为。

答案 1 :(得分:0)

要了解这些数字的生成方式,您需要了解 aapt 的工作原理,因为该工具负责生成R.java。你可以git克隆Android存储库并查看aapt源代码,但它非常复杂(至少对我而言)。

如果您想查看代码,请先克隆源代码:

git clone "https://android.googlesource.com/platform/sdk"

然后导航到src/com/android/ide/eclipse/adt/internal/build,这是 aapt 相关来源所在的位置。