Skip to content

Significant Increase in ANRs After Updating to SDK 34 - Firebase Ads Libraries #6223

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
axitasavani opened this issue Sep 2, 2024 · 9 comments
Labels

Comments

@axitasavani
Copy link

axitasavani commented Sep 2, 2024

Step 1: Describe your environment

  • Android device: Samsung, Oppo, Vivo, Techno, Google, Motorola
  • Android OS version: 11,12,13,14
  • Google Play Services version: 'com.google.gms:google-services:4.4.2'
  • Firebase/Play Services SDK version:
  • firebase-crashlytics:18.6.3'
  • firebase-analytics:21.6.2'
  • firebase-ads:23.0.0'
  • firebase-messaging:23.4.1'
  • firebase-config:21.6.3'

Step 2: Describe the problem:

Steps to reproduce:

We have observed a substantial rise in ANRs (Application Not Responding) incidents after updating our Android SDK to version 34. The issue appears to be linked to Google Ads libraries, as the ANRs are predominantly coming from them.

Our project is configured with the following settings:

  • classpath 'com.android.tools.build:gradle:7.3.1' , distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zip
  • Target SDK version: 34
  • Minimum SDK version: 21

This issue is critical and has negatively impacted the user experience. We seek urgent assistance in identifying and resolving the root cause of these ANRs.

SS_1
SS_2
SS_3

@AkshayOptimumbrew
Copy link

Facing same issue!!

@thatfiredev thatfiredev transferred this issue from firebase/quickstart-android Sep 2, 2024
@google-oss-bot
Copy link
Contributor

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

@thatfiredev
Copy link
Member

This issue was originally opened in the firebase/quickstart-android repository, but the error seems to be related to the SDK, so I've transferred it to the firebase/firebase-android-sdk repo.

@thatfiredev
Copy link
Member

thatfiredev commented Sep 2, 2024

@axitasavani Sorry that you ran into this.
Just to double check: are you calling MobileAds.initialize() in a separate thread, as suggested in the docs?

There's also a page on the docs talking about Optimizing initialization and ad loading

@axitasavani
Copy link
Author

Hi, @thatfiredev
Currently, I'm not calling this method in a separate Thread.
But, after you suggested I checked with MobileAds.initialize() in a separate thread but it's getting more ANR in my app.
Also, Firebase TestLab rejects the app due to too much ANR & then Crashes.

SS: Attached Screenshot of Firebase TestLab
Device: Samsung Galaxy S24, API Level 34
Screenshot 2024-09-05 105315

@lehcar09
Copy link
Contributor

lehcar09 commented Sep 5, 2024

Hi @axitasavani, I tried reproducing the issue, however, I did not encounter the ANR issue. I wonder if the issue is related to the behavioral changes in Android 14 documented here.

Could you share an MCVE to help us investigate the issue?

@axitasavani
Copy link
Author

axitasavani commented Sep 6, 2024

@lehcar09 Let me share the Init code of Admob which I used :

  • This function is called from the Application Class > onCreate() method
private void initMobileSDK(Context context) {
        Log.i(TAG, "initMobileSDK:  --> ");

        MobileAds.initialize(context, new OnInitializationCompleteListener() {
            public void onInitializationComplete(@NotNull InitializationStatus initializationStatus) {
                Log.i(ObAdMobConfigManager.TAG, "onInitializationComplete: MobileAds initialize successfully.");
            }
        });
        this.getAdRequestInstance(); // here I create AdRequest.Builder 
    }

Screenshot of ANR :

ss_4_obadmob
ss_5_obadmob

ANR logs :

main (runnable):tid=1 systid=24187 #00 pc 0x4a7c34 libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool) + 140) #01 pc 0x5b70bc libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, BacktraceMap*, bool) const + 396) #02 pc 0x5d465c libart.so (art::DumpCheckpoint::Run(art::Thread*) + 924) #03 pc 0x5b8028 libart.so (art::Thread::RunCheckpointFunction() + 176) #04 pc 0x1d5c24 libart.so (art::ClassLinker::LoadClass(art::Thread*, art::DexFile const&, art::dex::ClassDef const&, art::Handle<art::mirror::Class>) + 1372) #05 pc 0x1d2544 libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::dex::ClassDef const&) + 932) #06 pc 0x1f7d48 libart.so (void* art::VisitClassLoaderDexFiles<void art::VisitClassLoaderDexFiles<art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30>(art::ScopedObjectAccessAlreadyRunnable&, art::Handle<art::mirror::ClassLoader>, art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30)::'lambda'(art::DexFile const*, void**), void*>(art::ScopedObjectAccessAlreadyRunnable&, art::Handle<art::mirror::ClassLoader>, art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30, void*) + 752) #07 pc 0x1d1820 libart.so (art::ClassLinker::FindClassInBaseDexClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::ObjPtr<art::mirror::Class>*) + 648) #08 pc 0x1d3004 libart.so (art::ClassLinker::FindClass(art::Thread*, char const*, art::Handle<art::mirror::ClassLoader>) + 1060) #09 pc 0x1bf310 libart.so (art::ClassLinker::DoResolveType(art::dex::TypeIndex, art::Handle<art::mirror::DexCache>, art::Handle<art::mirror::ClassLoader>) + 184) #10 pc 0x1bf8d0 libart.so (art::ObjPtr<art::mirror::Class> art::ClassLinker::DoResolveType<art::ObjPtr<art::mirror::Class> >(art::dex::TypeIndex, art::ObjPtr<art::mirror::Class>) + 232) #11 pc 0x1d5e50 libart.so (art::ClassLinker::LoadSuperAndInterfaces(art::Handle<art::mirror::Class>, art::DexFile const&) + 240) #12 pc 0x1d2598 libart.so (art::ClassLinker::DefineClass(art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::dex::ClassDef const&) + 1016) #13 pc 0x1f7d48 libart.so (void* art::VisitClassLoaderDexFiles<void art::VisitClassLoaderDexFiles<art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30>(art::ScopedObjectAccessAlreadyRunnable&, art::Handle<art::mirror::ClassLoader>, art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30)::'lambda'(art::DexFile const*, void**), void*>(art::ScopedObjectAccessAlreadyRunnable&, art::Handle<art::mirror::ClassLoader>, art::ClassLinker::FindClassInBaseDexClassLoaderClassPath(art::ScopedObjectAccessAlreadyRunnable&, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>)::$_30, void*) + 752) #14 pc 0x1d1820 libart.so (art::ClassLinker::FindClassInBaseDexClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, unsigned long, art::Handle<art::mirror::ClassLoader>, art::ObjPtr<art::mirror::Class>*) + 648) #15 pc 0x4d0c88 libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*) + 672) at java.lang.VMClassLoader.findLoadedClass(Native method) at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.google.android.gms.dynamic.RemoteCreator.getRemoteCreatorInstance(com.google.android.gms:play-services-basement@@18.1.0:5) at com.google.android.gms.ads.internal.client.zzeq.zza(com.google.android.gms:play-services-ads-lite@@22.0.0:2) at com.google.android.gms.ads.internal.client.zzaq.zzc(com.google.android.gms:play-services-ads-lite@@22.0.0:12) at com.google.android.gms.ads.internal.client.zzax.zzf(com.google.android.gms:play-services-ads-lite@@22.0.0:1) at com.google.android.gms.ads.internal.client.zzax.zzd(com.google.android.gms:play-services-ads-lite@@22.0.0:11) at com.google.android.gms.ads.internal.client.zzej.zzz(com.google.android.gms:play-services-ads-lite@@22.0.0:3) at com.google.android.gms.ads.internal.client.zzej.zzm(com.google.android.gms:play-services-ads-lite@@22.0.0:8) at com.google.android.gms.ads.MobileAds.initialize(com.google.android.gms:play-services-ads-lite@@22.0.0:3) at com.********..config.ObAdMobConfigManager.initMobileSDK(ObAdMobConfigManager.java:147) at com.********.ConfigManager.initObAdMobConfigManager(ObAdMobConfigManager.java:126) at com********..BusinessCardApplication.initObAdMob(BusinessCardApplication.java:291) at com********..BusinessCardApplication.initAllObHomeLibs(BusinessCardApplication.java:232) at com.********.BusinessCardApplication.onActivityCreated(BusinessCardApplication.java:317) at android.app.Application.dispatchActivityCreated(Application.java:390) at android.app.Activity.dispatchActivityCreated(Activity.java:1397) at android.app.Activity.onCreate(Activity.java:1670) at androidx.core.app.ComponentActivity.onCreate(ComponentActivity.java:88) at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:363) at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:273) at com********.EditorActivity.onCreate(EditorActivity.java:39) at android.app.Activity.performCreate(Activity.java:8119) at android.app.Activity.performCreate(Activity.java:8103) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1359) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3713) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3898) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2305) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:257) at android.app.ActivityThread.main(ActivityThread.java:8192) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1015)

I can't reproduce this ANR in real devices but user continue facing this on app startup.
NOTE: With "background thread" code also this ANR is comes. (Optimizing initialization and ad loading)

Also You can check in Android Developer ANR official document that they are report ANR in app which are target API 14 and above that's why increase suddenly.
Where is the ANR reported? : JobScheduler interactions

SS of official document of android developer site :

image

@axitasavani
Copy link
Author

axitasavani commented Sep 10, 2024

Hi, @lehcar09 any update?

@lehcar09
Copy link
Contributor

Thank you for the additional details @axitasavani . Looking at your logs, it looks like that the ANR you’re experiencing is caused by the behavioral changes in Android 14.

Our engineers are already working on this along with other improvements for API level 34 (android 14). Pardon me, but we don't have a definite timeline yet. However, it should be rolled out across all Firebase Android SDKs soon. We hope for your understanding.

To streamline the updates, you can follow on the issue #6147. With that, I'll be closing this issue now. Thanks.

@firebase firebase locked and limited conversation to collaborators Oct 12, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants