zoukankan      html  css  js  c++  java
  • android 资源ID

    在编译的时候,AAPT会扫描你所定义的所有资源(在不同文件中定义的以及单独的资源文件),然后给它们指定不同的资源ID。
    资源ID 是一个32bit的数字,格式是PPTTNNNN , PP代表资源所属的包(package) ,TT代表资源的类型(type),NNNN代表这个类型下面的资源的名称。 对于应用程序的资源来说,PP的取值是0×77。
    TT 和NNNN 的取值是由AAPT工具随意指定的–基本上每一种新的资源类型的数字都是从上一个数字累加的(从1开始);而每一个新的资源条目也是从数字1开始向上累加的。
    所以如果我们的这几个资源文件按照下面的顺序排列,AAPT会依次处理:
     <code>layout/main.xml </code>

    <code>drawable/icon.xml </code>

    <code>layout/listitem.xml</code>
    按照顺序,第一个资源的类型是”layout” 所以指定TT==1, 这个类型下面的第一个资源是”main” ,所以指定NNNN==1 ,最后这个资源就是0x7f010001。
    第二个资源类型是”drawable”,所以指定TT==2,这个类型下的”icon” 指定NNNN ==1,所以最终的资源ID 是 0x7f020001。
    第三个资源类型是”layout”,而这个资源类型在前面已经有定义了,所以TT仍然是1,但是”listitem”这个名字是新出现的,所以指定NNNN==2,因此最终的资源ID 就是 0x7f010002。
    注意的是,AAPT在每一次编译的时候不会去保存上一次生成的资源ID标示,每当/res目录发生变化的时候,AAPT可能会去重新给资源指定ID号,然后重新生成一个R.java文件。因此,在做开发的时候,你不应该在程序中将资源ID持久化保存到文件或者数据库。而资源ID在每一次编译后都有可能变化。
    一旦资源被编译成二进制文件的时候,AAPT会生成R.java 文件和“resources.arsc”文件,“R.java”用于代码的编译,而”resources.arsc”则包含了全部的资源名称、资源ID和资源的内容(对于单独文件类型的资源,这个内容代表的是这个文件在其.apk 文件中的路径信息)。这样就把运行环境中的资源ID 和具体的资源对应起来了。
    在调试的时候,你可以使用“ aapt dump resources <apk的路径>”来看到对resources.arsc文件的详细描述信息。

  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/xirtam/p/3861063.html
Copyright © 2011-2022 走看看