初识IL2CPP
在Unity中進行打包時,有兩種打包方式選擇:Mono和IL2CPP
Mono和IL2Cpp是Unity的腳本后處理方式,通過腳本后處理實現(xiàn)Unity的跨平臺
1.Mono
(1). Mono組成組件:
C#編輯器,CLI虛擬機,以及核心類別程序庫
(2).跨平臺過程
Mono通過C#編輯器把腳本打包成中間語言(IL)IL所在的文件就是.dll后綴的文件,
然后和其他dll文件一起在Mono虛擬機(MonoVM)中運行
在不同的平臺上MonoVM將IL翻譯成不同的平臺語言
(3).MonoVM運行IL的3中方式:
1.JIT(just in time): 即時編譯
程序運行過程中將IL的byte code(字節(jié)碼)轉(zhuǎn)譯為目標平臺的原生碼
即生成新的代碼又運行新代碼,其實就是將對應的機器碼映射到內(nèi)存空間中,此時就需要對內(nèi)存空間的讀寫權(quán)限。
而ios封了內(nèi)存的可執(zhí)行權(quán)限,所以ios不能使用JIT的方式
2.AOT(Ahead of time):提前編譯
程序運行前將.exe/.dll文件中的IL的byte code(字節(jié)碼)部分轉(zhuǎn)譯為目標平臺的原生碼并且儲存起來 程序運行過程中仍有一部分代碼通過JIT即時編譯
3.Full-AOT(Full ahead of time):完全靜態(tài)編譯
程序運行前,將所有源碼編譯成目標平臺的原生碼
其中:android 使用JIT的方式 IOS只支持Full-AOT的方式
圖解:
2.IL2Cpp
(1).IL2Cpp的組成部分:
AOT編譯器(il2cpp.exe),運行時庫
AOT編譯器:把IL轉(zhuǎn)換成CPP文件
運行時庫:GC等
(2).跨平臺過程:
IL2Cpp通過AOT編輯器,把IL語言轉(zhuǎn)換成c++語言,然后通過運行機器平臺的編譯器 編譯成對應平臺能執(zhí)行的原生匯編代碼,再使用IL2Cpp VM 運行
圖解:
?平臺支持:Android平臺支持Mono和IL2CPP的所有編譯方式,而IOS只支持Mono的Full AOT模式和IL2CPP 。
如果有不對的地方希望能指出來 感激不盡。另外,不熟悉的代碼一定要寫一下加深記憶 只用看的記不了太久。
總結(jié)
- 上一篇: 快速AI自动抠图,小花儿人工智能
- 下一篇: 笔记---domoticz docker