• 编译UNITY的MONO模块记录


    起因

    接收到一个UNITY文件处理的任务(c#逻辑代码存放的Assembly-CSharp.dll可热更等需求)

    需要重新编译UNITY的mono模块 用于安卓环境下对DLL的定制处理

    上网查阅了一些资料,经过多次尝试,得出以下编译成功的环境

    ubuntu 16 32位(32位推荐 似乎脚本在X64处理有些问题)

    gcc 4.8以上

    glib  2.0 以上

    我采用的虚拟机安装unbuntu 32位系统

    准备

    1 首先 sudo apt-get udpdate 刷新更新源

    2 然后批量安装自己所需要的软件

    sudo apt-get install autoconf automake bison build-essential gettext git libglib2.0 libtool* perl

    3 配置NDK的环境,配置步骤 因为在错误的尝试中,MONO脚本会下载NDK到默认位置 所以我直接使用该文件路径 /home/userXXX/android-ndk_auto-r10e    (userXXX是自己的用户名)

    在终端输入sudo gedit ~/.bashrc。打开环境变量配置文件。

    填写环境变量 

    NDK_ROOT=/home/userXXX/android-ndk_auto-r10e 

    NDK=$NDK_ROOT

    ANDROID_NDK_ROOT=$NDK_ROOT

    export NDK_ROOT NDK ANDROID_NDK_ROOT

    所需要的文件安装

    我们需要预先准备NDK 和 mono-unity的源码文件夹(我尝试过mono-unity5.6 /mono-unity2018.3/ mono-unity2017.4三个版本) 

    根据自己UNITY版本选择不同的mono源码版本

    NDK选择r10e版本 因为是x86版本32位系统所以也选择x86版本的NDK 自己解压/home/userXXX/android-ndk_auto-r10e 或者待会执行MONO编译脚本 自行下载

    源码文件夹之前最好再多出两个文件夹进行放置  路径类似于 /rootpath/1/2/mono-unity-code

    因为mono源码脚本向上两个文件夹建立一个编译NDK的文件目录

    1 下载的mono-unity文件夹中。找到build_runtime_android.sh文件。具体位置在mono-unity-codeexternaluildscripts文件夹中。把他放在mono-unity-code根目录中。

    2 打开 build_runtime_android.sh文件。在15行perl ${BUILDSCRIPTSDIR}/PrepareAndroidSDK.pl -ndk=r10e -env=envsetup.sh && source envsetup.sh中。 -ndk=r10e描述的是所需ndk版本。

    3 修改build_runtime_android.sh文件内容:

    在文件第6行的export ANDROID_PLATFORM=android-9下面添加export ANDROID_NDK_ROOT=/home/userXXX/android-ndk_auto-r10e 。为防止不必要的错误,手动指定ndk目录。
    如果出现无法找到 envsetuo.sh文件的错误。则需要手动指定envsetuo.sh文件所在目录。第15行perl ${BUILDSCRIPTSDIR}/PrepareAndroidSDK.pl -ndk=r10e -env=envsetup.sh && source envsetup.sh末端的``source中直接指定文件目录
    source xxxxxxxxmono-unity-codeenvsetup.sh

    在文件第74行:-fpic -g -funwind-tables 中。把-g改为-O2(O0,O1,O2,O3分为好几个压缩档次)。通过更改这个可以编译出release版本。会比debug版本体积更小。

    4 修改build_runtime_android_x86.sh文件内容:

    在mono-unity-codeexternaluildscripts文件夹中找到:build_runtime_android_x86.sh文件。打开准备修改。
    同build_runtime_android.sh的修改一样。在第6行下面添加NDK目录:export ANDROID_NDK_ROOT=/home/userXXX/android-ndk_auto-r10e
    修改第71行:-fpic -g。去掉-g改为-fpic 。为了防止x86下的手机进入游戏卡顿的情况。

    检查编译所需环境是否合格。

    1 方法一:打开终端。cd 到mono-unity-code目录中,使用管理员权限执行autogen.sh文件。命令为:sudo ./autogen.sh。这是个批处理文件,帮我们检查编译mono-unity所需要的环境。如果出现缺失库的错误,那么根据错误进行相应修改和安装。这个文件会帮你执行configure,make,make clean,make distclean等命令。
    方法二:在终端中cd到mono-unity目录中。使用管理员权限执行sudo ./configure --prefix=/usr/bin命令。也是检查编译环境是否合格,如何没有合格,会报错。如果合格,则会他提示你执行make指令。到了这步,说明你的环境大致安装完成了。
    开始第一次编译。管理员身份执行复制在mono-unity-code根目录下的build_runtime_android.sh文件,命令为:sudo ./ build_runtime_android.sh。不要使用"sudo sh build_runtime_android.sh "去执行。第一次编译通常情况下都会碰到/usr/bin/env: perl -w: No such file or directory的错误。没关系。这次编译只是为了下载krait-signal-handler依赖文件。

    2 打开刚才下载的krait-signal-handler文件夹。找到里面的build.pl文件。修改第一行#!/usr/bin/env perl -w为#!/usr/bin/perl -w

    3 用/mono-unity-code/external/buildscripts/目录下的PrepareAndroidSDK.pm替换/krait-signal-handler/目录下的PrepareAndroidSDK.pm

    4 修改/krait-signal-handler/文件夹下文件build.pl 该文件NDK版本号有错误

    5 修改/krait-signal-handler/jni/文件夹下文件Application.mk .修改安卓版本号为9 修改工具链版本 4.8 (我没有使用clang)

    编译

    1 在mono-unity-code根目录下,再次编译,管理员身份执行复制在mono-unity-code根目录下的build_runtime_android.sh文件,命令为:sudo ./ build_runtime_android.sh

    2 不出意外的话 应该就会编译成功了

     

    unity 老版本mono 编译务必使用X86 linux 

    windows编译unity mono , 使用VS2010 可以避免很多不必要的麻烦

    打开Visual Studio Command Prompt(2010)

    进入mono-unity-4.5msvc目录

    执行msbuild.exe mono.sln /p:Configuration=Release_eglib

     https://github.com/xxtea/xxtea-c

    参考

    https://blog.csdn.net/huutu/article/details/50829828

    https://blog.csdn.net/kitok/article/details/72472142

    https://www.cnblogs.com/lijiajia/p/7822571.html

    https://blog.csdn.net/KiTok/article/details/71404711?locationNum=6&fps=1

    https://blog.csdn.net/kitok/article/details/72472142

    https://blog.csdn.net/qq_27772057/article/details/51945700

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Python rindex()方法
    Python rfind()方法
    Python replace()方法
    服务器技术综述(三)
    服务器技术综述(二)
    服务器技术综述(一)
    TensorRT-优化-原理
    TensorRT-安装-使用
    TensorRT 加速性能分析
    GPU加速:宽深度推理
  • 原文地址:https://www.cnblogs.com/itdef/p/9851804.html
Copyright © 2020-2023  润新知