web-dev-qa-db-ja.com

新しいFirebaseに更新した後の例外Java.lang.NoClassDefFoundError:com.google.firebase.FirebaseOptions

私は this を使用して私のアプリケーションを新しいfirebaseに更新しました、そして今私が私のプロジェクトをコンパイルするとき私は次の例外を得ます。

これが私のlogcatです:

11:57:54.533 27844-27844/com.example.dayshift_2.traveyy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.dayshift_2.traveyy, PID: 27844
Java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1591)
at Android.content.ContentProvider.attachInfo(ContentProvider.Java:1562)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at Android.app.ActivityThread.installProvider(ActivityThread.Java:4871)
at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4466)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4406)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:139)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1270)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5102)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601)
at dalvik.system.NativeStart.main(Native Method)

私のBuild.gradle:

apply plugin: 'com.Android.application'

Android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.example.dayshift_2.traveyy"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE-FIREBASE.txt'
    exclude 'META-INF/NOTICE'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'

compile 'com.Android.support:appcompat-v7:23.3.0'
compile 'com.Android.support:design:23.3.0'
compile 'com.facebook.Android:facebook-Android-sdk:4.+'
compile 'com.google.Android.gms:play-services:9.0.0'
compile 'com.google.firebase:firebase-database:9.0.0'
compile 'com.google.firebase:firebase-auth:9.0.0'
compile 'com.Android.support:support-v13:23.3.0'
compile 'com.roughike:bottom-bar:1.2.1'
}


apply plugin: 'com.google.gms.google-services'

私はどこからこの例外を取得しているのかわからない。任意の助けは非常に高く評価されます。ありがとうございました

68
M.Waqas Pervez

これは私のために働いた:

  1. まだお持ちでない場合は、Android SDK Manager> Extrasから「Google Play Services」をRevision 30に更新してください。

Android SDK Manager > Extras > Google Play Services

  1. そしてcompile 'com.Android.support:multidex:1.0.1'という行をあなたの扶養家族に追加してください(あるいは必要でなければ単にmultiDexEnabled trueを削除してください)

  2. この属性をマニフェストのapplicationタグに追加します。Android:name="Android.support.multidex.MultiDexApplication"
    Android Manifestでカスタムアプリケーションクラスが既に定義されている場合は、MultiDexApplicationではなくApplicationから拡張します。

お役に立てば幸いです。

138
BKC

最新のGoogle Playサービスを使用していますが機能していませんでした。私にとっては、この手順はうまくいっています。

  1. 私のApplicationクラスを更新しました:

    public class App extends Application {
      @Override
      protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
     }
    }
    
  2. 更新されたbuild.gradleファイル:

    defaultConfig {
        ...
        multiDexEnabled true
    }
    
  3. 含まれる依存関係:

    dependencies {
      compile 'com.Android.support:multidex:1.0.0'
    }
    
45
enam

Guysを修正するのはとても簡単です。プロジェクトでplayer-servicesとfirebaseの両方を使用している場合は、googleのすべての利用可能なサービスをインポートしないようにしてください。実際に必要なものだけをインポートします。例えば:

 compile 'com.google.firebase:firebase-messaging:9.2.0'
 compile 'com.google.Android.gms:play-services:9.2.0'

こうすることであなたに与えることができますnoclassdeffounderror。これを修正するには

play-servicesを削除してプロジェクトを同期します。アプリで広告や地図を使用するような依存関係がある場合は、特定のAPIを定義します。好きです:

compile 'com.google.Android.gms:play-services-maps:9.2.0'

注:最大値はmultiDexEnabled trueを使用しないでください。これは何かを修正するための最後のステップです。

これが役に立つことを願っています。

22
Rushi Ayyappa

IdowngradedからGoogle Playサービスの依存関係

compile 'com.google.Android.gms:play-services:9.2.0' 

compile 'com.google.Android.gms:play-services:8.4.0' 

これは私のためにこの問題を解決しました。

詳しくは 次のStack Overflowリンク を参照してください。


注意してください。最新のGoogle Playサービスにアップグレードする場合
compile 'com.google.Android.gms:play-services:9.4.0'それはこの問題も解決しました。

または、すべてのGoogle Playサービスをインポートするのではなく、必要な特定のサービスを選択的にインポートすることもできます。

17
Arshak

ステップ1:マルチインデックスを修正する

アプリケーションクラス

public class StudyNApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
 }

グレードファイル

defaultConfig { 
...
multiDexEnabled true
}

dependencies {
  compile 'com.Android.support:multidex:1.0.0'
}

ステップ2:Java.lang.NoClassDefFoundErrorを修正します:com.google.firebase.FirebaseOptions

削除する

compile 'com.google.Android.gms:play-services:9.4.0'

2つのライブラリを追加します。

compile 'com.google.Android.gms:play-services-maps:9.4.0'
compile 'com.google.Android.gms:play-services-location:9.4.0'

それはうまくいった。

13
sonnv1368

忘れないでください。

Android:name="Android.support.multidex.MultiDexApplication"
5
bb14816

私はこれを追加し、プレイサービスの依存度を8.4.0に下げることで解決しました 'com.google.Android.gms:play-services:8.4.0'

    @Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    MultiDex.install(this);
}

そしてマニフェストに以下を追加する

Android:name="Android.support.multidex.MultiDexApplication"
3
Abednego

TargetSDKVersionを22から23に増やしたときに同じ問題が発生していましたが、問題を解決するために最低1日かけて過ごしました。今、ついに私はあなたのbuild.gradleファイルで異なるプレイサービスAPIを使用した結果を見つけますソース: https://developers.google.com/Android/guides/setup#add_google_play_services_to_your_project

関連するApiのみを追加しましたが、私のアプリは問題なく動作しています。

1
Muhammad Umer
 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(**R.string.default_web_client_id**))
            .requestEmail()
            .build();

私の同じ場合、私はrequestIdTokenを変更しました、そして、それは働きました。

0
ugurozgen

私はこの 答えでこの問題の解決策を見つけたと思います 、見てくれてありがとう@ Gabriele Mariotti、彼は書きました:

あなたのトップレベルのbuild.gradleにあなたは追加しなければなりません:

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

それからあなたのモジュールbuild.gradleの中で:

apply plugin: 'com.Android.application'

Android {
  // ...
}

dependencies {
  // ... 

}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
0
dependencies {
compile 'com.Android.support:support-v4:25.0.1'
compile 'com.google.firebase:firebase-ads:9.0.2'
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.Android.support:multidex:1.0.1'    
}  

プラグインを適用します:'com.google.gms.google-services'

0
Muhammad Azeem

この問題を解決するには、アプリをマルチデックスに設定してください。

minSdkVersion21以上の場合、multiDexEnabledtrueに設定します。以下に示すように、モジュールレベルのbuild.gradleファイルで - )

Android {
  defaultConfig {
    //...
    minSdkVersion 21 
    targetSdkVersion 26
    multiDexEnabled true
   }
  //...
 }

minSdkVersionAPI 20以下

  1. 以下に示すように、module-level build.gradleを修正し、マルチデックスライブラリを依存関係として追加します。

    Android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } //... } dependencies { compile 'com.Android.support:multidex:1.0.1' }

  2. Applicationクラスをオーバーライドしない場合は、manifestファイルを編集してapplicationタグにAndroid:nameを設定します。次のように

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="com.example.myapp"> <application Android:name="Android.support.multidex.MultiDexApplication"> //... </application> </manifest>

    2.1.1。 Applicationクラスをオーバーライドする場合は、MultiDexApplicationを継承します。

    public class MyApplication extends MultiDexApplication { //... }
    

    2.1.2。あるいは、Applicationクラスをオーバーライドしても基本クラスを変更することができない場合は、代わりにattachBaseContext()メソッドをオーバーライドしてMultiDex.install(this)を呼び出してマルチインデックスを有効にすることができます。

    public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }

もっと詳しく mdex-gradle

これが同じ問題に直面している他の人を助けることを願っています。

0
Rupesh Yadav

解決しようとしています...

gradleファイルに

multiDexEnabled true

「com.Android.support:multidex:1.0.1」をコンパイルします。

マニフェストファイル

アプリケーションタグこの行を追加

Android:name = "Android.support.multidex.MultiDexApplication"

0
Hiral Khakhriya

これらすべての多忙な解決策を実行する前に、Clean ProjectまたはRebuild ProjectをAndroid Studioから試してください。

Java.lang. NoClassDefFoundError

プロジェクトでClassの名前を変更すると例外がスローされますが、Runtimeで行った変更は取得できませんでした。

0
Walid Al Ashik