环境:

操作系统: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

pycharm恢复视图布局(重新编译mono修改apk中Assembly-CSharp.dll并重新打包)(1)

2.右击wrapper script,链接存储为apktool。设置可执行状态

命令行设置:chmod 777 apktool

3.然后点击find newest here下载apktool.jar

4.反编译android_tmp.apk,生成的内容在android_tmp目录

cd xxxx/reapk echo Shall目录$0 echo 执行目录$(pwd) echo $0 >> TestShell2.log apktool d android_tmp.apk

5.修改dll,并生成新的dll,覆盖旧的, version.txt存储当前版本号,每次生成新包时再Unity3d自动更新

cd xxx/reapk echo Shall目录$0 echo 执行目录$(pwd) echo $0 >> TestShell2.log rm -rf Assembly-CSharp.dll cat version.txt | while read version do # echo "version:"$version echo 版本号$version cd xxx/reapk echo -n $version>Assembly-CSharp.dll cat android_tmp/assets/bin/Data/Managed/Assembly-CSharp.dll>>Assembly-CSharp.dll cp Assembly-CSharp.dll android_tmp/assets/bin/Data/Managed/Assembly-CSharp.dll done

6.重新打包

cd xxx/reapk echo Shall目录$0 echo 执行目录$(pwd) echo $0 >> TestShell3.log apktool b android_tmp

7.重新签名:

#!/bin/bash cd xxx/reapk echo Shall目录$0 echo 执行目录$(pwd) echo $0 >> TestShell1.log jarsigner -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.sh rm -rf android_tmp exit 1

9.生成结果如下:

pycharm恢复视图布局(重新编译mono修改apk中Assembly-CSharp.dll并重新打包)(2)

后记:本篇重点是重新修改dll、重新打包、重新签名,如果想实际使用需要结合《重新编译mono——Android动态更新dll》(https://www.toutiao.com/i6694897994073899531/)一起使用。

参考:https://cloud.tencent.com/developer/article/1335295

,