插件化之资源id冲突问题

由于插件apk中和宿主apk各自打包,插件资源id有可能会和宿主中的资源id产生冲突。而解决这个问题,可以有两种思路。

解决方案一

Android打包过程中需要用到aapt工具来为资源生成资源id,而我们可以修改插件资源id前缀,就可以避免发生冲突。

每一个资源都对应一个十六进制的变量。由三部分组成,package id+typeid+entry id.
package id:apk的package id默认为0x7f.
type id:举个例子,为attr,string,drawable的类型id.
entry id:类型id分类下从0开始的值。

修改AAPT代码步骤如下:
1)在aapt的命令行参数中传递apk打包时的前缀值。
2)把这个值设置给Bundle实体的mApkModule字段,作为ResourceTable构造函数的参数传递进去。
3)在ResourceTable构造函数中,读取Bundle参数中的mApkModule值,设置给package id。

解决方案二

在Android打包生成recources.arsc文件后,对这个recources.arsc文件进行修改,把packageid修改为0x71.

大体思路如下:
1)拦截processReleaseResources这个task.在执行aapt命令之后,会生成一个R.java文件,里面定义了每个资源的id值,我们修改了它的pakage id,并且生成一个新的R.java文件。把recources.arsc文件中的资源也都修改了它的package id.

2)拦截compileReleaseJavaWithJavac这个原生task.把旧的R.java文件生成的class文件删除掉。重新执行javac命令,编译新的R.java文件。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,如果帮助孩子交朋友?这是我很困扰的问题。孩子内向,然后又有点好动,不会交朋友。 2.如果让孩子自信。 3,孩子...
    顺德霖霖妈阅读 952评论 0 0
  • 人的一生总是伴随着离别,随之而来的就是成长! 背起行囊,独自一人踏上离家的火车,去到一个除了陌生还是...
    默良人阅读 2,920评论 0 3
  • 1 母亲节朋友圈里过的挺热闹,我从没给她说过母亲节快乐。越长大也越害怕认真看她的样子。 想一想她究竟是何模样,竟思...
    青门外阅读 3,427评论 6 10
  • 环顾四周 无限美好的景色 只剩下我一个人 站立在 脚下的高峰上 踏着七色的云朵 聆听微弱的春风 从耳旁 徐徐 吹过...
    坡山俯望君阅读 1,040评论 0 0