As the name suggest, I am investigating an issue after updating to AGP 8.2 and libraries to newest version. After released, my app starts to receiving crashes (mostly on Oppo devices) on android 8, 9. Crash look like this:
Caused by java.lang.ClassNotFoundException
Didn't find class "androidx.profileinstaller.ProfileInstallerInitializer" on path: DexPathList[[zip file "/data/app/myapppackage-qQ9d4bjx6IvdXnQJDXkmlw==/base.apk"],nativeLibraryDirectories=[/data/app/myapppackage-qQ9d4bjx6IvdXnQJDXkmlw==/lib/arm64, /data/app/myapppackage-qQ9d4bjx6IvdXnQJDXkmlw==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Class.java)
at java.lang.Class.forName(Class.java:453)
at java.lang.Class.forName(Class.java:378)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:224)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1951)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1926)
at android.app.ActivityThread.installProvider(ActivityThread.java:6773)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6267)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6175)
at android.app.ActivityThread.-wrap1()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:7080)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:523)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:863)
After investigating, it seems like that:
- At least 1 updated library (androidx.core:core:1.12.0) has a new dependency: androidx.profileinstaller. I traced back that it has a dependency: androidx.lifecycle which in turn depends on androidx.profileinstaller. To be more specific, since ver 2.6.0-rc01: https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.0-rc01. The commit changelog is this: https://android.googlesource.com/platform/frameworks/support/+log/7d3ac1ab1206c01fae3ebb500b5b942636070155..a0e71d292812d53868b56f94481f420a70843460/lifecycle. In this changelog, you can see there is a commit "Add profileinstaller to non-compose android libraries that include a profile". I see that they also added this androidx.profileinstaller dependency to activity, appcompat, fragment, recyclerview, etc.
- AGP 8.0 now enforces turn on the flag android.enableArtProfiles: https://developer.android.com/build/releases/past-releases/agp-8-0-0-release-notes#enforced-changes And these 2 reasons caused the issue to happen.
My questions are:
1/ Why did they add this androidx.profileinstaller to lots of libraries?
2/ So now the baseline profile will run automatically as with the crash stack trace on app startup?
3/ Do I need to setup the baseline profile (https://developer.android.com/topic/performance/baselineprofiles/overview)?