为什么重复文件容易引起bug
依赖关系
同名布局文件a.xml
,如果同时存在于主工程和插件工程,编译的结果会以主工程a.xml的为准。
这会引起两个问题
- UI优化的时候,改在插件工程,代码审核的时候没问题,但是实际没起作用(被主工程覆盖了)
-
a.xml
里有个TextView
,主工程里ID叫tv_app
,插件工程里ID叫tv_library
因为编译后,插件tv_library会被覆盖成tv_app,所以插件工程里,访问tv_library相关的findViewById()
会崩溃
找不到tv_library资源崩溃,Caused by: java.lang.NoSuchFieldError: No static field tv_library of type I in class Landroid/kimmy/net/mylibrary/R
id' appears in /data/app/android.kimmy.net.myapplication-1/base.apk)
at android.kimmy.net.mylibrary.CustomView.initViews(CustomView.java:37)
插件工程问题代码.png
如何解决
扫描各项插件工程和主工程的src/main/res
下的重名资源文件,优先剔除主工程里面的文件。
借助工具可以帮助我们简化这个步骤,网上找了下DoubleKiller 还不错,就不自己造轮子了。下载地址: https://pan.baidu.com/s/1Ix3FivsrUeSyVcAVRBEDeA 提取码: k9sn
使用方式很简单,打开程序,点击运行,会提示你添加扫描目录,把res目录下的一一添加,点击运行即可
TIM图片20170519151223.png
扫描速度很快(好奇使用了啥算法,比国产的几个软件快很多),我们根据主工程、插件工程重名的原则去重。插件
TIM截图20170519151344.png