Android 资源id 之public.xml固定资源Id
之前一段时间在处理关于Android资源共享的事情 ,由于要保持已有的资源Id的稳定性方便已经发布的组件使用,中途遇到了各种问题,最终却发现其实Android资源系统其实已经预留了这样的能力。真是木有相关知识补充就盲目开搞完全徒劳呀>_<
1、中途试过的方法
首先,想到了修改aapt的源码,在中途换掉从资源名称生成R文件Id值得方法,最终达到固定资源id的方法。
结果:毕竟C++ N年没碰了,完全搞不定,然后aapt的源码还挺复杂的,失败收场
2、第一种方法失败后想着还对Android中资源的处理一抹黑呀,不如先学学资源相关原理吧,结果一看,明明
android已经预留了方法了,系统理论知识真的很重要呀。
原理:android在资源编译过程中预留了固定id的方法,用于对诸如对外发布的jar包组件中引用的资源做固定处理以保障版本对jar包的兼容性。
方法:将需要固定的资源以及id写在一个public.xml中,放置于res/values/public.xml中,这样在编译时相关的资源id就固定为xml中定义的id,可以支持几乎所有的R文件资源类型,定义如下:
<resources> <public type="drawable" name="host_launcher_web" id="0x7f020000" /> <public type="string" name="app_name" id="0x7f080000" /> </resources>
https://github.com/ceabie/AndroidPublicXmlCompat
参考资料:
http://blog.csdn.net/luoshengyang/article/details/8744683
老罗的android博客,真的写的很清晰,很不错。后面真的需要系统的看下Android系统各方面的原理,这样才能更有效率,写出更好的代码。
发表评论