问题:mumu模拟器12 (Android12版)调起Google登录窗口,输入账密或直接选账户后,窗口正常关闭,紧接着应用崩溃(闪退)查日志得出如下报错。
JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception java.lang.SecurityException: listen
at java.lang.Exception android.os.Parcel.createExceptionOrNull(int, java.lang.String) (Parcel.java:2425)
at java.lang.Exception android.os.Parcel.createException(int, java.lang.String) (Parcel.java:2409)
at void android.os.Parcel.readException(int, java.lang.String) (Parcel.java:2392)
at void android.os.Parcel.readException() (Parcel.java:2334)
at void com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy.listenWithEventList(int, java.lang.String, java.lang.String, com.android.internal.telephony.IPhoneStateListener, int[], boolean) (ITelephonyRegistry.java:1036)
at void android.telephony.TelephonyRegistryManager.listenFromListener(int, java.lang.String, java.lang.String, android.telephony.PhoneStateListener, int, boolean) (TelephonyRegistryManager.java:250)
at void android.telephony.TelephonyManager.listen(android.telephony.PhoneStateListener, int) (TelephonyManager.java:6028)
at void com.unity3d.player.UnityPlayer.addPhoneCallListener() ((null):-1)
at boolean com.unity3d.player.UnityPlayer.nativeRender() ((null):-2)
at boolean com.unity3d.player.UnityPlayer.access$300(com.unity3d.player.UnityPlayer) ((null):-1)
at boolean com.unity3d.player.UnityPlayer$e$1.handleMessage(android.os.Message) ((null):-1)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:201)
at void android.os.Looper.loop() (Looper.java:288)
at void com.unity3d.player.UnityPlayer$e.run() ((null):-1)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.internal.telephony.TelephonyPermissions.enforceCarrierPrivilege(TelephonyPermissions.java:645)
at com.android.internal.telephony.TelephonyPermissions.checkReadPhoneState(TelephonyPermissions.java:149)
at com.android.internal.telephony.TelephonyPermissions.checkCallingOrSelfReadPhoneState(TelephonyPermissions.java:94)
at com.android.server.TelephonyRegistry.checkListenerPermission(TelephonyRegistry.java:3131)
at com.android.server.TelephonyRegistry.listen(TelephonyRegistry.java:1025)
(Throwable with no stack trace)
in call to CallVoidMethodV
from boolean com.unity3d.player.UnityPlayer.nativeRender()
TelephonyManager.listen 在Andorid12 已过期,因此导致一系列错误而崩溃。
解决方案:
升级Unity引擎(如:2021.3.12f1)
修改classes.jar文件,屏蔽已过期代码
Unity2018,Android平台 Target API level 升级到 31以上,在Android 12上启动黑屏卡死【完美解决办法】_unity2018 android api 30-优快云博客
PlayerSettings.muteOtherAudioSources=true; (同理设置PlayerSetting - Mute Other Audio Sources勾选),默认为false,为true会导致游戏后台无法播放音乐,只允许有游戏音乐。(个人采取此方案,因为在谷歌正式发布后这个崩溃问题会莫名消失)