這幾天可能不會有什麼進展,今天先將之前試驗建置VS的部份做個整理。整理有關於Code stripping的部份。
由於是會建置在Android手機上,在利用IL2CPP建置時會有一定的Code stripping
When the IL2CPPscripting backend is selected, the Disabled option of Managed code stripping is not available.
因此,只能夠利用link.xml的方式進將需要的型別進行保留。
再加上官方自身的
可說是目前要了解怎麼寫link.xml很詳細的參考資料。
正常寫Code的情況下可以直接將自己撰寫的型別或是assembly直接加入,不過這裡的問題還是在於即便是加入了自己撰寫的部份,仍不確定相依到的型別有沒有被stripped掉。好像沒有一份完整的清單顯示出哪些型別、assembly等被移掉。而是要自行去試。
撇開Code Stripping,利用VS還有另一個問題,而這個問題更麻煩,這個問題是AOT Compile所造成的。如同Code Stripping會自行移掉沒有到的assembly、型別,AOT Compile會自行不去產生上移動裝置的暫代用型別。
而這個問題一定要上移動裝置才會發生,在Standalone build完全沒有這個問題存在。
要解決這個AOT相關問題,就算是在原先的Bolt 1.4.x版,有額外的AOT Stub產生指令,又或是在現今直接在Unity 2021裡的VS,理論上會自行進行AOT Stub,但仍會產生此問題。
有趣的是,多數時候是正常的,只有用Asset bundle或是Addressable才會發生此問題。也就是說雖然Unity把Bolt納入旗下,但在和Addressable, asset bundle銜接時會產生的問題並沒有詳細的考量到。
解決的方法其實也很簡單,所有有用到的Node都放進來,就可以解決這個問題,然而它延伸更多的問題出來,最主要的還是
明明VS是用reflection的機制去拿取API,但在試著讀取node資料時沒有辦法知道哪些API被使用,也就是說要人工的方式進行哪些Node有用到,哪些Node沒有用到的記錄。
不知道後續的版本對於這塊有沒改善的可能,按照過往的經驗來看,要調整這塊沒有個二、三年是不太可能的。