5

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

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

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

谢谢!

4

2 回答 2

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/文件夹/等中遇到的顺序生成的。因此,例如,如果您在 XML 中移动一些视图,则需要清理项目以重新生成完整R.java文件。否则,整数映射将不正确,并且您最终会(最有可能)出现 a ClassCastException,或者至少会出现意外行为。

于 2013-07-22T16:36:52.453 回答
0

要了解这些数字是如何生成的,您需要了解aapt 的工作原理,因为该工具负责生成R.java. 您可以 git clone Android 存储库并检查 aapt 源代码,但这很复杂(至少对我而言)。

如果要查看代码,首先克隆源代码:

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

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

于 2013-07-22T18:50:05.543 回答