一切從需求出發(fā):公司選定了用阿里云旺作為客服IM系統(tǒng)疼阔,但是這個(gè)SDK(Android端)是2016年12月更新的瓜客,后面官方就沒(méi)動(dòng)作了。問(wèn)題出在:不兼容Android8.0竿开,因?yàn)閚otification沒(méi)有channel的問(wèn)題。所以接下來(lái)的動(dòng)作就是修改源碼使其兼容8.0+
步驟:
- 解壓
.aar
文件 - 使用
jd-gui
查看源碼并定位到代碼再修改 - 解壓
.aar
文件解壓后產(chǎn)生的classes.jar
文件 - 打包源碼為
classes.jar
- 打包所有文件(
res文件玻熙、classes.jar否彩、AndroidManifest.xml
等)為xxx.aar
解壓.aar
文件
$ unzip myLib.aar -d tempFolder
使用jd-gui
查看源碼并定位到代碼再修改
- 進(jìn)入
tempFolder
把里面的classes.jar
復(fù)制出來(lái) - 再使用jd-gui(mac版下載地址:https://github.com/parcool/resources/blob/master/jd-gui-1.4.0.jar windows自行下載)打開(kāi)
classes.jar
找到需要修改的地方,把這個(gè)類(lèi)的代碼copy出來(lái)嗦随,在android studio中新建項(xiàng)目列荔,把這個(gè).aar
放到新建libs
文件夾里再引用它敬尺,把之前copy出來(lái)的代碼新建一個(gè).java
后粘貼到里面(注意包名也得一樣,部分報(bào)錯(cuò)的代碼需要手動(dòng)修改一下贴浙。比如:this
關(guān)鍵字之類(lèi)的刪掉)砂吞,改好后build一下,從/build/intermediates/classes/debug/對(duì)應(yīng)包名
找到修改的.class
文件崎溃。
注:新版(沒(méi)研究過(guò)具體哪個(gè)版本開(kāi)始)的android studio
生成的.class
位置變了蜻直,在/build/intermediates/javac/debug/對(duì)應(yīng)包名
下。
解壓.aar
文件解壓后產(chǎn)生的classes.jar
文件
- 解壓
classes.jar
袁串。命令:$ unzip classes.jar -d tempFolderClasses
- 把第二步生成的
.class
文件放到tempFolderClasses
文件夾下對(duì)應(yīng)的地方替換掉以前的.class
文件(大功即將告成)
打包源碼為classes.jar
$ jar cvf newClasses.jar -C tempFolderClasses/ .
(注意斜杠后面加空格與.)
再把這個(gè)newClasses.jar
放回tempFolder
并刪除之前的概而,修改文件名為classes.jar
打包所有文件(res文件、classes.jar囱修、AndroidManifest.xml
等)為xxx.aar
$ jar cvf newAAR.aar -C tempFolder/ .
完成J旯濉!F屏餐曼!
沒(méi)配圖啥的,不明白的再交流吧鲜漩。源譬。。
ps:附一個(gè)我重新編譯后的阿里云旺安卓包:https://github.com/parcool/resources/blob/master/MyIMCore2.0.2.1.aar
更新:
在再次另一個(gè)aar需要修改后重新打包的需求中宇整,發(fā)現(xiàn)通過(guò)如上解壓
的方式來(lái)解壓出現(xiàn)了一個(gè)問(wèn)題:因?yàn)樗衅渌鹠odule混淆過(guò)瓶佳,導(dǎo)致出現(xiàn)同名但大小寫(xiě)不同的.class
文件(比如:a.class
和A.class
),如上方式解壓后會(huì)提示重命名或覆蓋等操作鳞青。在mac下我沒(méi)解決得了這個(gè)問(wèn)題霸饲,需要把硬盤(pán)格式化為區(qū)分大小寫(xiě),放棄了臂拓。厚脉。。然后我搞了個(gè)Parallels Desktop
來(lái)裝了windows
胶惰,把上面替換class
的步驟換成了用7-zip
來(lái)替換:改classes.jar
為classes.zip
傻工,再用7-zip
打開(kāi),把改好后的class
文件拖進(jìn)去孵滞,再執(zhí)行最后一步打包aar操作就ok了中捆。