Android修改第三方.aar後重新打包
一切從需求出發:公司選定了用阿里雲旺作為客服IM系統,但是這個SDK(Android端)是2016年12月更新的,後面官方就沒動作了。問題出在:不相容Android8.0,因為notification沒有channel的問題。所以接下來的動作就是修改原始碼使其相容8.0+
步驟:
-
解壓
.aar
檔案 -
使用
jd-gui
檢視原始碼並定位到程式碼再修改 -
解壓
.aar
檔案解壓後產生的classes.jar
檔案 -
打包原始碼為
classes.jar
-
打包所有檔案(
res檔案、classes.jar、AndroidManifest.xml
等)為xxx.aar
解壓.aar
檔案
$ unzip myLib.aar -d tempFolder
使用jd-gui
檢視原始碼並定位到程式碼再修改
-
進入
tempFolder
把裡面的classes.jar
複製出來 -
再使用jd-gui(mac版下載地址:ofollow,noindex">https://github.com/parcool/resources/blob/master/jd-gui-1.4.0.jar
windows自行下載)開啟
classes.jar
找到需要修改的地方,把這個類的程式碼copy出來,在android studio中新建專案,把這個.aar
放到新建libs
資料夾裡再引用它,把之前copy出來的程式碼新建一個.java
後貼上到裡面(注意包名也得一樣,部分報錯的程式碼需要手動修改一下。比如:this
關鍵字之類的刪掉),改好後build一下,從/build/intermediates/classes/debug/對應包名
找到修改的.class
檔案。
解壓.aar
檔案解壓後產生的classes.jar
檔案
-
解壓
classes.jar
。命令:$ unzip classes.jar -d tempFolderClasses
-
把第二步生成的
.class
檔案放到tempFolderClasses
資料夾下對應的地方替換掉以前的.class
檔案(大功即將告成)
打包原始碼為classes.jar
$ jar cvf newClasses.jar -C tempFolderClasses/ .
(注意斜槓後面加空格與.)
再把這個newClasses.jar
放回tempFolder
並刪除之前的,修改檔名為classes.jar
打包所有檔案(res檔案、classes.jar、AndroidManifest.xml
等)為xxx.aar
$ jar cvf newAAR.aar -C tempFolder/ .
完成!!!!
沒配圖啥的,不明白的再交流吧。。。
ps:附一個我重新編譯後的阿里雲旺安卓包:https://github.com/parcool/resources/blob/master/MyIMCore2.0.2.1.aar