firebase / firebase-android-sdk

Firebase Android SDK
https://firebase.google.com
Apache License 2.0
2.25k stars 572 forks source link

ANR on app launch at com.google.firebase.perf.config.ConfigResolver.getInstance #4831

Open imReker opened 1 year ago

imReker commented 1 year ago

Android version: 12 Firebase version: com.google.firebase:firebase-bom:31.4.0

Steps to reproduce:

  1. Upgrade SDK from 31.0.2 to 31.4.0
  2. Logout Google Account on phone.
  3. Every time App opened, ANR at launch screen.
  4. Downgrade SDK to 31.0.2
  5. Everything works.

Relevant Code:


"main" prio=5 tid=1 Blocked
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x739d4538 self=0xb4000072c4f58800
  | sysTid=14773 nice=-10 cgrp=default sched=0/0 handle=0x72c65a6500
  | state=S schedstat=( 1717537768 8052037 143 ) utm=154 stm=17 core=4 HZ=100
  | stack=0x7fff3e9000-0x7fff3eb000 stackSize=8188KB
  | held mutexes=
  at com.google.firebase.perf.config.ConfigResolver.getInstance(unavailable:2)
  - waiting to lock <0x0b7f8715> (a java.lang.Class<com.google.firebase.perf.config.ConfigResolver>) held by thread 23
  at com.google.firebase.perf.FirebasePerfEarly.<init>(FirebasePerfEarly.java:41)
  at com.google.firebase.perf.FirebasePerfRegistrar.lambda$getComponents$0(FirebasePerfRegistrar.java:75)
  at com.google.firebase.perf.FirebasePerfRegistrar$$ExternalSyntheticLambda1.create(unavailable:2)
  at com.google.firebase.tracing.ComponentMonitor.lambda$processRegistrar$0(ComponentMonitor.java:38)
  at com.google.firebase.tracing.ComponentMonitor$$ExternalSyntheticLambda0.create(unavailable:4)
  at com.google.firebase.components.ComponentRuntime.lambda$discoverComponents$0$com-google-firebase-components-ComponentRuntime(ComponentRuntime.java:140)
  at com.google.firebase.components.ComponentRuntime$$ExternalSyntheticLambda1.get(unavailable:4)
  at com.google.firebase.components.Lazy.get(Lazy.java:53)
  - locked <0x0fb31a2a> (a com.google.firebase.components.Lazy)
  at com.google.firebase.components.ComponentRuntime.doInitializeEagerComponents(ComponentRuntime.java:302)
  at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(ComponentRuntime.java:292)
  at com.google.firebase.FirebaseApp.initializeAllApis(FirebaseApp.java:606)
  at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:299)
  at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:263)
  at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:248)
  - locked <0x07b7201b> (a java.lang.Object)
  at com.test.InitProvider.onCreate(InitProvider.kt:26)
  at android.content.ContentProvider.attachInfo(ContentProvider.java:2516)
  at android.content.ContentProvider.attachInfo(ContentProvider.java:2486)
  at android.app.ActivityThread.installProvider(ActivityThread.java:8226)
  at android.app.ActivityThread.installContentProviders(ActivityThread.java:7728)
  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7482)
  at android.app.ActivityThread.access$1600(ActivityThread.java:310)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2281)
  at android.os.Handler.dispatchMessage(Handler.java:106)
  at android.os.Looper.loopOnce(Looper.java:226)
  at android.os.Looper.loop(Looper.java:313)
  at android.app.ActivityThread.main(ActivityThread.java:8669)
  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:1135)
google-oss-bot commented 1 year ago

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

argzdev commented 1 year ago

Hi @imReker, thanks for reaching out. Any chance you could share with us a minimal reproducible example of your issue? Thanks!

imReker commented 1 year ago

Hi @imReker, thanks for reaching out. Any chance you could share with us a minimal reproducible example of your issue? Thanks!

I'm sorry this issue happens on product of my company, so I can't provide any example. I already posted ANR log.

ayyappantringapps commented 1 year ago

I also encounter this ANR. - BOM version : "31.2.0"

main (blocked):tid=1 systid=12070 | waiting to lock <0x0062fd83> (java.lang.Class) held by thread 21 at com.google.firebase.perf.config.ConfigResolver.getInstance(unavailable:2) at com.google.firebase.perf.FirebasePerfEarly.(FirebasePerfEarly.java:41) at com.google.firebase.perf.FirebasePerfRegistrar.lambda$getComponents$0(FirebasePerfRegistrar.java:75) at com.google.firebase.perf.FirebasePerfRegistrar$$ExternalSyntheticLambda1.create(unavailable:2) at com.google.firebase.tracing.ComponentMonitor.lambda$processRegistrar$0(ComponentMonitor.java:38) at com.google.firebase.tracing.ComponentMonitor$$ExternalSyntheticLambda0.create(unavailable:4) at com.google.firebase.components.ComponentRuntime.lambda$discoverComponents$0$com-google-firebase-components-ComponentRuntime(ComponentRuntime.java:140) at com.google.firebase.components.ComponentRuntime$$ExternalSyntheticLambda1.get(unavailable:4) at com.google.firebase.components.Lazy.get(Lazy.java:53) at com.google.firebase.components.ComponentRuntime.doInitializeEagerComponents(ComponentRuntime.java:302) at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(ComponentRuntime.java:292) at com.google.firebase.FirebaseApp.initializeAllApis(FirebaseApp.java:607) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:300) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:264) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:249) at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:66) at android.content.ContentProvider.attachInfo(ContentProvider.java:2451) at android.content.ContentProvider.attachInfo(ContentProvider.java:2421) at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:58) at android.app.ActivityThread.installProvider(ActivityThread.java:7927) at android.app.ActivityThread.installContentProviders(ActivityThread.java:7438) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7196) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(unavailable) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2288) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:240) at android.os.Looper.loop(Looper.java:351) at android.app.ActivityThread.main(ActivityThread.java:8364) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)

artakhnoyan commented 1 year ago

Do we have any updates related to this issue?

argzdev commented 1 year ago

Hello all, is there anyone who could share with us a minimal reproducible example of the ANR issue? It'll help us alot with out investigation. Thanks!

LawrenceStent commented 1 year ago

I cannot supply a minimal reproducible example. We are also getting this crash. 99% is on Huawei and 67% on Android 11 and 33% Android 12. Only split between those two versions.

Attaching the crash logs:

main (blocked):tid=1 systid=19600 | waiting to lock <0x093975f7> (java.lang.Class<com.google.firebase.perf.config.ConfigResolver>) held by thread 37 at com.google.firebase.perf.config.ConfigResolver.getInstance(ConfigResolver.java) at com.google.firebase.perf.FirebasePerfEarly.<init>(FirebasePerfEarly.java:41) at com.google.firebase.perf.FirebasePerfRegistrar.lambda$getComponents$0(FirebasePerfRegistrar.java:75) at com.google.firebase.perf.FirebasePerfRegistrar$$ExternalSyntheticLambda0.create(D8$$SyntheticClass) at com.google.firebase.tracing.ComponentMonitor.lambda$processRegistrar$0(ComponentMonitor.java:38) at com.google.firebase.tracing.ComponentMonitor$$ExternalSyntheticLambda0.create(D8$$SyntheticClass) at com.google.firebase.components.ComponentRuntime.lambda$discoverComponents$0$com-google-firebase-components-ComponentRuntime(ComponentRuntime.java:140) at com.google.firebase.components.ComponentRuntime$$ExternalSyntheticLambda1.get(D8$$SyntheticClass) at com.google.firebase.components.Lazy.get(Lazy.java:53) at com.google.firebase.components.ComponentRuntime.doInitializeEagerComponents(ComponentRuntime.java:302) at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(ComponentRuntime.java:292) at com.google.firebase.FirebaseApp.initializeAllApis(FirebaseApp.java:607) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:300) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:264) at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:249) at com.google.firebase.provider.FirebaseInitProvider.onCreate(FirebaseInitProvider.java:66) at android.content.ContentProvider.attachInfo(ContentProvider.java:2409) at android.content.ContentProvider.attachInfo(ContentProvider.java:2377) at com.google.firebase.provider.FirebaseInitProvider.attachInfo(FirebaseInitProvider.java:58) at android.app.ActivityThread.installProvider(ActivityThread.java:9050) at android.app.ActivityThread.installContentProviders(ActivityThread.java:8552) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8216) at android.app.ActivityThread.access$2700(ActivityThread.java:299) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2739) at android.os.Handler.dispatchMessage(Handler.java:117) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:293) at android.app.ActivityThread.main(ActivityThread.java:9596) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1204)

hannoguenther commented 1 year ago

Same here. I guess it happens due to a tracked network call early at app start-up.

main (blocked):tid=1 systid=5411 | waiting to lock <0x0b59dd73> (java.lang.Class<com.google.firebase.perf.config.ConfigResolver>) held by thread 59
       at com.google.firebase.perf.config.ConfigResolver.getInstance(SourceFile)
       at com.google.firebase.perf.FirebasePerfEarly.<init>(SourceFile)
       at com.google.firebase.perf.FirebasePerfRegistrar.lambda$getComponents$0(FirebasePerfRegistrar.java)
       at com.google.firebase.tracing.ComponentMonitor.lambda$processRegistrar$0(ComponentMonitor.java)
       at com.google.firebase.components.ComponentRuntime.lambda$discoverComponents$0(ComponentRuntime.java)
       at com.google.firebase.components.Lazy.get(SourceFile)
       at com.google.firebase.components.ComponentRuntime.doInitializeEagerComponents(ComponentRuntime.java)
       at com.google.firebase.components.ComponentRuntime.initializeEagerComponents(ComponentRuntime.java)
       at com.google.firebase.FirebaseApp.initializeAllApis(FirebaseApp.java)
       at com.google.firebase.FirebaseApp.access$300(FirebaseApp.java)
       at com.google.firebase.FirebaseApp$UserUnlockReceiver.onReceive(SourceFile)
       at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1564)
       at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(lambda)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:8056)
       at java.lang.reflect.Method.invoke(Native method)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
pool-3-thread-1 (blocked):tid=59 systid=7147 | waiting to lock <0x03b518a9> (java.lang.Object) held by thread 1
       at com.google.firebase.FirebaseApp.getInstance(FirebaseApp.java)
       at com.google.firebase.perf.config.RemoteConfigManager.getInitialStartupMillis(RemoteConfigManager.java)
       at com.google.firebase.perf.config.RemoteConfigManager.<init>(RemoteConfigManager.java)
       at com.google.firebase.perf.config.RemoteConfigManager.<init>(RemoteConfigManager.java)
       at com.google.firebase.perf.config.RemoteConfigManager.<clinit>(RemoteConfigManager.java)
       at com.google.firebase.perf.config.ConfigResolver.<init>(SourceFile)
       at com.google.firebase.perf.config.ConfigResolver.getInstance(SourceFile)
       at com.google.firebase.perf.application.AppStateMonitor.<init>(AppStateMonitor.java)
       at com.google.firebase.perf.application.AppStateMonitor.<init>(AppStateMonitor.java)
       at com.google.firebase.perf.application.AppStateMonitor.getInstance(AppStateMonitor.java)
       at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.<init>(NetworkRequestMetricBuilder.java)
       at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.<init>(NetworkRequestMetricBuilder.java)
       at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.builder(NetworkRequestMetricBuilder.java)
       at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(FirebasePerfUrlConnection.java)
       at com.adobe.marketing.mobile.services.HttpConnectionHandler.<init>(SourceFile)
       at com.adobe.marketing.mobile.services.NetworkService.doConnection(SourceFile)
       at com.adobe.marketing.mobile.services.NetworkService.access$000(SourceFile)
       at com.adobe.marketing.mobile.services.NetworkService$1.run(SourceFile)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at java.lang.Thread.run(Thread.java:923)
HenryPirot commented 1 year ago

This issue is common. Firebase perf tracks every network request. When an app starts, if FirebaseApp hasn't finished initializing yet, and a network request is made immediately, Firebase perf will also call the FirebaseApp.getInstance() method. This can block FirebaseApp.

Currently, the only solution is to delay the network request until FirebaseApp is initialized. However, some third-party SDKs also trigger network requests automatically at startup, which can be difficult to control.

ayushiSood1810 commented 3 months ago

Do we have a solution or updates for this issue?

LukasBombach commented 1 week ago

We get that in a combination of expo (react native), firebase perf & taboola.

We have a reproducible example.

I only need to clean it up an document it some more. Will post it here by monday next week.