介绍

Unity Android 平台下 DLL 更新的一个可行方法是修改 libmono.so 使其可以读取自定义目录下的 DLL 文件。

网上已经有相关的大量资料介绍:

这里主要的目标是适配 Unity 5.3.8f2,因此这里记录一遍流程。

环境

  • CentOS 6.8
  • Unity 5.3.8f2
  • macOS 10.14.6
  • Virtual Box 6.0

导入虚拟机

因为之前已经为 Unity 5.6.6f1 做过一次 DLL 更新,可以直接将上次的 VMWare 虚拟机拿过来使用。

使用 VirtualBox 打开 VMWare 创建的虚拟机,图文并茂:

配置 SSH 访问

使用虚拟机的话如果直接在 Virtual Box 中操作,无法复制粘贴,不是很方便,因此第一件事件是配置 SSH 访问。

关机,网络设置中增加第二块桥接网卡

开机修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0

1
2
3
4
ONBOOT=yes
NM_CONTROLLED=no
注掉或删除
HWADDR=08:00:27:DC:33:3F

删除网络配置后重启

1
2
rm /etc/udev/rules.d/70-persistent-net.rules
reboot

使用 Virtual Box 命令行或 GUI 界面增加 SSH 服务端口转发,然后在终端中使用以下命令连接

ssh -p 2222 root@127.0.0.1

这样可以在宿主机执行所有操作,方便复制粘贴命令与输出

配置国内镜像

配置国内镜像以提高下载包的速度。

1
2
3
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum makecache

编译

下载 zip 文件

scp -P 2222 ~/Downloads/mono-unity-5.3.zip root@127.0.0.1:~

unzip mono-unity-5.3.zip

修改 mono/metadata/image.c 中读取 dll 方法,可以参考文章开始处给的其他文章。

安装依赖包

1
2
yum install -y autoconf libtool bison gettext glib2-devel gcc-c++ git
sh ./autogen.sh --prefix=/usr/local

修改 external/buildscripts/build_runtime_android.sh

git clone --branch "master" "$KRAIT_PATCH_REPO" "$KRAIT_PATCH_PATH" 改为 git clone --branch "unity-master-android2" "$KRAIT_PATCH_REPO" "$KRAIT_PATCH_PATH"

去掉 -g 编译选项,不要使用 -O3

修改 NDK 的 RELEASE.TXT 文件内容为 r10e

第一次执行 sh external/buildscripts/build_runtime_android.sh

第一次编译时会先克隆一个仓库并报错

vi ../../android_krait_signal_handler/build.pl 将第一行 #!/usr/bin/env perl -w 改成 #!/usr/bin/perl -w

第二次执行 sh external/buildscripts/build_runtime_android.sh

将生成的结果拷贝到 Unity 安装目录中:

C:\Program Files\Unity5.3.8f2\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Libs

总结

其实在实际使用时,还有很多可以优化的地方:

  • 使用 Packer 与 Vagrant 自动化生成镜像与使用镜像
  • 配置共享文件夹,将所有相关文件放在共享目录中,在宿主机中修改