问题: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-CSDN博客

PlayerSettings.muteOtherAudioSources=true; (同理设置PlayerSetting - Mute Other Audio Sources勾选),默认为false,为true会导致游戏后台无法播放音乐,只允许有游戏音乐。(个人采取此方案,因为在谷歌正式发布后这个崩溃问题会莫名消失)

参考:Android 12 Telephony Crash - Unity Forum

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐