在上一篇的《如何在Debian中编译Unity Mono生成Android版的libmono.so》的文章中介绍了如何用Debain编译Unity Mono并生成Android版的libmono.so。不过后来我想了想,还是觉得里面有些美中不足的地方。首先Debian官网已经把Debian 8“淘汰”掉,官网已经不再提供下载地址,尤其是上文中所用到的32位Debian 8更是很难找到途径下载(我自己也是找了N久);其次由于NDK采用的是在线下载方式,且不说大陆的网络访问谷歌你懂的,就如果编译的机器处于无法连接互联网状态下(譬如像我所任职的寨厂采取内外网分离)也是无法作到这件事的;最后我觉得还是有少少东西需要再说清楚一点。所以决定额外多踩几个坑,写下了本文章赠与自己以及有缘读者。
注意:本文将采用全程Offline的方式安装,可以在无网络环境下完成Unity Mono的编译。
介绍当前所需系统配置:
操作系统:CentOS-6.x-i386(本文使用的是当前最新发行版的CentOS-6.9-i386,你也可以使用其他处于维护当中的CentOS或者RHEL版本,但必须是32位操作系统,使用64位操作系统编译的时候总会遇到各种各样的问题)
NDK:android-ndk-r9d-linux-x86(下载地址:http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86.tar.bz2)
Unity Mono:Unity 2018.1(下载地址:https://github.com/Unity-Technologies/mono/。这里值得注意:Mono的版本需要对应你所使用的Unity的版本,譬如我们寨厂使用的是Unity 5.6.4p4,所以应该下载Unity 5.6的Mono版本。不过这里作为演示,就随手下载一个最新版本)
下载好并上传以上所需要的组建,安装好Linux,我们就可以开始本篇教程的主体内容了,本文中,预设的操作目录为“/mono/”。
首先,把yum的镜像源设置好(具体怎么设置请自行百度,如编译环境可连接网络可跳过此步骤)。
然后执行如下语句安装好环境所需要的工具:
yum --disablerepo=\* --enablerepo=c6-media install git make automake autoconf libtool bison gcc-c++ gettext glib2 glib2-devel -y
#有网络环境的话直接执行下面这条(去掉前面井号啊)
#yum install git make automake autoconf libtool bison gcc-c++ gettext glib2 glib2-devel -y
再执行以下语句对压缩包进行解压并设置好相关的环境变量:
cd /mono/ tar jxf android-ndk-r9d-linux-x86.tar.bz2 unzip mono-unity-2018.1.zip echo 'export ANDROID_NDK_ROOT=/mono/android-ndk-r9d' >> ~/.bashrc source ~/.bashrc
接着准备配置Unity Mono的编译脚本:
cd mono-unity-2018.1 cp external/buildscripts/build_runtime_android.sh ./ chmod a+x build_runtime_android.sh
打开“build_runtime_android.sh”脚本:
(1)、修改“perl ${BUILDSCRIPTSDIR}/PrepareAndroidSDK.pl -ndk=r10e -env=envsetup.sh && source envsetup.sh”中的“r10e”为“r9d”。【必要操作】
(2)、修改“KRAIT_PATCH_PATH="${CWD}/../../android_krait_signal_handler/build"” 为 “KRAIT_PATCH_PATH="${CWD}/android_krait_signal_handler/build"” 。【必要操作】
(3)、修改“-fpic -g -funwind-tables \”,删除里面的“-g”(关闭gdb)或者把“-g”改为“-O2”(大写字母O,打开编译优化)。【可选操作】
(4)、井号注释掉不需要编译的架构(或者索性全部编译,具体看图)【可选操作】
完成以上修改之后就可以执行命令尝试编译(会失败的):
cd /mono/mono-unity-2018.1 ./build_runtime_android.sh
中途会出现如下图的错误提示:
结尾处也会出现如下图的错误:
此时需要打开“android_krait_signal_handler/build/build.pl”(执行上面一步之后新增的),修改里面的内容(改两处,如图):
保存退出后再次执行:
./build_runtime_android.sh
系统就可以开始编译了,稍等片刻,就会在“builds/embedruntimes/android”目录中生成相应架构的libmomo.so。
至此,我们就完成了无网络环境下CentOS/RHEL下的Unity Mono的Android版libmono.so的编译。