capacitor-community / fcm

Enable Firebase Cloud Messaging for Capacitor apps
https://capacitor.ionicframework.com/docs/
MIT License
237 stars 83 forks source link

Android studio failed to run app in emulator #85

Closed Bon0mel closed 2 years ago

Bon0mel commented 2 years ago

Hello I'm getting this error when I try to run my app in android studio. What am I doing wrong?

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/iid/InstanceIdResult; at java.lang.reflect.Executable.getParameterTypesInternal(Native Method) at java.lang.reflect.Method.getParameterTypes(Method.java:186) at java.lang.Class.getDeclaredMethods(Class.java:1884) at com.getcapacitor.Plugin.initializeActivityLaunchers(Plugin.java:108) at com.getcapacitor.PluginHandle.load(PluginHandle.java:96) at com.getcapacitor.PluginHandle.(PluginHandle.java:59) at com.getcapacitor.Bridge.registerPlugin(Bridge.java:503) at com.getcapacitor.Bridge.registerAllPlugins(Bridge.java:458) at com.getcapacitor.Bridge.(Bridge.java:188) at com.getcapacitor.Bridge.(Bridge.java:65) at com.getcapacitor.Bridge$Builder.create(Bridge.java:1267) at com.getcapacitor.BridgeActivity.load(BridgeActivity.java:72) at com.getcapacitor.BridgeActivity.init(BridgeActivity.java:58) at com.getcapacitor.BridgeActivity.init(BridgeActivity.java:41) at io.ionic.starter.MainActivity.onCreate(MainActivity.java:20) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 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:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.iid.InstanceIdResult" on path: DexPathList[[zip file "/data/app/8ETN2m6N5l6qF14maIvBzw==/nl.medfeed.podcast-rpil3AnetKQcGSIODVD6Gw==/base.apk"],nativeLibraryDirectories=[/data/app/8ETN2m6N5l6qF14maIvBzw==/nl.medfeed.podcast-rpil3AnetKQcGSIODVD6Gw==/lib/x86, /system/lib, /system_ext/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.reflect.Executable.getParameterTypesInternal(Native Method)  at java.lang.reflect.Method.getParameterTypes(Method.java:186)  at java.lang.Class.getDeclaredMethods(Class.java:1884)  at com.getcapacitor.Plugin.initializeActivityLaunchers(Plugin.java:108)  at com.getcapacitor.PluginHandle.load(PluginHandle.java:96)  at com.getcapacitor.PluginHandle.(PluginHandle.java:59)  at com.getcapacitor.Bridge.registerPlugin(Bridge.java:503)  at com.getcapacitor.Bridge.registerAllPlugins(Bridge.java:458)  at com.getcapacitor.Bridge.(Bridge.java:188)  at com.getcapacitor.Bridge.(Bridge.java:65)  at com.getcapacitor.Bridge$Builder.create(Bridge.java:1267)  at com.getcapacitor.BridgeActivity.load(BridgeActivity.java:72)  at com.getcapacitor.BridgeActivity.init(BridgeActivity.java:58)  at com.getcapacitor.BridgeActivity.init(BridgeActivity.java:41)  at io.ionic.starter.MainActivity.onCreate(MainActivity.java:20)  at android.app.Activity.performCreate(Activity.java:8000)  at android.app.Activity.performCreate(Activity.java:7984)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  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:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

jswilliams commented 2 years ago

I'm getting this exact issue. @Bon0mel have you figured out why it was happening?

jswilliams commented 2 years ago

We figured out how to fix it @Bon0mel.

The solution is to add the below to the dependencies section of your android/app/build.gradle

implementation 'com.google.firebase:firebase-iid'

Also make sure you've added the BOM above that if you haven't already for other firebase packages

implementation platform('com.google.firebase:firebase-bom:28.4.0')

@stewones and @danielprrazevedo the readme might need updated to include this, assuming I didn't just miss it somewhere while skimming through.

I know either the capacitor analytics or crashalytics readme mentions to run through the firebase android setup article which mentions a couple dependencies like this to add and it's linked in their repo's readme.

https://firebase.google.com/docs/cloud-messaging/android/client would be the article to add for this. Interestingly their article doesn't say you need to add com.google.firebase:firebase-iid though, just com.google.firebase:firebase-messaging, which by itself doesn't fix it. At least in our app. So still not sure if we're doing something funky but it appears to work now.

Bon0mel commented 2 years ago

This worked for me! Ill be closing the this issue now. Thanks alot @jswilliams

Cyral commented 2 years ago

"We strongly recommend migrating to FCM's token APIs. If you're unable to migrate to the replacement APIs, add a direct dependency on the firebase-iid library to your build.gradle file." from https://firebase.google.com/support/release-notes/android#update_-_april_02_2019

This library needs to be migrated off the old Firebase Instance ID API