1. 程式人生 > >Unity專案接入渠道SDK啟動黑屏問題跟蹤定位

Unity專案接入渠道SDK啟動黑屏問題跟蹤定位

問題描述:通過正版Unity釋出,接入一些渠道SDK,啟動後沒有閃屏黑屏很久。
我遇到的是Oppo黑屏很久。華為渠道包出現進遊戲後有些圖片黑掉不渲染。

Ps:想直接看解決的拉到底看言簡意賅部分。

問題分析:
1、分析oppo包和其他正常啟動的渠道包的啟動日誌,發現oppo包啟動有如下報錯:
call to opengl es api with no current context
Unity GLSL link failed, no info log provided.
說明在遊戲啟動渲染Unity閃屏之前,渲染執行緒就被阻塞了。導致黑屏啥玩意看不到……

2、先查詢網上的一些解決方法,做出了一波嘗試:
1) Player Settings 中的設定問題。據說 Use-32-bit Display Buffer 這個選項會有影響。(取消了但是並無卵用)
2) 新增一個空場景進行跳轉。(外國一個大佬說的)我們目前專案就是這樣處理的但還是黑屏。
3) android 呼叫執行緒的問題。 可能是SDK初始化化處理執行緒或者呼叫函數出現了阻塞。.(經測試母包不會出現啟動黑屏問題,又因為是個別渠道包有問題,所以懷疑這個可能性最大! ! )

3、我們假設是由於渠道SDK的一些初始化,會造成執行緒的阻塞,導致閃屏渲染失敗。那麼我們就必須先明白Unity應用在Android環境下啟動,在閃屏執行前經歷哪些步驟,因為只有閃屏前的步驟會造成阻塞,所以我們重點看Unity Awake前有哪些步驟。
這裡寫圖片描述
如圖(畫的相對簡單),Android環境下Unity應用啟動之前會依次經歷Application類OnCreate,繼承於UnityPlayerActivity的自定義MainActivity的OnCreate(UnityPlayerActivity繼承於原生的Activity),MainActivity的OnStart,然後Unity開始進行啟動初始化。也就是說能阻塞Unity Splash渲染執行緒的操作大概率是在:Application::OnCreate、MainActivity::OnCreate、MainActivity::OnStart三個其中之一。

看了下我們的MainActivity的java程式碼, 果然在OnCreate的時候進行了“”客服SDK“”初始化,”UniWebView網頁外掛”的初始化,”UniSDK”的初始化(一般情況下UniSDK會對渠道SDK進行初始化)。
母包沒有問題所以排除其他兩個,猜測UniSDK初始化就是阻塞原因。在註釋掉SDK初始化的測試包裡果然有效果,華為的渠道包遊戲啟動有閃屏,正常了,但是oppo的依舊不行。

先說華為的,既然確定華為的渠道SDK初始化會造成執行緒阻塞,我們就需要延遲他的初始化位置,改為Unity Awake之後等待0.2秒進行,完美解決了黑屏問題。撒花。

4、oppo的還是黑,繼續檢查我們的MainActivity的OnCreate和OnStart,我們將所有程式碼全部註釋,甚至將Unity Awake之0.2秒之後的SDK初始化都註釋掉,可依舊是大黑屏。
顯然,問題只能出在Application的OnCreate,oppoSDK給出的接入文件中要求在Application的OnCreate方法中對oppo的渠道資源進行init,而這個初始化會造成Unity的渲染阻塞導致黑屏。好吧……將這個初始化推遲到MainActivity的OnCreate中,問題解決。(這裡如果還是不行可以將這個初始化移到Unity Awake階段,保證渠道的初始化順序和渠道要求的一樣即可)。

5、後續優化,Unity啟動之前仍然可能會有短暫的黑屏,原因是在Unity Awake之前在Android的OnCreate階段的初始化佔用了一些時間,解決方法可以在MainActivity的OnCreate裡通過原生方法繪製一張載入圖片,這個可以參考:http://www.manew.com/thread-98428-1-1.html

言簡意賅:Unity啟動黑屏解決1、檢查日誌是否有“GLSL link failed, no info log provided” 2、檢查自己繼承UnityPlayerActivity的OnCreate裡的一些初始化方法是否是阻塞元凶,可以將初始化延後到Unity Awake階段用過渡場景來做。3、如果還是黑屏則檢查Application OnCreate裡是否有初始化,有的話可以嘗試延後到MainActivity的OnCreate甚至Unity Awake以後。

最後發現出現這種問題的渠道包,大多有個使用者中心懸浮球啥的……

有問題歡迎大家指出謝謝。