Sdkbox crash with Firebase

Hi,

I’m getting a crash on android with cocos creator 2.2.1 with simple HelloWorld example project with below versions:

sdkbox v1.4.1.0
Firebase	2.7.1.0
Google Play Services 2.7.1.0

build.gradle dependencies below:

dependencies { compile 'com.google.android.gms:play-services-base:16.1.0' }
dependencies { implementation 'com.google.firebase:firebase-analytics:17.2.1' }

I tried androidx flag in gradle.properties below but not working either. Also Android Studio “Refactor > Migrate to AndroidX” is not working either as it says “No usages found in the project”:

android.useAndroidX=true
android.enableJetifier=true

Crash log is:

01-03 17:55:19.025 31433 31433 E AndroidRuntime: FATAL EXCEPTION: main
01-03 17:55:19.025 31433 31433 E AndroidRuntime: Process: org.cocos2d.helloworld, PID: 31433
01-03 17:55:19.025 31433 31433 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/os/UserManagerCompat;
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.FirebaseApp.initializeAllApis(com.google.firebase:firebase-common@@19.0.0:548)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@19.0.0:300)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@19.0.0:264)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@19.0.0:249)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.provider.FirebaseInitProvider.onCreate(com.google.firebase:firebase-common@@19.0.0:51)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.content.ContentProvider.attachInfo(ContentProvider.java:1940)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.content.ContentProvider.attachInfo(ContentProvider.java:1915)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.google.firebase.provider.FirebaseInitProvider.attachInfo(com.google.firebase:firebase-common@@19.0.0:45)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:6742)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread.installContentProviders(ActivityThread.java:6289)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6204)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread.access$1200(ActivityThread.java:237)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1785)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.os.Looper.loop(Looper.java:214)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7050)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
01-03 17:55:19.025 31433 31433 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.os.UserManagerCompat" on path: DexPathList[[zip file "/data/app/org.cocos2d.helloworld-0lxHmeE2eIIblt4y_gpsSA==/base.apk"],nativeLibraryDirectories=[/data/app/org.cocos2d.helloworld-0lxHmeE2eIIblt4y_gpsSA==/lib/arm, /data/app/org.cocos2d.helloworld-0lxHmeE2eIIblt4y_gpsSA==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]

@yinjimmy, I already looked at Problem after SDKBOX update

It would be great if you have a solution to this as I would like to include firebase to my existing published game.

Thanks

i tried on creator 2.2.1, but not reproduce.
here is my test proejct

and your error is UserManagerCompat missing, maybe you can add follow line to depedencies

implementation `androidx.core:core:$core_version`

Thanks @htlxyz

I cloned your sample repo and built apk.
But also getting same crash log:

01-04 09:30:48.237 27642 27642 E LoadedApk: java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[zip file "/data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/base.apk"],nativeLibraryDirectories=[/data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/lib/arm, /data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.LoadedApk.createAppFactory(LoadedApk.java:239)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:768)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.LoadedApk.getClassLoader(LoadedApk.java:847)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.LoadedApk.getResources(LoadedApk.java:1088)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.ContextImpl.createAppContext(ContextImpl.java:2563)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6100)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.ActivityThread.access$1200(ActivityThread.java:237)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1785)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.os.Handler.dispatchMessage(Handler.java:106)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.os.Looper.loop(Looper.java:214)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at android.app.ActivityThread.main(ActivityThread.java:7050)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at java.lang.reflect.Method.invoke(Native Method)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
01-04 09:30:48.237 27642 27642 E LoadedApk: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
01-04 09:30:48.238  3320  3320 I SurfaceFlinger: id=41467 createSurf (5920x5920),2 flag=4, WindowToken{c5ff3a9 android.os.BinderProxy@61feb30}#0
01-04 09:30:48.239  3848  4166 D InputTransport: Input channel constructed: fd=438
01-04 09:30:48.239  3848  4166 D InputTransport: Input channel constructed: fd=442
--
01-04 09:30:48.299 27642 27642 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.os.UserManagerCompat" on path: DexPathList[[zip file "/data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/base.apk"],nativeLibraryDirectories=[/data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/lib/arm, /data/app/com.sdkbox.test.app.firebase-0Y_CSSPlDmbs1MngfArNZw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]
01-04 09:30:48.299 27642 27642 E AndroidRuntime: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
01-04 09:30:48.299 27642 27642 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
01-04 09:30:48.299 27642 27642 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
01-04 09:30:48.299 27642 27642 E AndroidRuntime: 	... 19 more
01-04 09:30:48.301  3848  4158 D SecContentProvider: query(), uri = 17 selection = isSettingsChangesAllowed
01-04 09:30:48.301  3848  4158 D SecContentProvider: called from android.uid.systemui:10046
01-04 09:30:48.301  3848  4158 D RestrictionPolicy: isSettingsChangesAllowedAsUser, userId 0 : true
01-04 09:30:48.301  4171  4308 D Tile.WifiTile:  setItemsVisible : true
01-04 09:30:48.306  3848  4397 D Debug   : !@DumpState : SHIP
01-04 09:30:48.306  3848  4397 D Debug   : !@DumpState : debug level:0x4f4c
01-04 09:30:48.306  3848  4397 D Debug   : !@Dumpstate : Finally, system will skip dumpstate
01-04 09:30:48.306  3848  4397 W ActivityManager: crash : com.sdkbox.test.app.firebase,0 

I also added dependencies for androidx.core and tried flags for useAndroidX and enableJetifier but still same.

I then looked at the dependencies output, which show indeed androidx.core dependencies but I thought the old firebase library should not use androidx?

./gradlew sdkbox-sample-ccc200:dependencies

debugRuntimeClasspath - Resolved configuration for runtime for variant: debug
+--- com.google.android.gms:play-services-base:16.1.0 -> 17.0.0
|    +--- androidx.collection:collection:1.0.0
|    |    \--- androidx.annotation:annotation:1.0.0
|    +--- androidx.core:core:1.0.0
|    |    +--- androidx.annotation:annotation:1.0.0
|    |    +--- androidx.collection:collection:1.0.0 (*)
|    |    +--- androidx.lifecycle:lifecycle-runtime:2.0.0
|    |    |    +--- androidx.lifecycle:lifecycle-common:2.0.0
|    |    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    |    +--- androidx.arch.core:core-common:2.0.0
|    |    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    \--- androidx.versionedparcelable:versionedparcelable:1.0.0
|    |         +--- androidx.annotation:annotation:1.0.0
|    |         \--- androidx.collection:collection:1.0.0 (*)
|    +--- androidx.fragment:fragment:1.0.0
|    |    +--- androidx.core:core:1.0.0 (*)
|    |    +--- androidx.legacy:legacy-support-core-ui:1.0.0
|    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    +--- androidx.legacy:legacy-support-core-utils:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    +--- androidx.documentfile:documentfile:1.0.0
|    |    |    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.loader:loader:1.0.0
|    |    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    |    +--- androidx.lifecycle:lifecycle-livedata:2.0.0
|    |    |    |    |    |    +--- androidx.arch.core:core-runtime:2.0.0
|    |    |    |    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    |    |    |    \--- androidx.arch.core:core-common:2.0.0 (*)
|    |    |    |    |    |    +--- androidx.lifecycle:lifecycle-livedata-core:2.0.0
|    |    |    |    |    |    |    +--- androidx.lifecycle:lifecycle-common:2.0.0 (*)
|    |    |    |    |    |    |    +--- androidx.arch.core:core-common:2.0.0 (*)
|    |    |    |    |    |    |    \--- androidx.arch.core:core-runtime:2.0.0 (*)
|    |    |    |    |    |    \--- androidx.arch.core:core-common:2.0.0 (*)
|    |    |    |    |    \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0
|    |    |    |    |         \--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
|    |    |    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    |    |    \--- androidx.print:print:1.0.0
|    |    |    |         \--- androidx.annotation:annotation:1.0.0
|    |    |    +--- androidx.customview:customview:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    \--- androidx.core:core:1.0.0 (*)
|    |    |    +--- androidx.viewpager:viewpager:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    \--- androidx.customview:customview:1.0.0 (*)
|    |    |    +--- androidx.coordinatorlayout:coordinatorlayout:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    \--- androidx.customview:customview:1.0.0 (*)
|    |    |    +--- androidx.drawerlayout:drawerlayout:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    \--- androidx.customview:customview:1.0.0 (*)
|    |    |    +--- androidx.slidingpanelayout:slidingpanelayout:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    \--- androidx.customview:customview:1.0.0 (*)
|    |    |    +--- androidx.interpolator:interpolator:1.0.0
|    |    |    |    \--- androidx.annotation:annotation:1.0.0
|    |    |    +--- androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    +--- androidx.core:core:1.0.0 (*)
|    |    |    |    \--- androidx.interpolator:interpolator:1.0.0 (*)
|    |    |    +--- androidx.asynclayoutinflater:asynclayoutinflater:1.0.0
|    |    |    |    +--- androidx.annotation:annotation:1.0.0
|    |    |    |    \--- androidx.core:core:1.0.0 (*)
|    |    |    \--- androidx.cursoradapter:cursoradapter:1.0.0
|    |    |         \--- androidx.annotation:annotation:1.0.0
|    |    +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
|    |    +--- androidx.annotation:annotation:1.0.0
|    |    +--- androidx.loader:loader:1.0.0 (*)
|    |    \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 (*)
|    +--- com.google.android.gms:play-services-basement:17.0.0
|    |    +--- androidx.collection:collection:1.0.0 (*)
|    |    +--- androidx.core:core:1.0.0 (*)
|    |    \--- androidx.fragment:fragment:1.0.0 (*)
|    \--- com.google.android.gms:play-services-tasks:17.0.0
|         \--- com.google.android.gms:play-services-basement:17.0.0 (*)
+--- project :libcocos2dx
\--- com.google.firebase:firebase-analytics:17.2.1
     +--- com.google.android.gms:play-services-measurement:17.2.1
     |    +--- androidx.collection:collection:1.0.0 (*)
     |    +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
     |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    +--- com.google.android.gms:play-services-measurement-base:[17.2.1] -> 17.2.1
     |    |    \--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    +--- com.google.android.gms:play-services-measurement-impl:[17.2.1] -> 17.2.1
     |    |    +--- androidx.collection:collection:1.0.0 (*)
     |    |    +--- androidx.core:core:1.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-ads-identifier:17.0.0
     |    |    |    \--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-measurement-base:[17.2.1] -> 17.2.1 (*)
     |    |    \--- com.google.android.gms:play-services-stats:17.0.0
     |    |         +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
     |    |         \--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    \--- com.google.android.gms:play-services-stats:17.0.0 (*)
     +--- com.google.android.gms:play-services-measurement-api:17.2.1
     |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    +--- com.google.android.gms:play-services-measurement-base:[17.2.1] -> 17.2.1 (*)
     |    +--- com.google.android.gms:play-services-measurement-impl:[17.2.1] -> 17.2.1 (*)
     |    +--- com.google.android.gms:play-services-measurement-sdk-api:[17.2.1] -> 17.2.1
     |    |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    |    \--- com.google.android.gms:play-services-measurement-base:[17.2.1] -> 17.2.1 (*)
     |    +--- com.google.android.gms:play-services-tasks:17.0.0 (*)
     |    +--- com.google.firebase:firebase-common:19.0.0
     |    |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-tasks:17.0.0 (*)
     |    |    \--- com.google.auto.value:auto-value-annotations:1.6.5
     |    +--- com.google.firebase:firebase-iid:19.0.0
     |    |    +--- androidx.collection:collection:1.0.0 (*)
     |    |    +--- androidx.core:core:1.0.0 (*)
     |    |    +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-stats:17.0.0 (*)
     |    |    +--- com.google.android.gms:play-services-tasks:17.0.0 (*)
     |    |    +--- com.google.firebase:firebase-common:18.0.0 -> 19.0.0 (*)
     |    |    \--- com.google.firebase:firebase-iid-interop:17.0.0
     |    |         +--- com.google.android.gms:play-services-base:17.0.0 (*)
     |    |         \--- com.google.android.gms:play-services-basement:17.0.0 (*)
     |    \--- com.google.firebase:firebase-measurement-connector:18.0.0
     |         \--- com.google.android.gms:play-services-basement:17.0.0 (*)
     \--- com.google.android.gms:play-services-measurement-sdk:17.2.1
          +--- androidx.collection:collection:1.0.0 (*)
          +--- com.google.android.gms:play-services-basement:17.0.0 (*)
          +--- com.google.android.gms:play-services-measurement-base:[17.2.1] -> 17.2.1 (*)
          \--- com.google.android.gms:play-services-measurement-impl:[17.2.1] -> 17.2.1 (*)

Actually looking at Release Notes  |  Google APIs for Android  |  Google Developers
it shows that since firebase v17.0.0, AndroidX dependencies is required. So, is it possible that it is related to the version of sdkbox I am using e.g. v1.4.1.0 and that plugin installation is not including AndroidX migration out of the box anymore? Which version of sdkbox are you using?

The latest update to Google Play services and Firebase includes the following changes:

  • Migration from Android Support Libraries to Jetpack (AndroidX) Libraries. Libraries will not work unless you make the following changes in your app:
    • Upgrade com.android.tools.build:gradle to v3.2.1 or later.
    • Upgrade compileSdkVersion to 28 or later.
    • Update your app to use Jetpack (AndroidX); follow the instructions in Migrating to AndroidX.

it’s strange
I clone sdkbox-sample-ccc200/firebase_with_creator_2.2.1 again, and then compile and run it directly with AS, work fine.

your error still can’t find androidx.core.*, but from the output of ./gradlewsdkbox-sample-ccc200: dependencies , we can see that androidx.core is already dependent.
androidx has been proguard?

sdkbox-sample-ccc200/firebase_with_creator_2.2.1 use sdkbox firebase 2.7.1.0

I know what happened.

So, I normally use Cocos Creator to make build and run apk on mobile. Cocos creator use whatever config is defined in gradle config files.

When I used Android Studio to make build and run apk, it initially failed too with same crash log. This is because I did not upgrade gradle version when prompted by Android Studio.

Then I updated com.android.tools.build:gradle from 3.2.0 to 3.2.1 in build.gradle, and did another build and it then ran successfully. I did not have to configure AndroidX migration for some reasons.

1 Like