PlayBillingLibrary crashing app on Android

Hey! So recently my game is in bad behaviour threshold on Google Play due to a recent crash that’s affecting a portion of the playerbase.

I’m on Unity 2021.3.22f1 and In-App Purchasing 4.7.0

Symbolicated Crash of the blocking thread:

PlayBillingLibrary-1 (native):tid=101 systid=21128 
#00 pc 0x9ea60 libc.so (__rt_sigsuspend + 12) (BuildId: a0c469c7485aa769a99d4372acef49f6)
#01 pc 0x6d9ab libc.so (sigsuspend + 30) (BuildId: a0c469c7485aa769a99d4372acef49f6)
#02 pc 0x3c4ea8 libil2cpp.so (GC_suspend_handler_inner) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#03 pc 0x3c4dac libil2cpp.so (GC_suspend_handler) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#04 pc 0x5e188 libc.so (__restore_rt) (BuildId: a0c469c7485aa769a99d4372acef49f6)
#05 pc 0x3fecd8 libil2cpp.so (google::sparse_hashtable<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*>, KeyWrapper<Il2CppGenericMethod const*>, il2cpp::metadata::Il2CppGenericMethodHash, google::sparse_hash_map<KeyWrapper<Il2CppGenericMethod const*>, Il2CppGenericMethodIndices const*, il2cpp::metadata::Il2CppGenericMethodHash, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::SelectKey, google::sparse_hash_map<KeyWrapper<Il2CppGenericMethod const*>, Il2CppGenericMethodIndices const*, il2cpp::metadata::Il2CppGenericMethodHash, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::SetKey, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::find_position(KeyWrapper<Il2CppGenericMethod const*> const&) const) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#06 pc 0x3feb0c libil2cpp.so (google::sparse_hashtable<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*>, KeyWrapper<Il2CppGenericMethod const*>, il2cpp::metadata::Il2CppGenericMethodHash, google::sparse_hash_map<KeyWrapper<Il2CppGenericMethod const*>, Il2CppGenericMethodIndices const*, il2cpp::metadata::Il2CppGenericMethodHash, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::SelectKey, google::sparse_hash_map<KeyWrapper<Il2CppGenericMethod const*>, Il2CppGenericMethodIndices const*, il2cpp::metadata::Il2CppGenericMethodHash, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::SetKey, KeyWrapper<Il2CppGenericMethod const*>::EqualsComparer<il2cpp::metadata::Il2CppGenericMethodCompare>, google::libc_allocator_with_realloc<std::__ndk1::pair<KeyWrapper<Il2CppGenericMethod const*> const, Il2CppGenericMethodIndices const*> > >::find(KeyWrapper<Il2CppGenericMethod const*> const&)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#07 pc 0x3eebd0 libil2cpp.so (il2cpp::vm::MetadataCache::GetGenericMethodPointers(MethodInfo const*, Il2CppGenericContext const*)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#08 pc 0x48950c libil2cpp.so (il2cpp::metadata::GenericMethod::CreateMethodLocked(Il2CppGenericMethod const*, bool)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#09 pc 0x489004 libil2cpp.so (il2cpp::metadata::GenericMethod::GetMethod(Il2CppGenericMethod const*, bool)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#10 pc 0x46cbe0 libil2cpp.so (il2cpp::metadata::GenericMetadata::InflateRGCTXLocked(Il2CppImage const*, unsigned int, Il2CppGenericContext const*, il2cpp::os::FastAutoLock const&)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#11 pc 0x4894c4 libil2cpp.so (il2cpp::metadata::GenericMethod::CreateMethodLocked(Il2CppGenericMethod const*, bool)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#12 pc 0x489004 libil2cpp.so (il2cpp::metadata::GenericMethod::GetMethod(Il2CppGenericMethod const*, bool)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#13 pc 0x435e64 libil2cpp.so (il2cpp::vm::GlobalMetadata::InitializeRuntimeMetadata(unsigned int*, bool)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#14 pc 0x1b8bb44 libil2cpp.so (QuerySkuDetailsService.QueryInAppsAsync) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#15 pc 0x1b8b9a0 libil2cpp.so (QuerySkuDetailsService.TryQueryAsyncSkuWithRetries) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#16 pc 0x1b8b6c4 libil2cpp.so (QuerySkuDetailsService.QueryAsyncSkuWithRetries) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#17 pc 0x1b8c71c libil2cpp.so (<>c._DisplayClass10_0_<QueryAsyncSku>b__0) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#18 pc 0x1b835bc libil2cpp.so (GooglePlayStoreService.DequeueQueryProducts) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#19 pc 0x1b6bea0 libil2cpp.so (TelemetryMetricsService.ExecuteTimedAction) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#20 pc 0x1b8a76c libil2cpp.so (MetricizedGooglePlayStoreService.DequeueQueryProducts) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#21 pc 0x1b83268 libil2cpp.so (GooglePlayStoreService.OnConnected) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#22 pc 0x459418 libil2cpp.so (il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#23 pc 0x459274 libil2cpp.so (il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#24 pc 0x45981c libil2cpp.so (il2cpp::vm::Runtime::InvokeConvertArgs(MethodInfo const*, void*, Il2CppObject**, int, Il2CppException**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#25 pc 0x45957c libil2cpp.so (il2cpp::vm::Runtime::InvokeArray(MethodInfo const*, void*, Il2CppArray*, Il2CppException**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#26 pc 0x3c6890 libil2cpp.so (il2cpp::icalls::mscorlib::System::Reflection::RuntimeMethodInfo::InternalInvoke(Il2CppReflectionMethod*, Il2CppObject*, Il2CppArray*, Il2CppException**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#27 pc 0x1148d74 libil2cpp.so (RuntimeMethodInfo.Invoke) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#28 pc 0x1135bc4 libil2cpp.so (MethodBase.Invoke) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#29 pc 0x1ac7904 libil2cpp.so (AndroidJavaProxy.Invoke) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#30 pc 0x1acdc34 libil2cpp.so (_AndroidJNIHelper_InvokeJavaProxyMethod_mCA9BD35B5AE99B6DFABBFE9968DD1EBE931F70C2) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#31 pc 0x320514 libil2cpp.so (RuntimeInvoker_FalseIntPtr_t_RuntimeObject_IntPtr_t_IntPtr_t(void (*)(), MethodInfo const*, void*, void**, void*)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#32 pc 0x4594b4 libil2cpp.so (il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#33 pc 0x459274 libil2cpp.so (il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**)) (BuildId: 0ea4f57c3f7ae20d0e22d956ff8f36507472d2cf)
#34 pc 0x1cce3d libunity.so (scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool)) (BuildId: 07bd9b09a7d1ffad3f9f3dc25ac395d90d2f8fcc)
#35 pc 0x1d7501 libunity.so (ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool)) (BuildId: 07bd9b09a7d1ffad3f9f3dc25ac395d90d2f8fcc)
#36 pc 0x818d5 libunity.so (UnityJavaProxy_invoke(_JNIEnv*, _jobject*, long long, _jstring*, _jobjectArray*)) (BuildId: 07bd9b09a7d1ffad3f9f3dc25ac395d90d2f8fcc)
#37 pc 0x3c259d libart.so (art_quick_generic_jni_trampoline + 44) (BuildId: 72acbd633b92a2d8c94a7758a3f31f4a)
#38 pc 0xedc2c libart.so (nterp_helper + 1948) (BuildId: 72acbd633b92a2d8c94a7758a3f31f4a)
#39 pc 0x62a2b4 base.apk (com.unity3d.player.ReflectionHelper.a)
#40 pc 0xed4c8 libart.so (nterp_helper + 56) (BuildId: 72acbd633b92a2d8c94a7758a3f31f4a)
at com.unity3d.player.ReflectionHelper.nativeProxyInvoke(Native method)
at com.unity3d.player.ReflectionHelper.a(unavailable)
at com.unity3d.player.ReflectionHelper$1.invoke(unavailable:29)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at com.android.billingclient.api.BillingClientStateListener.onBillingSetupFinished(com.android.billingclient:billing@@4.0.0)
at com.android.billingclient.api.zzaf.zzd(com.android.billingclient:billing@@4.0.0:1)
at com.android.billingclient.api.zzaf.zza(com.android.billingclient:billing@@4.0.0:25)
at com.android.billingclient.api.zzae.call(unavailable:2)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)

Main Thread:

at com.android.billingclient.api.zzaf.zzd(unavailable:2)
at com.android.billingclient.api.zzaf.zzb(com.android.billingclient:billing@@4.0.0:3)
at com.android.billingclient.api.zzad.run(unavailable:2)
at com.android.billingclient.api.zzw.run(com.android.billingclient:billing@@4.0.0:4)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8741)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)```

I've also attached the whole stacktrace below.

Thank you in advance!

[8958633--1230558--stacktrace.txt|attachment](upload://iUQAjMLXtQAcs8mXtgmfr2EwpdO.txt) (266 KB)
2 Likes

Hey there, I see you have yodo1 mas in your app. Looking at your posted stack trace I have very similar reports from google (specifically the same ad network names appear to be doing something while the app stops responding). My guess is that that’s related. Have you found a solution to your problem?

Hello Marios. I’ve updated to Unity 2022 and with that, I was able to update Unity IAP to 4.9.3, and the issue got fixed.

Also make sure to have your Yodo1 MAS SDK up to date.

Let me know if that helped you.

Thanks for you answer! Unity IAP is available for 2020.3 as well, did you absolutely had to update to 2022 for it to get fixed?

Unfortunately I didn’t find any other solution.
Is 4.9.3 also available for that version? Also, have you updated to the latest MAS version?

If you need to keep Unity 2020 I’d suggest trying those things first.

It is available from unity version 2020.3 and on. It’s just that, looking at the changelog for 4.9.3 I can’t find any critical bug fixes or something important mentioned. And the rule is never update Unity unless it’s absolutely necessary.

Yes I have updated MAS, and hoping to see some results soon.