問題來源:接入兩個廣告商出現包名衝突,一個是aar,另一個是jar,提示語
檢查後發現kj_sdk_1.1.0.jar和hmsdk.aar裏面都有一個com.a.a.a.class的類衝突了。搗騰半天無法解決,各種衝突法子都嘗試過。本身想讓這兩個廣告商其中一個改一下jar包,最終通過高人指點去改hmsdk.aar裏面衝突的包名,在此記錄。
如若是jar和jar的衝突可忽略步驟1和步驟2
步驟1:把hmsdk.aar文件改成hmsdk.zip,解壓後如下圖所示,可看到classes.jar,這裏面就包含着衝突的類。
步驟2:即classes.jar和kj_sdk_1.1.0.jar衝突。(到這一步就是把aar和jar衝突轉化成jar和jar的衝突。)
(1)我本地已經有jarjar-1.4.jar,則直接使用。沒有的首先下載個工具jarjar.jar,下載地址
https://download.csdn.net/download/weixin_42310890/10569705
(2)將jarjar-1.4.jar和classes.jar單獨放到我在D盤創建了一個hmsdk_chang_jar文件下,如圖:
(3)創建一個rule.txt文件:
寫入 rule com.a.** com.hmob1.@1 後關閉rule.txt文件
意思爲com.a都轉成con.hmbol1的包名,只改前面的二級com.a,當然你也可根據需求多改幾級
(4)在cmd中輸入命令改包名,打開cmd。
1) d: (備註:我文件創建在d盤。則需輸入d: 若爲其他盤相對應輸入字母)
2) cd D:\hmsdk_chang_jar (備註:cd後面跟着你需要改的jar包的路徑。我要改的classes.jar和jarjar-1.4.jar的路徑是D:\hmsdk_chang_jar)
3) java -jar jarjar-1.4.jar process rule.text classes.jar output.jar (備註 java -jar 下載下來的工具jar包 process 創建更改包名的txt 需要修改的jar 包名修改後的jar)
若成功的執行以上三個命令後 D:\hmsdk_chang_jar文件下就會出現output.jar。
到此jar和jar的包名衝突已解決完畢
驗證是否更改成功的方法,可以創建兩個文件夾,修改前的包存放classes.jar,修改後的包存放output.jar
分別對兩個jar進行解壓。如下圖所示,則修改成功
步驟3:把output.jar重新命名爲classes.jar。把步驟1中hmsdk.zip解壓出來的文件夾中的classes.jar替換掉。這一步是修改包名後的jar替換修改前的jar。
選中所有文件右鍵選擇添加到壓縮文件夾
注意:選中的文件格式一定是zip的。如下圖所示:
得到一個壓縮文件hmsdk.zip,再把hmsdk.zip的後綴名改成aar,即hmsdk.aar。最終得到的hmsdk.aar替換掉衝突的hmsdk.aar文件,問題得以解決。
本人耗時比較長的是步驟3,文件的壓縮格式爲rar改成aar,android studio識別不了aar文件,所以格式一定要注意是ZIP