0

私のアプリが動作していました。Firebase SKDを更新するとエラーが発生しました:java.lang.NoClassDefFoundError:

プレイサービスをすべて9.0.0に更新し、'com.google.gms.google-services'プラグインと'com.google.gms:google-services:3.0.0'クラスパスを適用しました。

今私のアプリがクラッシュすると、このエラーを投げている:私はthis質問を見ましたが、答えは私のためにエラーが解決していない提供

/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/fasterxml/jackson/databind/ObjectMapper; 
    at com.firebase.client.core.view.QueryParams.<clinit>(QueryParams.java:36) 
    at com.firebase.client.Firebase.<init>(Firebase.java:172) 
    at com.firebase.client.Firebase.<init>(Firebase.java:177) 
    at com.firebase.client.Firebase.<init>(Firebase.java:155) 
    at com.defaultPackage.Application.addListener(Application.java:324) 
    at com.defaultPackage.Application.onCreate(Application.java:84) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.fasterxml.jackson.databind.ObjectMapper" on path: DexPathList[[zip file "/data/app/com.defaultPackage-2/base.apk"],nativeLibraryDirectories=[/data/app/com.defaultPackage-2/lib/arm, /vendor/lib, /system/lib]] 

誰でも原因を知っていますか?

+1

Firebase Android SDKのどのバージョンをお使いですか?依存関係のすべてを共有できますか? Firebase SDK 9.0.0はもはやJacksonに依存しないので、新しいSDKを適切に使用している場合は、Jacksonクラスへの参照は表示されません。 –

+1

これは良い答えの開始のように聞こえます。@hatboysam :-) –

+0

@FrankvanPuffelen最後に、私はこのエラーが私のアプリレベルのbuild.gradleで別のproductFlavoursを設定したためにスローされていることがわかりました。私は私の答えでスローされているエラーを停止するために何を詳細にした –

答えて

0

更新:

私のオリジナルの答えは、問題を解決しますが、時にすることができます新しいFirebase SDK Iへのアップグレード'com.google.gms.google-services'プラグインを適用する必要がありましたが、私は既に'com.google.android.gms:play-services:version'をコンパイルしていたため、何らかの競合が発生し、コンパイル済みのプレイサービスライブラリをアプリのbuild.gradleから削除することで問題は解決され、productFlavoursは削除する必要がなくなりました

オリジナルの答え:

が、それはあなたが新しいFirebase SDKに更新するときに使用されるように、古いFirebase SDKの機能を聞かせていくつかのケースでFirebase SDKコードを100%無修正の意志を残します。しかし、私の場合、私のコードを100%残したにもかかわらず、java.lang.NoClassDefFoundErrorがスローされていたのと同じです。

問題は、アプリケーションレベルのbuild.gradleに'apply plugin: 'com.google.gms.google-services'行、プロジェクトレベルのbuild.gradleに'classpath 'com.google.gms:google-services:3.0.0'行、プロジェクトにgoogleサービスファイルがあり、Google Playサービスを9.0.0に更新することで問題が発生しました

このアップデートにより、Facebook Reboundライブラリと古いFirebase SDKによってjava.lang.NoClassDefFoundErrorがスローされました。

私のプロジェクトはmultidexプロジェクトであり、私のアプリレベルのbuild.gradleに私が持っていた行:コメントアウトするか、これらの行にするjava.langを除去することにより

productFlavors { 
     // Define separate dev and prod product flavors. 
     dev { 
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin 
      // to pre-dex each module and produce an APK that can be tested on 
      // Android Lollipop without time consuming dex merging processes. 
      minSdkVersion 21 
     } 
     prod { 
      // The actual minSdkVersion for the application. 
      minSdkVersion 14 
     } 
    } 

を。NoClassDefFoundErrorは、もはや古いFirebase SDKやFacebook Reboundライブラリによってスローされませんでした。

3

エラーにはJackson ObjectMapperが記述されています。新しいFirebase Database Android SDKはJacksonに全く依存しないので、あなたのエラーはあなたが'com.firebase:firebase-client-android'のいくつかのバージョンを使用していることを意味します。

build.gradleからそのライブラリを削除する必要があります。あなたが使用するライブラリは、次のとおりです。 com.google.firebase:firebase-database:9.0.0

The migration guideは、この変更を行うために必要なコードの変更を説明します。最も重要な変更点は以下の通りである:

Firebase ref = new Firebase("<URL>"); 

AFTER、BEFORE

DatabaseReference ref = FirebaseDatabase.getInstance.getReference(); 
+0

あなたの応答に感謝します。古いFirebaseオブジェクトへの呼び出しを停止すると、このエラーは発生しませんが、新しいFirebase SDKをインストールして、古いFirebase SDKコードを同時に実行することはできませんか?移行ガイド[こちら](https://firebase.google.com/support/guides/firebase-android#import_your_project_to_the_new_firebase_console_numbered)では、「新しいFirebase SDKのインストール」セクションで古いFirebaseコードが動作しないとは言いません新しいSDKをインストールすると –

+0

古いコードを実行することは可能ですが、部分的な移行を避けることができます。新しい '9.0.0'ライブラリのいずれかを使用している場合は、エラーを避けるためにすべてのコンポーネントを一度に更新します。 古いコードを変更しないで100%のままにしておくと、引き続き実行する必要があります。 –

+0

あなたの応答に感謝します。しかし、私の場合、コードを100%変更しないままにしておくと、古いFirebaseコードをjava.lang.NoClassDefFoundError:エラーを投げずに実行することができなくなりました。私はこのエラーがなぜスローされたのかを知りました。私は以下の答えを提供しました –

関連する問題