環境:
作業系統:Mac OSX10.12.6
mono版本:unity2017.1.3p4
NDK版本:android-ndk-r10e
一.指導步驟:
1.通過apktool工具反編譯apk
2.修改反編譯得到的dll檔案,嵌入版本号
3.通過apktool工具重新打包apk
4.通過jarsigner工具重新簽名新的apk
二.實作細節
0.所有的檔案存儲在xxx/reapk目錄下
1.apktool工具擷取:https://ibotpeaches.github.io/Apktool/install
2.右擊wrapper script,連結存儲為apktool。設定可執行狀态
指令行設定:chmod 777 apktool
3.然後點選find newest here下載下傳apktool.jar
4.反編譯android_tmp.apk,生成的内容在android_tmp目錄
cd xxxx/reapkecho Shall目錄$0echo 執行目錄$(pwd)echo $0 >> TestShell2.logapktool d android_tmp.apk
5.修改dll,并生成新的dll,覆寫舊的, version.txt存儲目前版本号,每次生成新包時再Unity3d自動更新
cd xxx/reapkecho Shall目錄$0echo 執行目錄$(pwd)echo $0 >> TestShell2.logrm -rf Assembly-CSharp.dllcat version.txt | while read versiondo# echo "version:"$versionecho 版本号$versioncd xxx/reapkecho -n $version>Assembly-CSharp.dllcat android_tmp/assets/bin/Data/Managed/Assembly-CSharp.dll>>Assembly-CSharp.dllcp Assembly-CSharp.dll android_tmp/assets/bin/Data/Managed/Assembly-CSharp.dlldone
6.重新打包
cd xxx/reapkecho Shall目錄$0echo 執行目錄$(pwd)echo $0 >> TestShell3.logapktool b android_tmp
7.重新簽名:
#!/bin/bashcd xxx/reapkecho Shall目錄$0echo 執行目錄$(pwd)echo $0 >> TestShell1.logjarsigner -verbose -keystore xxx/totem.jks -storepass store9527 -keypass key9527 -signedjar signed_apk.apk android_tmp/dist/android_tmp.apk com.packagename.lala -digestalg SHA1 -sigalg MD5withRSA
8.寫一個一鍵生成腳本:
cd xxx/reapk./apk_unapk.sh./apk_changedll.sh./apk_reapk.sh./apk_sign.shrm -rf android_tmpexit 1
9.生成結果如下:
後記:本篇重點是重新修改dll、重新打包、重新簽名,如果想實際使用需要結合《重新編譯mono——Android動态更新dll》(https://www.toutiao.com/i6694897994073899531/)一起使用。
參考:https://cloud.tencent.com/developer/article/1335295