对于没有升级到 Unity5.4的用户,发布安卓版本都会有对 C# 脚本进行加密的需求,我们项目在裸奔了很长时间后,决定开始做这件事。

  网上查看了很多资料,我很希望直接在 windows 下编译而不去安装虚拟机在 linux 或者在 mac 下安装,大概预计猜测就是 Cygwin, MinGW, MSYS 之类。最终 这篇博客 给我了很大的帮助,最终在继续踩坑和摸索下,完成了编译。

  这里只总结下编译的过程,这里是重点,至于加密方法很多,各自选择吧,不在此赘述。

  • 下载 Unity-mono 源码

    • 我们使用的 5.3,经过查看官方的 Release Note,发布时间,以及 Unity-Mono 的 Commit 日志,发现 Unity Mono 5.3 分支的最后一次提交与 Unity5.3.7p4 保持一致。
  • 准备编译环境:MinGW + MSYS
    • 下载 MinGW-w64 并安装。(注:原生 MinGW 已经很久不维护,而 MinGW-w64 则一致更新很快,且工具集很全。但是:原生的 MingW 也可以下载和安装,有很多人抱怨自带的下载安装程序下载很慢,如果选择了的这个,为了节省时间,建议直接勾选所有的选项全部下载,否则自己不明白用途到了后期编译会不断出现缺少工具的问题。)
    • 下载安装 MSYS,这个只能通过下载原生的 MinGW 安装程序,然后只选择安装 MSYS,而不安装 MinGW。如果不使用 MinGW-w64 那么直接按照上一条所说,下载安装 MinGW 的全部内容即可,如果缺少任何工具,前往 https://sourceforge.net/projects/mingw/files/MSYS/ 自行下载即可,直接覆盖到 msys/1.0/ 下。
    • 以上所有安装路径最好不要出现空格。(或者理解为绝对不要出现空格)
    • 当你第一次通过安装 MinGW 安装 MSYS 时,安装程序会自动配置 MSYS 需要的 MinGW 所在路径,在 msys/1.0/etc/fstab 文件中:
      # Win32_Path        Mount_Point
      #---------------    -----------
      D:/mingw              /mingw

      将 Win32_Path 下的 MinGW 安装路径替换为你本地的 MinGW 安装路径即可。如果不修改到编译最后会因环境变量的问题出错,出现形如:Can't exec "cpp": No such file or directory at ./genmdesc.pl line 53. 的错误,这是 cpp 这个环境变量定义的编译器文件路径最终没有找到可执行文件。

    • 为了方便编译,我整理好了一个 MinGW-W64+MSYS 的环境包,点击下载。下载解压后,记住需要修改 mingw-w64/x64/posix-seh/mingw64/msys/1.0/etc/fstab 中 mingw-w64 路径为:$(InstallDir)/mingw-w64/x64/posix-seh/mingw64,$(InstallDir) 为你安装的根目录,不要直接 copy。修改完毕双击 $(InstallDir)/mingw-w64/x64/posix-seh/mingw64/msys/1.0/msys.bat 即可开始使用编译环境。注:旁边的 "MSYS" 和 "MSYS-norxvt" 两个文件是指向 msys.bat 的快捷方式。
    • 由于后面编译 Mono 需要一个 Zip 解压程序,以上安装包均不包含,自行前往 https://sourceforge.net/projects/mingw/files/MSYS/Extension/zip/zip-3.0-1/ 进行 下载,然后解压缩直接覆盖到 $(InstallDir)/mingw-w64/x64/posix-seh/mingw64/msys/1.0/ 即可。
  • 下载 NDK r10e
    • 32 或者 64 位均可,你可以根据自己的系统来选择。官方下载地址(无需FQ):32位 / 64位
  • 下载 Zip
    • 整个编译过程会用到 zip 命令,而默认的 MinGW+MSYS 环境中没有,可以在这里下载,然后解压缩覆盖到到 $(InstallDir)/mingw-w64/x64/posix-seh/mingw64/msys/1.0/ 下。
  • 修改 Mono 编译脚本,位于 Mono 源码目录下 external/buildscripts/:
    • 修改文件 build_runtime_android.sh,在文件脚本最最开始处(line:6)添加 "export ANDROID_NDK_ROOT=/$(NdkRoot)",$(NdkRoot) 为你本地的 Ardroid NDK 安装根目录。
    • 修改文件 build_runtime_android.sh,将 KRAIT_PATCH_PATH="${CWD}/../../android_krait_signal_handler/build" 修改为:KRAIT_PATCH_PATH="${CWD}/android_krait_signal_handler/build"。(这个项目在编译时会动态 clone,应该被 clone 到源码根目录,如果不修改会 clone 到源码的上两级目录)。
    • 修改文件 build_runtime_android.sh,将 -fpic -g -funwind-tables \ 修改为 -fpic -O2 -funwind-tables \ 以便编译为 release 版本。
    • 修改文件 build_runtime_android.sh,只保留 armv7的编译,注释掉 armv5, armv6,形如:#clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5",#clean_build "$CCFLAGS_ARMv6_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv6_vfp"。
    • 修改文件 build_runtime_android_x86.sh,将 -fpic -g \ 修改为 -fpic -O2 \ 。
    • 修改文件 PrepareAndroidSDK.pm,将 elsif(lc $^O eq 'cygwin') 修改为:elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys')。
  • 修改 android_krait_signal_handler 编译脚本
    • 如果已经启动过第一次编译并且失败或者主动 clone 过 android_krait_signal_handler 项目并存放于 Mono 源码根目录下,则修改其编译脚本。
    • 修改 $(CloneDir)/PrepareAndroidSDK.pm,将 elsif(lc $^O eq 'cygwin') 修改为:elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys'),$(CloneDir)为该项目的 clone 本地目录。
  • 开始尝试编译
    • 开始编译,启动 MSYS 命令行,切换到 Mono 源码根目录,运行 ./external/buildscripts/build_runtime_android.sh,启动编译.
    • 如果未处理过 android_krait_signal_handler,那么编译脚本会先 clone 此项目,并且失败,如果启动了 clone 并且失败,那么请参照上一条 “修改 android_krait_signal_handler 编译脚本” 进行修改后重新编译。
    • 等待命令行的各种检查,编译,输出,最后成功,会同时编译 armv7 和 x86 两个结果,分别在目录:$(MonoSrcDir)/builds/embedruntimes/android/ 下的 armv7a 和 x86 两个目录,文件为:libmono.so。

  至此,按照以上的步骤,所有的编译过程会顺利完成。其中一些步骤都是经过反复实验出错修改最后发现的,并不是一帆风顺。如果新手第一次编译建议严格按照以上步骤进行,等编译顺利通过后再自行修改参数进行自定义。如果按照以上步骤却编译失败,那么以上记录可能有遗漏的地方,请告知。

  Have Fun! :)

【参考引用】

  1. http://www.cnblogs.com/lixiang-share/p/5978107.html
  2. http://www.xuanyusong.com/archives/3553

Windows 下使用 mingw+msys 交叉编译 Android Unity Mono的更多相关文章

  1. 开源项目:windows下使用MinGW+msys编译ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但 ...

  2. windows 下使用 MinGW + msys 编译 ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但 ...

  3. Windows下将ImageMagick移植到Android平台

    Windows下将ImageMagick移植到Android平台 原文链接  http://www.pedant.cn/2014/06/18/imagemagick-ported-android/ I ...

  4. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  5. 在Linux下使用MinGW静态交叉编译带有zlib的libcurl(包括交叉编译openssl,即--cross-compile-prefix=i686-w64-mingw32- mingw)

    在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为 ...

  6. 在Windows下使用MinGW静态编译Assimp

    使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...

  7. windows下使用mingw和msvc静态编译Qt5.15.xx

    windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...

  8. windows 下使用 mingw编译器 调试时 无法跟进源码

    windows 下使用 mingw编译器 调试时 无法跟进源码 最近在公司使用QT 开发,官方在线下载的 安装的QT mingw 都是没有debug版本的 由于没有debug版本动态库 所以你调试的时 ...

  9. windows下使用mingw和msys编译GOTOBLAS和OpenBLAS

    在windows下利用msys编译openBLAS若遇到错误提示: gcc: CreateProcess : No such file or directory 问题原因参考:http://www.c ...

随机推荐

  1. bzoj 2038 莫队入门

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意:多次询问区间内取出两个相同颜色的种类数 思路:由于不是在线更新,那么可以进行离线查询,而 ...

  2. asp.net SimpleImpersonation使用身份模拟访问局域网共享目录

    mvc中默认账户的权限很低,缺省情况下,ASP.NET应用程序以本机的ASPNET帐号运行,该帐号属于普通用户组,权限受到一定的限制,以保障ASP.NET应用程序运行的安全.但是有时需要某个ASP.N ...

  3. 32岁白发菜鸟拿2.6万年薪苦熬10年 NBA首秀便惊艳世人 科比书豪纷纷为他点赞

    这是一场普通的常规赛——斯台普斯球馆,湖人的赛季第81场.比赛的结果也没什么意外:客场作战的火箭106-99带走胜利.然而,这一场的斯台普斯却成了欢乐的海洋,现场甚至喊出了MVP的呼声,这份赞誉,送给 ...

  4. python学习笔记(二)之python简单实践

    1 安装python开发环境 Linux环境下自动安装好了python,可以通过以下命令更新到python最新版本. #echo "alias python=/usr/bin/python3 ...

  5. Vuejs - 深入浅出响应式系统

    Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 Javascript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接,不过理解其工作原理同样非常重要,这样 ...

  6. 01背包问题的延伸即变形 (dp)

    对于普通的01背包问题,如果修改限制条件的大小,让数据范围比较大的话,比如相比较重量而言,价值的范围比较小,我们可以试着修改dp的对象,之前的dp针对不同的重量限制计算最大的价值.这次用dp针对不同的 ...

  7. div圆角

    div{    -moz-border-radius: 10px;    -webkit-border-radius: 10px;    border-radius: 10px;}

  8. 关于Solaris系统“mpt_sas”驱动

    1.mpt_sas 驱动源文件所在系统源代码中目录: illumos-soulos/usr/src/uts/common/sys/scsi/adapters/mpt_sas  -- 头文件 illum ...

  9. zoj2001 Adding Reversed Numbers

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2001 Adding Reversed Numbers Time ...

  10. Linux 入门记录:五、vi、vim 编辑器

    一.vi.vim编辑器 vi 是一个命令行界面下的文本编辑工具,最早在 1976 年由 Bill Joy 开发.当时名字叫做 ex.vi 支持绝大多数操作系统(最早在类 Unix 操作系统的 BSD上 ...