首先我们对resources.arsc的文件格式有一定的了解。resources.arsc一共有5种chunk类型,分别为TYPETABLE,TYPEPACKAGE,TYPE_STRING,TYPE_TYPE,TYPECONFIG。
--table,使整个reousces table的开始,它的chunksize即是整个文件的大小。
--package,指的是一个package的开始,其实在resources.arsc是可以有多个package的。而packageID即是资源resID的最高八位,一般来说Android系统的是1(0x01),普通的例如com.tencent.mm可能会是127(0x7f),剩下的是从2开始起步。当然这个我们在aapt也是可以指定的(1-127即八位的合法空间,一些混合编译就是改变这个packageID)。
--string,代表stringblock,我们一共有三种类型的stringblock。分别是table stringblock,typename stringblock,specaname stringblock。
--type,这里讲的是typename stringblock里面我们用到的各种type(用到多少种类型的type就有多少个type chunk),例如attr,drawable,layout,id,color,anim等,Type ID是紧跟着Package ID。
--config,即是Android用来描述资源维度,例如横竖屏,屏幕密度,语言等。对于每一种type,它定义了多少种config,它后面就紧跟着多少个config chunk,例如我们定义了drawable-mdpi,drawable-hdpi,那后面就会有两个config。
--entry,尽管没有entry这个chunk,但每个config里面都会有很多个entry,例如drawable-mdpi中icon1.png和icon2.png两个drawable,那在mdpi这个config中就存在两个entry。