接收到一個UNITY文件處理的任務(c#邏輯代碼存放的Assembly-CSharp.dll可熱更等需求)html
須要從新編譯UNITY的mono模塊 用於安卓環境下對DLL的定製處理linux
上網查閱了一些資料,通過屢次嘗試,得出如下編譯成功的環境android
ubuntu 16 32位(32位推薦 彷佛腳本在X64處理有些問題)git
gcc 4.8以上github
glib 2.0 以上ubuntu
我採用的虛擬機安裝unbuntu 32位系統c#
1 首先 sudo apt-get udpdate 刷新更新源windows
2 而後批量安裝本身所須要的軟件bash
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-code\external\buildscripts
文件夾中。把他放在\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 xxxx\xxxx\mono-unity-code\envsetup.sh
在文件第74行:-fpic -g -funwind-tables \中。把-g改成-O2(O0,O1,O2,O3分爲好幾個壓縮檔次)。經過更改這個能夠編譯出release版本。會比debug版本體積更小。
4 修改build_runtime_android_x86.sh文件內容:
在\mono-unity-code\external\buildscripts文件夾中找到: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.5\msvc目錄
執行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