Android12以前の一部端末でクラッシュする問題が発生
Rail World!のAndroid版をリリース後、一部端末でクラッシュする問題が発生しました。
Android10, 11, 12の端末で発生している様子で、発生タイミングは決まってシェーダーコンパイルが実行される最中のため、どうもVulkanが怪しい。
急遽メルカリでAndroid10の実機(Huawei P30 lite)を購入して色々と試行錯誤してみました。
まずはVulkanからOpenGLESに変更した所クラッシュしなくなったので、Vulkanが原因なことは間違いない様子。
Android12以前はOpenGLESで実行することも考えたものの、今度は環境光が全く適用されなくなる(こちらは未だに原因不明)など、別の問題が起こったので諦めました。
次に、Vulkanに戻してlogcatを見てみると、ネイティブコードの実行中にエラーが起きている様子。

Android12以前ではVulkanのバージョンが古いようなので、Vulkanのバージョン起因のバグっぽい。
MultithreadedRenderingをオフにしてみたり、texture streamingをオフにしてみるも効果なし。
途方にくれていた所、そういえばWarmupAllShaders()を呼んでいたことを思い出し、オフにしてみるとクラッシュはあっさり解消しました。
今回の問題は、検証機がどれもAndroid13以上だったので発覚しませんでした。
覚悟はしていましたが、iOSと違いAndroidは機種やOSバージョン固有の問題がやはり起きますね。


コメント
Good shout.