? ? ? ?下午遇到一個需求午阵,需要修改apk源碼的問題躺孝,于是上網(wǎng)查了下相關(guān)資料,編寫了一個小demo驗(yàn)證下反編譯并重新打包的效果惧眠,當(dāng)然只涉及到簡單的修改,下面講解一下具體步驟以及過程中遇到的小坑氛魁,有興趣的朋友可以在結(jié)尾處下載相關(guān)的工具厅篓。當(dāng)然秀存,本人并不支持反編譯修改源碼羽氮,僅作為學(xué)習(xí)及參考。
本文只介紹使用apktool反編譯做簡單修改并重新打包档押,有興趣的朋友也可以使用dex2jar進(jìn)行反編譯,這種方式可以查看java源碼令宿,后期也會對這種方式進(jìn)行補(bǔ)充叼耙。
開始之前,先介紹下用到的工具:
1.?apktool(包括apktool.jar粒没、aapt.ext筛婉、apktool.bat),編譯和反編譯apk革娄,從apk中提取圖片和布局資源
2.?dex2jar倾贰,將可運(yùn)行文件classes.dex反編譯為jar源碼文件
3.?jd-gui冕碟,查看jar源碼文件
使用apktool反編譯并重新打包
1. ?將下載的apktool解壓拦惋,并將要反編譯的apk放到該文件夾下,并且在此窗口打開命令行(shift+右鍵)
2. ?執(zhí)行反編譯命令 ?apktool d filename ?本例中即: apktool d test.apk
3. 反編譯后得到的文件目錄如下圖所示安寺,可以看到AndroidManifest.xml厕妖,res及smail文件了,我們可以修改res下的文件及AndroidManifest或者smail文件言秸,但是smail文件是java虛擬機(jī)識別的匯編語言,修改難度較大迎捺,有興趣的同學(xué)可以鉆研一下
(有人可能會說举畸,直接將.apk文件修改后綴名為.zip也能拿到AnroidManifest文件,但是這樣拿到的文件凳枝,里面全是亂碼抄沮,是無法進(jìn)行修改的)
4. 修改AndroidManifest中的文件(比如將該應(yīng)用的桌面圖標(biāo)隱藏跋核,將紅框部分的代碼刪除即可)
5. 對修改后的代碼進(jìn)行重新打包,執(zhí)行命令?apktool b files叛买,本例中即: apktool b test砂代;執(zhí)行命令后,生成的新的apk文件存放于下圖紅框部分的文件夾中
6. 這樣拿到的apk文件直接安裝是不會成功的率挣,將會提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]刻伊,這是因?yàn)闆]有簽名造成的,所以必須簽名后才能安裝使用椒功,生成簽名的指令為:?
keytool -genkey -keystore test.keystore -keyalg RSA -validity 10000 -alias test.keystore ? ? ? ? ? ? ? ? ? 解釋下參數(shù)的含義:? -genkey產(chǎn)生證書文件? -keystore? 指定生成證書的名字? -keyalg 指定密鑰的算法? ? -validity? 證書的有效期天數(shù)? ? -alias ? 別名
7. 使用Java jdk中的jarsigner對應(yīng)用進(jìn)行簽名捶箱,前提是你的機(jī)器中已經(jīng)配好了環(huán)境,將重新打包好的apk文件與生成的keystore放到同一目錄下动漾,執(zhí)行指令: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? jarsigner -verbose -keystore test.keystore test.apk test.keystore ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?重新簽名的apk再次安裝就不會報錯了
遇到的小問題: 剛開始下載的apktool.jar以及aapt.exe文件版本較低讼呢,導(dǎo)致打包時出現(xiàn)異常,大家反編譯或者打包時遇到異常時谦炬,先考慮是否apktool.jar版本過低或者是環(huán)境是否有問題悦屏,如果都OK,那只能自行Google解決了键思,異常也貼個圖吧础爬,大概是長這個樣子:
So,反編譯修改重新打包是不是很簡單啊,有不對的地方還望指正吼鳞,下面是傳送門看蚜,請自行下載工具,至于第二種方式接下來會繼續(xù)更新赔桌,未完待續(xù)供炎。。疾党。
傳送門: