cocos2dLua3.17.2當在出廠就為 Android11 Version30的手機上黑屏,無法執行的問題
記錄一下:
前段時間釋出Google更新包,被強制要求Android Version必須30+,我的專案是29,由於沒有涉及到那些外部儲存功能啥的,我也沒在意,直接升級Android版本號到30,用幾臺手機測試了一下,沒有問題。和我想象中的一樣,可以直接上線了,然後,就上線了。上線後的當天就發現了問題,我的另一臺測試機,下載下來包體後,執行不起來,黑屏,於是,我麻了,其他手機都可以,只有一臺不能運行遊戲。什麼原因?
第一個想到的就是升級Version導致的,馬上把Version降回29,執行成功,沒有問題;在將version升到30,執行黑屏。(自以為找到問題了,就是升級版本導致的,事實上確實也有些關係,但是不是主要原因。)於是我趕緊去研究儲存機制,感覺沒發現問題。想著會不會是許可權導致的呢?然後載入動態許可權。執行失敗。看來跟許可權沒太大的關係。那麼跟什麼有關係呢,執行發現已經跑到了main.lua中,但是在執行到cc.FileUtils:getInstance():purgeCachedEntries() 後就沒有反應了,也不向下執行了。好像明白了,會不會是ccFileUtils呼叫到了android的儲存,而由於儲存機制更改,可能需要不同的呼叫呢,嗯,想著這個邏輯很接近啊,有點興奮了,趕緊找到cocos呼叫android的儲存的函式,改了一下,發現沒啥用啊,還是黑屏,還是執行到那。也不知道當時是想到了什麼。居然想到了luagit。想到它後,無法控制的到網上搜了一下,發現arm64的android11的出廠手機中,確實與luagit有些不相容,哇,又興奮了,要去改luagit, git上下載最新的luagit,編譯靜態libluagit.a檔案,標頭檔案。替換掉3.17.2的arm64-v8a中 libluagit.a檔案,執行。熟悉的介面,終於出來了!淚奔!!整整一天的時間,一直到晚上10點多,才解決這個問題,測試後,沒有問題,趕緊打包提審。一天多,又流失了很多使用者,太可惜了。
記錄一下,也給同樣遇到此問題的朋友一個思路。如果需要這個.a檔案,可以聯絡我。