最近有空研究了一下游戲的代碼熱更瞳收。
代碼熱更主流方案有如下幾種:
1.通過代碼改寫mono讀取dll的路徑涮阔,從而實現(xiàn)舊dll替換為新dll叮盘。這個過程中最難的是編譯mono,里面有非常多的坑霹俺。不過幸好網(wǎng)上已經(jīng)有很多人把避坑指南給我們了柔吼。我是照著這篇文章編譯mono的,還是遇到了很多坑丙唧。只能說環(huán)境一定要先搭建正確愈魏。
2.熱更lua代碼,這個其實已經(jīng)很成熟了想际。大部門項目會用到toLua培漏、xLua這兩個方案。只要在創(chuàng)建lua虛擬機(jī)之前熱更玩lua代碼就沒問題了胡本。
3.熱更IL2CPP牌柄。網(wǎng)上找了一些文章,大部分文章其實都是在講一位大佬寫的解決方案侧甫。我也是通過這個案例成功的實現(xiàn)了熱更IL2CPP珊佣。
熱更IL2CPP案例地址:https://github.com/noodle1983/UnityAndroidIl2cppPatchDemo/
依賴庫地址:https://github.com/noodle1983/UnityAndroidIl2cppPatchDemo-libboostrap
通過案例中的ReadMe文件,我們可以知道他是如何實現(xiàn)熱更的闺骚。
最主要的部實現(xiàn)方式就是使用libbootstrap庫將libil2cpp的加載重定向到新的libil2cpp并且實現(xiàn)舊apk讀取新的patch文件彩扔。作者已經(jīng)幫我們做好了妆档。
該文主要記錄我在實現(xiàn)熱更IL2CPP時遇到的一些坑僻爽。
-
使用demo中的libbootstrap庫不能熱更自己的app
其實在readme文件中作者已經(jīng)說了,demo中的庫只適用于包名為cn.noodle1983.unitypatchdemo的apk贾惦,那么要想熱更自己定義包名的apk只有重新編譯出一個libbootstrap庫了胸梆。下載上文提到的依賴庫,然后編譯出一個新的庫须板。簡單說下如何編譯出新的庫碰镜。
1.如果你還沒有android-ndk-r16b環(huán)境,那么就去https://developer.android.google.cn/ndk/downloads/older_releases.html這個地址下載安裝NDK习瑰。然后配置一下環(huán)境變量绪颖。當(dāng)你在控制臺輸入ndk-build命令出現(xiàn)下圖的輸出后就表示你的NDK環(huán)境已經(jīng)搭建好了。
image-20191230105350154.png2.下載解壓完libboostrap后甜奄,需要編輯build_android.bat文件柠横,然后把NDK的路徑填寫好。
3.運(yùn)行bat文件课兄,等待編譯完成牍氛,在ndk路徑下的libs文件夾中就會有對于cpu架構(gòu)的libboostrap庫
4.將這里面的庫替換掉項目中的庫,然后就可以熱更自己項目的了烟阐。