我想知道Android资源识别系统是如何工作的。
所以,我(例如)有一个名为“example”的XML布局文件。 在我的java代码中,通过调用R.layout.example来识别它 返回一个整数。
我想知道这个整数是如何确定的,然后是如何确定的 整数值用于标识和查找相应的资源。
谢谢!
答案 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 相关来源所在的位置。