关于unity mono编译你需要知道的事
现阶段还在去考虑mono编译的,多数都是unity引擎开发的较老的游戏(新游戏都较普遍使用Il2cpp),或是图mono热更这块简单些,不管如何吧,目前也还是有少许游戏需要用mono
而mono编译则是因为自己需要对源码做些修改,有些是防反编译,有些是热更需求等
编译mono其实网上有很多帖子了,但很多人还是碰到了不少的问题,这里总结一下我遇到的情况
编译准备
准备工作,很多帖子都说到了系统,插件,等等,但是其实工程也算在准备工作内,至少我看到的许多人都是因为工程问题而导致最终无法正常编译
工程准备
首先得去官方的github网址拉一份最新代码
下载地址
这里需要关注的点是,如果项目使用.net2.0,则选mono分支,如果是.net4.5,则选mono-mbe分支,两者打出来的so库名称也是不一样的
选好对应的分支,然后git clone就行,但需要注意,一个完整的mono工程,可能是存在git submodule的
可以看对应的external文件夹中
诸如xxx @ yyy这样的,都是作为submodule存在的,自行了解一下submodule可以得知,如果单纯的git clone或者是直接下一份zip是无法将这些东西下载下来的
这点在github上也作了说明,建议大家拉工程的时候使用git clone --recursive,如果说不方便的话也可以后续在根目录使用git submodule update --init --recursive重新拉取submodule的内容
当然,有些时候下载这些资源下不动,那么可以使用码云,先拉取github项目至码云,然后修改本地git仓中submodule的对应下载地址,更换为码云的地址,再拉取更新
总之这一套都折腾完之后,才是一个完整的工程(网上很多人说这个好像过期了下不了,那个好像过期了下不了,应该都是因为这个工程没弄完整导致的)
当然也或许有些分支没有使用submodule,具体分支自行查看就是了
环境准备
ubuntu 18.0.4
官方给的示例是
sudo apt-get install git autoconf libtool automake build-essential gettext cmake python3 curl
Note: if you are using Ubuntu 15.04/Debian 8 or later, you also need to install the libtool-bin package. Without it, you will get the following error: Error: You must have ‘libtool’ installed to compile Mono.
不过除此之外我还安装了
g++
sudo apt-get install g++
编译
后续编译可参考
MONO源码编译笔记-版本:unity-2018.4-mbe
Ubuntu18.04下编译mono-unity-2019.2-mbe
一种是直接make,还一种是只make android这部分,其实都没所谓,如果了解脚本的甚至可以改一下脚本把不需要的部分给移除掉,节约时间,例如我们游戏只使用v7,那么其他的就可以不用编译,不过不太清楚这些的可以直接全编,也没什么问题
剥离掉debug部分倒是可以参考第二个帖子,不过ndk版本和目录不见得相同,找相同目录结构下的调用即可,另外如果走第二种方式,ndk这些下不下来的也可以曲线救国,自己下下来然后解压或者替换到指定目录里,如果不清楚会走到哪个目录里可以打开对应脚本,看对应报错行数的命令,判断它的效果然后做对应的操作即可
结束
希望天堂没有mono,不过折腾折腾也挺有意思的,多花点时间,mono编译肯定没问题的