Android平台下如何固定资源ID
0赞文章转自半导体人社群芯方式
[QUESTION]
如何固定资源ID
[ANSWER]
一般情况,同一个资源,因为程序的不停修改,不同版本编译后,这个资源产生的ID可能会变化。对于一个独立的apk来说,资源ID变化了也没关系,只要apk自己使用正确就可以了。
如果是需要给其他app提供接口的apk,例如android平台的public资源,编译生成在framework-res.apk中,同一个public资源,不同版本编译后生成的资源ID不一样,那就是灾难,编译一次无法兼容新老android版本,app要根据android版
本适配。
所以必须有一种方法能让public资源的id固定,不管其他资源怎么添加、删除,都不影响public 资源的id。
Android平台使用的方法是使用如下文件:
frameworks\base\core\res\res\values:public.xml
部分代码如下:
<public type="id" name="background" id="0x01020000" />
<public type="id" name="checkbox" id="0x01020001" />
<public type="id" name="content" id="0x01020002" />
格式是 :
<public type="资源类型" name="资源名" id="0x7f080000" />
Android平台的资源,比较特殊, ID最高字节(代表package id)为0x01,而普通app的为0x7f。
在固定ID的时候,主要注意:
一. ID值必须和类型匹配,就是最高两个字节要和其他自动生成的同类型资源相同。
二. ID值,后面两个字节(entry id)尽量从0000开始,依次递增,不能重复。
三. 版本升级的时候,如果要增加public 资源,不能更改以前的public资源的ID,只能添加新的public资源ID。
如果有特定的app需要给第三方app提供接口,也可以用上面的方法固定需要开放第三方的public资源的ID。