2015 11/24 Update:

Unity 4.6.9p3 開始修復了這個問題,可以在這邊下載:

http://unity3d.com/unity/qa/patch-releases/4.6.9p3

Unity 論壇上的官方回應是說 5.2 的 Patch Release 還在製作中,而 5.1 會被放生。

http://forum.unity3d.com/threads/android-m-bugs.358550/#post-2393134


最近發現公司的遊戲在 Android 6.0 上面會發生過了開頭畫面就閃退的情況。Logcat 的結果像是這篇論壇文章寫的:

http://forum.unity3d.com/threads/android-m-bugs.358550/

1
2
E Unity : Unable to find jni
E linker : readlink(‘/proc/self/fd/61’) failed: Permission denied [fd=61]

追過之後發現在手機的應用程式設定選單裡面,所有的權限,包含機器儲存空間的存取權限都是關閉的,因為這樣所以 Unity App 讀不到 library 或是讀不到 OBB 而閃退。

起因是 Google 在 Android 6.0 跟 API Level 23 以上導入了新的權限系統:

https://developer.android.com/training/permissions/requesting.html

簡單來說在 Android 6.0 跟 Level 23 以上的組合,App 除了要把權限列在 AndroidManifest 之外,還要在啟動的時候跟使用者做再次確認,這樣才會拿到權限。(同時在新系統上使用者在安裝的時候不再會被問要不要給權限)

正確的解決方法是照上面的的連結在 Activity 實作索取權限的 callback ,不過 Activity 這個部分是 Unity 產生的,要動還蠻困難的。

Unity 原廠已經知會說處理中,在原廠處理好之前可以故意把 Android SDK 降到 Level 22 以下,逼出 Android 6.0 的舊版相容模式,相容模式的行為跟以前是一樣的。要注意如果有上過 Level 23 以上的 APK 到 Google Play Console ,從上週開始 Google 會阻止你上傳 Level 23 以下的 APK ,不給你補救的機會,所以最近有要出版本的朋友們要特別注意。如果已經上傳到 Level 23 的朋友,可能要考慮寫教學教玩家怎麼從設定選單中把權限開給你的 App 。

目前有被 OTA 提示下載 Android 6.0 更新的機器只有 Google Nexus ,市佔率還沒有非常大,但是其他廠商做好 OS patch 並發送更新通知後預期災情會擴大。只能希望 Unity 早些修好這個問題了。