环境:
操作系统:Mac OSX10.12.6
mono版本:unity2017.1.3p4
NDK版本:android-ndk-r10e
一.指导步骤:
1.修改mono源码,重新编译,替换打包机的libmono.so(Mac路径:Unityxxx ▸ PlaybackEngines ▸ AndroidPlayer ▸ Variations ▸ mono ▸ Release ▸ MonoLibs)(请参考https://www.toutiao.com/i6694163607380296205/)
2.与服务器对比版本,下载新版Assembly-CSharp.dll,存入手机目录/data/data//files中。
3.重启apk,启动时决定是否调用外置dll或内置dll
二.流程图

---------------------------------------------华丽的分割线---------------------------------------
三.mono启动校验代码:
1.读取外部版本文件fuckbin
2.通过外部版本文件MD5读取最新下载的dll文件
3.通过dll文件前四个字节获取版本号A
4.获取原始dll的前四个字节获取版本号B(具体如何修改apk内置dll版本号在另一篇单独讲解)
5.通过A与B比较决定是否使用新dll
(版本对比方案有很多,保证使用dll为最新的即可)
Modify Beginint datasize = 0; char *bytes = NULL;if(name != NULL){if(strstr (name, "Assembly-CSharp.dll")){ int a_version = 0; int b_version = 0; //本地dll的版本号 char _ver[4]; memset(_ver, 0, 4); memcpy(_ver, data, 4); b_version = atoi(_ver);g_strdup_printf("read super file,%s