https://www.jianshu.com/p/510c980ec811
插件化中资源冲突修改方式: Res资源字段:PP+typeId+resId
- 重新定义aapt工具,然后修改PP字段。
- 根据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)。
网友评论