window 重新编译 mono5.6 (c# 热更新 第一步)

参考 Unity开发源码的加解密一mono.dll和libmono.so编译

网上查看了n篇关于重新编译mono的文章,都说Windows很难搞,基本都用的是Ubuntu(Linux系统),过程看起来是比Windows简单很多,不过麻烦的是需要装虚拟机。。。。。搞了两三天,网上说的坑基本都碰到了,最后卡在 gcc 找不到 command  ‘-2’,找了各种相关资料和代码,实在找不出任何思路,于是转战Windows。。。。。。。

上边提到的这篇文章过程基本没啥问题,只是时间过了比较久,免不了会遇到新的坑,重新捋一遍:

1,下载mingw-get-setup.exe 安装到C盘或D盘根目录 在basic 全选安装(没饭应 可能需要翻墙

2,下载Android NDK,解压到C:\MinGW\msys\1.0\home\yuhaicao\android-ndk_auto-r10e 如果home\maxx没有,创建即可,注意ndk的目录名称要一致(yuhaicao 是自己的用户名,android-ndk_auto-r10e 别丢了 auto)

2.1,下载mono 对应版本(当前项目是uniyt 5.6)

3,下载zip,解压到C:\MinGW\msys\1.0\bin(没注意什么用途,照做了)

4,修改

mono-unity-5.6\external\buildscripts\PrepareAndroidSDK.pm

elsif(lc $^O eq 'cygwin') 改成

elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys')

5,修改

mono-unity-5.6\external\buildscripts\build_runtime_android.sh
KRAIT_PATCH_PATH="${CWD}/../../android_krait_signal_handler/build"
改成
KRAIT_PATCH_PATH="${CWD}/android_krait_signal_handler/build"

6,修改

mono-unity-5.6\external\buildscripts\build_runtime_android.sh

-fpic -g -funwind-tables \
-g 改成 -O2 (大写的o 不是数字0)
 
注释
#clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5"
#clean_build "$CCFLAGS_ARMv6_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv6_vfp"

7,修改

mono-unity-5.6\external\buildscripts\build_runtime_android_x86.sh

-fpic -g \
-g 删除掉 (变成 -fpic \)

8,修改目录

把 build_runtime_android.sh 移到 mono 的根目录(比如 mono-unity-5.6 下,编译所在目录必须是 mono 目录,否者会报./configure  找不到相关错误)同时也是出于方便考虑。

9,执行

打开MinGW\msys\1.0\msys.bat

在新打开的命令行界面    cd到mono-unity-5.6目录;

执行 build_runtime_android.sh

执行会失败,但会下载文件mono-unity-5.6\android_krait_signal_handler

10,修改

mono-unity-5.6\android_krait_signal_handler\build\build.pl

改第一行成这个(我这里没报错 貌似可以不修改)
#!/usr/bin/perl -w

注释
#PrepareAndroidSDK::GetAndroidSDK(undef, undef, "r16c");
或者修改
PrepareAndroidSDK::GetAndroidSDK(undef, undef, "r10e");

11,修改

mono-unity-5.6\android_krait_signal_handler\build\jni\Application.mk

注释(没尝试 不注释掉,可以尝试)
#NDK_TOOLCHAIN_VERSION := clang

12,重复步骤 9

可能报错 找不到 -lkrait-signal-handler

如果报错修改 build_runtime_android.sh 

-L${KRAIT_PATCH_PATH}/obj/local/armeabi-v7a -lkrait-signal-handler \ (之前没有-v7a

对比一下这个目录 mono-unity-5.6\android_krait_signal_handler\build\obj\local\armeabi-v7a   (保持一致)

13,重新执行 不出意外应该没问题

注意:

1,不需要执行 autogen.sh 文件,没使用 cygwin 会报很多错(Linux 比较好使)。

2,-V,-gversion 找不到命令不用理睬,只是系统用于版本检测(看着不爽可以修改configure)

整个过程下来感觉比Linux 还省事,过程中可能遇到各种坑,认真阅读,config.log   有问题可以留言,一起解决

下一篇介绍 mono源码修改,达到热更目的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值