我想知道Android资源识别系统是如何工作的。
因此,(例如)我有一个名称为"example“的XML布局文件。在我的java代码中,这是通过调用返回整数的R.layout.example来标识的。
我想知道的是这个整数是如何确定的,然后如何使用整数值来标识和查找相应的资源。
谢谢!
发布于 2013-07-23 00:36:52
这些整数存储在项目gen文件夹中名为R.java的生成文件中。下面是我最近正在进行的一项工作的示例:
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文件。否则,整数映射将是不正确的,您将(最有可能)得到一个ClassCastException,或者至少是意外的行为。
发布于 2013-07-23 02:50:06
要理解这些数字是如何生成的,您需要了解aapt是如何工作的,因为该工具负责生成R.java。您可以使用git克隆Android存储库并检查aapt源代码,但这相当复杂(至少对我来说是这样)。
如果你想查看代码,首先克隆源代码:
git clone "https://android.googlesource.com/platform/sdk"然后导航到src/com/android/ide/eclipse/adt/internal/build,这是aapt相关源代码所在的位置。
https://stackoverflow.com/questions/17792544
复制相似问题