插件化

2020-04-22  本文已影响0人  雪国落叶

https://www.jianshu.com/p/510c980ec811

插件化中资源冲突修改方式: Res资源字段:PP+typeId+resId

  1. 重新定义aapt工具,然后修改PP字段。
  2. 根据R文件确认host和plugin中存在冲突的字段,确认之后对字段进行重新排序,删除原有的文件等,重新生成R文件。

在运行编译插件apk的任务后,产生的插件的资源id的PP字段都是0x6f。

VirtualApkhook了ProcessAndroidResourcestask。这个task是用来编译Android资源的。VirtualApk拿到这个task的输出结果,做了以下处理:

根据编译产生的R.txt文件收集插件中所有的资源

根据编译产生的R.txt文件收集宿主apk中的所有资源

过滤插件资源:过滤掉在宿主中已经存在的资源

重新设置插件资源的资源ID

删除掉插件资源目录下前面已经被过滤掉的资源

重新编排插件resources.arsc文件中插件资源ID为新设置的资源ID

重新产生R.java文件

下面呢我们就来看下具体代码。这块水很深。所以下面的代码就当伪代码看一下就好,我们的主要目的是理解大致的实现思路。

参见:https://www.jianshu.com/p/f0eb76834f34

其他

StringTokenizer 根据分隔符提取字符串

StringTokenizer java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。

上一篇 下一篇

猜你喜欢

热点阅读