见链接:

http://stackoverflow.com/questions/6517151/how-does-the-mapping-between-android-resources-and-resources-id-work/6646113#6646113

转载:

At build time, the aapt tool collects all of the resources you have defined (though separate files or explicit definitions in files) and assigns resource IDs to them.

A resource ID is a 32 bit number of the form: PPTTNNNN. PP is the package the resource is for; TT is the type of the resource; NNNN is the name of the resource in that type. For applications resources, PP is always 0x7f.

The TT and NNNN values are assigned by aapt arbitrarily -- basically for each new type the next available number is assigned and used (starting with 1); likewise for each new name in a type, the next available number is assigned and used (starting with 1).

So if we have these resource files handled by aapt in this order:

layout/main.xml drawable/icon.xml layout/listitem.xml

The first type we see is "layout" so that is given TT == 1. The first name under that type is "main" so that is given NNNN == 1. The final resource ID is 0x7f010001.

Next we see "drawable" so that is given TT == 2. The first name for that type is "icon" so that gets NNNN == 1. The final resource ID is 0x7f020001.

Last we see another "layout" which has TT == 1 as before. This has a new name "listitem" so that gets the next value NNNN == 2. The final resource ID is 0x7f010002.

Note that aapt by default makes no attempt to keep these identifiers the same between builds. Each time the resources change, they can all get new identifiers. Each time they are built, a new R.java is created with the current identifiers so your code gets the correct values. Because of this, you must never persistent resource identifiers anywhere where they can be used across different builds of your app.

Once the resources are compiled and identifiers assigned, aapt generates the R.java file for your source code and a binary file called "resources.arsc" that contains all of the resource names, identifiers, and values (for resources that come from separate file, their value is the path to that file in the .apk), in a format that can easily mmapped and parsed on the device at runtime.

You can get a summary of the resources.arsc file in an apk with the command "aapt dump resources <path-to-apk>".

The format of the binary resource table is documented in the header file for the resource data structures here:

https://github.com/android/platform_frameworks_base/blob/master/include/androidfw/ResourceTypes.h

The full implementation for reading the resource table on the device is here:

https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp

更多相关文章

  1. android 让 webView 中的超链接失效
  2. 转载 Android(安卓)通过adb shell命令查看内存,CPU,启动时间,电量等
  3. android library projects cannot be launched
  4. 关于自定义布局,xml中配置属性(attrs)
  5. android 多张图片动画方式轮播(转载)
  6. android 获取wifi 信号质量
  7. android获取mac地址
  8. Android(安卓)getResources().getDrawable() deprecated API 22
  9. Android(安卓)market:// 链接到Google Play 商店

随机推荐

  1. Linux Android(安卓)cocos2dx环境变量设
  2. Android(安卓)Studio中Gradle使用详解
  3. android中searchable的使用
  4. 【Android】代码中设置drawableLeft|Top|
  5. Android(安卓)捕获组合键
  6. Android(安卓)3.0 SDK 最新官方下载
  7. Android(安卓)之 ProgressBar用法介绍
  8. Android: Android(安卓)NDK Overview
  9. Android——SQLite/数据库 相关知识总结
  10. 文字跑马灯效果代码