為什么重復文件容易引起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