クラス「com.google.firebase.provider.FirebaseInitProvider」が見つかりませんでしたか?


156

アプリの起動時に以下の例外が発生します。

java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536) 
at android.app.ActivityThread.access$1300(ActivityThread.java:149) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5214) 
at java.lang.reflect.Method.invokeNative(Native Method) 

これがアプリレベルのbuild.gradleです。

apply plugin: 'com.android.application'
apply plugin: 'android-apt' 

android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
    applicationId "com.vfirst.ifbagro"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

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


compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'
}

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

これは私のアプリケーションレベルのbuild.gradleです。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    classpath 'com.google.gms:google-services:3.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    jcenter()
}
}

task clean(type: Delete) {
     delete rootProject.buildDir
}

問題を解決するには?



私はそれらすべての答えをすでに試しました。何もうまく
いか

マニフェストまたはgoogle-services.jsonに問題があるようです。それらが正しいことを確認してください。マニフェストファイルを投稿できますか?
Rushi M Thakker

6
MultiDexに必要なマニフェストを変更しましたandroid:name="android.support.multidex.MultiDexApplication"か?MultiDexが正しく設定されている場合、アプリの初期化中に次のようなlogcatメッセージが表示されますI/MultiDex: install done
Bob Snyder

インスタントランをチェックします。可能であれば、インスタントランを無効にします。
Prathap Badavath 16

回答:


145

私は同じエラーがあり、このリンクで説明されているように、MultiDexでそれを解決しました:https ://developer.android.com/studio/build/multidex.html


MultiDexを有効にするだけでは不十分な場合があります。

起動時に必要なクラスがプライマリDEXファイルで提供されていない場合、アプリはエラーjava.lang.NoClassDefFoundErrorでクラッシュしますhttps://developer.android.com/studio/build/multidex#keep

起動時にはFirebaseInitProviderが必要です。

そのため、プライマリDEXファイルで必要に応じてFirebaseInitProviderを手動で指定する必要があります。

build.gradleファイル

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-config.txt')
            ...
        }
    }
}

multidex-config.txt(build.gradleファイルと同じディレクトリ内)

com/google/firebase/provider/FirebaseInitProvider.class

1
あなたはすごいです<3ありがとう、あなたは私の日を節約しました<3
モハメド・アテフ

24
こんにちはこの例外:原因:java.lang.ClassNotFoundException:クラス "com.google.firebase.provider.FirebaseInitProvider"が見つかりませんでした。実際にbuild.gradleの質問が表示された場合、multidexの有効化とは関係ありません。 multiDexEnabledが有効になっています!
Jorgesys、2016

3
このエラーはmultidexによるものではありません。マニフェストまたはメインクラスが表示されないため、すべての手順を完了していません。
AMAN77 2017年

3
これはうまくいきました。Gradleファイルでmultidexを有効にしましたが、Androidマニフェスト部分がありませんでした。
krikara 2017

3
また、Applicationクラスがから拡張されていることを確認してくださいMultiDexApplication()。私の場合、これが欠けていました。
ネルソンアルメンドラ

86

私も同じ問題に直面Instant Runし、Androidスタジオで無効にすることで最終的に解決しました。

設定→ビルド、実行、配置→インスタント実行、およびインスタント実行を有効にするのチェックを外します

更新:

最新のAndroid Studio 3.5以降では、インスタントランオプションは利用できません。古いバージョンにのみ適用できます。


8
わたしも。これが問題の原因でした-multidexやその他の回答ではありません。
user3562927 2017年

3
これはAndroid Studio 2.3の問題のようです。インスタントランを無効にすることも私にとってはうまく
いきました

1
私は別の会社から2つのプロジェクトを受け継ぎました。コードベース、マニフェスト、およびGradleの構成は、いくつかのマイナーアイテムの場合とほぼ同じです。1つのプロジェクトは正常にビルドおよび実行されますが、もう1つはそうではありません。Instant Runをオフにすると、両方ともすぐに実行されます。奇妙な。これはAndroid Studioを使用しています。2.3。
joeblow23 2017

3
AS 3.1とAPI 26を実行しているエミュレーターで、この同じ問題に直面しました。API19から25で問題が発生する前に。実際にインスタント実行を無効にすると、アプリを実行できます。ありがとう。
Marcin Jedynak

1
Instant Runを無効にしても、この問題は解決しません。
Alyoshak

49

build.gradle(Module:app)ファイルで、以下のコードをdefaultConfigに挿入します。

  defaultConfig {
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

依存関係に挿入します:

implementation 'com.android.support:multidex:2.0.1'

次に、マニフェストにコードを追加します。

<application 
    android:name="android.support.multidex.MultiDexApplication"

1
私はそれを試しています、それがうまくいくなら、私は賛成票を投じ、コメントします
カミル・イバドフ

45

私の(YouTubeプレーヤープロジェクト)でも同じ問題がありました。次の方法で問題が解決しました:

  1. 次のコードをbuild.gradle(モジュール:アプリ)内に追加しますdefaultConfing

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. 次のコードをbuild.gradle(モジュール:アプリ)内に追加しますdependencies

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. 開放的AndroidManifest.xmlかつ内部application

    <application
        android:name="android.support.multidex.MultiDexApplication"
        .....
        .....
    </application>

    または、Appクラスがある場合は、MultiDexApplicationから次のように拡張します。

    public class MyApp extends MultiDexApplication {
    .....

最後に、Android Support RepositorySDK ManagerのExtrasにダウンロードする必要があると思います。


1
「MultiDex.install(this);」を実行しました しかし、それはうまくいきませんでした。MultiDexApplicationを使用してアプリケーションクラスを拡張するとうまくいきました。
1

33

アプリケーションクラスで次のメソッドをオーバーライドするだけです。

public class YourApplication extends Application {

    @Override
    protected void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        MultiDex.install(this);
    }
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this); //initialize other plugins 

    }
}

加えandroid:nameて、マニフェストの内容に該当しないための1つ
チスコ

最もシンプルで最良の答え
kader kabore

カスタムアプリケーションクラスを使用している場合、これが答えになります。他の答えは問題を解決しません。
makkhay gurung

25

アプリとそれが参照するライブラリが65,536メソッドを超えると、アプリがAndroidビルドアーキテクチャの制限に達したことを示すビルドエラーが発生します

この制限を回避するには、アプリをmultidex用に構成する必要があります

minSdkVersion21以上に設定されている場合、次のように、モジュールレベルのbuild.gradleファイルでmultiDexEnabledをtrueに設定するだけです。

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        multiDexEnabled true
    }
    ...   
}

それ以外の場合、minSdkVersionが20以下に設定されている場合は、multidexサポートライブラリを次のように使用する必要があります。

1。次に示すように、モジュールレベルのbuild.gradleファイルを変更してmultidexを有効にし、multidexライブラリを依存関係として追加します。

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        multiDexEnabled true
    }
    ...
 }

dependencies {
        implementation 'com.android.support:multidex:1.0.3'
}

2次のいずれかを実行し、Applicationクラスを上書きするかどうかに.Depending:

  • 場合あなたはApplicationクラスをオーバーライドしていない、編集セットにマニフェストファイルは、Android:名前をタグに次のように:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • そうでない場合、Applicationクラスをオーバーライドする場合は、次のように変更して(可能な場合)MultiDexApplicationを拡張します。

   public class MyApplication extends MultiDexApplication { ... }
  • そうでなければ、あなたは、Applicationクラスをオーバーライドしませんが、それは、あなたの代わりにattachBaseContext()メソッドをオーバーライドし、multidexを有効にするには、MultiDex.install(これ)を呼び出すことができ、基本クラスを変更することはできません。

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

アプリケーションでMultiDexApplicationを拡張する必要があるのはなぜですか?
Jason

1
MultiDexApplicationはサポートライブラリクラスです。Applicationクラスを実装し、メソッド名attachBaseContextをオーバーライドして、MultiDex登録のジョブを実行します。attachBaseContextメソッドをオーバーライドする場合は、このクラスを拡張する必要はありません。
Sokmean Pon

1
これは、ネイティブに反応して2019年に私のためにそれを固定ではなくMainApplication.javaで2つの輸入が欠落しています。import android.content.Context;そしてimport android.support.multidex.MultiDex;
xaphod

1
あなたの答えは私のアプリを互換性を保つのに役立ちました。
Alok Vishwakarma

18

有効にすることmultidexは良い解決策ではありません。Androidでmultidex別の使用法を使用しているため、multidexとは何ですか?

@Shylendra Maddaが言ったように、解決策はInstant Runを無効にします

設定→ビルド、実行、配置→インスタント実行、およびインスタント実行を有効にするのチェックを外します

私は、インスタントの実行が有効になっている場合、この問題の理由があると思いますが、Androidのメーカーのようなライブラリを入れていないfirebaseため、プロジェクトのビルド時間を短縮するに生成されたAPKにするfirebase ライブラリとなどの他のライブラリmaps他の人がプレイサービスとプレイサービスに存在しているがインストールされていますAndroidデバイスでは、インスタントランが有効になっている場合、ビルド時間を短縮するために生成されたapkにそれらを配置する必要はありません。

したがって、apkを抽出して別のデバイスにインストールすると、この例外が表示されます


1
これは完璧なソリューションです
Ghanshyam Bagul 2017

Instant Runを無効にしても問題は解決しません。
Alyoshak

Android Studio 3.5.1では、[Build、Execution、Deployment]セクションにInstant Runアイテムはありません。
Vergiliy

@Vergiliy彼らはそれを適用の変更に置き換えました詳細についてはリリースブログの投稿android-developers.googleblog.com/2019/08/…を、適用の詳細についてはdocs developer.android.com/studio/run#apply-changesを参照してください変更
Edalat Feizi

14

私は以下の解決策を見つけたすべての解決策を試した後も同じ問題に直面しています

プロガードルールを適用した場合は、プロガードルールの以下の行を追加します

-keep class com.google.firebase.provider.FirebaseInitProvider

そしてそれは私の問題を解決します。


@gunavant patel broプロガードに追加する方法を教えてください
Gowthaman M

1
@gunavant patelこれで私の問題は解決すると思います...この行をどこに置くかサンプルコードを投稿してください-keep class com.google.firebase.provider.FirebaseInitProvider
Gowthaman M

@GowthamanMまず、app / build.gradleファイルでproguardを有効にしてください。有効にすると、app / proguard-rules.proのproguard-rulesファイルがそのファイルの上記の行に追加されます。あなたがプロガードを有効にしない場合、それはあなたを助けません。
Gunavant Patel、2018

buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }有効にする方法を教えてください
ゴーザマンM '10 / 09/18

プロガードを有効にしていない場合、問題は異なります。しかし、それをどのように有効にするかを示します。リリースに「minifyEnabled true」を追加するか、デバッグを有効にする場合は、デバッグタイプも追加します。
Gunavant Patel、2018

8

1: gradle enable multiDexEnabledに移動し、依存関係にmultidexライブラリを追加します。

android {
   ...
   defaultConfig {
      multiDexEnabled true
      ...
   }
}

dependencies {
  // add dependency 
  implementation 'com.android.support:multidex:1.0.1'
}

2:マニフェストファイルに移動し、android:name = "。MyApplication"と記述します(クラス名(MyApplication)はオプションであり、好きなように記述できます)。

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        .
        .
        .
        .
        .
    </application>

3:マニフェストファイルでandroid:name = "。MyApplication" Inside Applicationを記述したとおり。MyApplicationクラスを作成していないため、エラーが発生します。MyApplicationクラスを作成して、「アプリケーション」クラスで拡張するか、単にクリックします。MyApplicationをクリックすると、構文の左側に小さな赤いバルーンが表示されます。これをクリックすると、メニューに(MyApplicationクラスの作成)が表示され、クリックして含めることができます。そのクラス内のメソッドの下。

    public class MyApplication extends Application {

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

詳細については、このリンクをクリックしてください:[ https://developer.android.com/studio/build/multidex.html]

うまくいけば、それはあなたのために働きます。


7

最初に以下をbuild.gradle(Module:app)---->に追加します

defaultConfig{
..
multiDexEnabled true
..
}

次に、同じファイルに以下を追加します

dependencies{
...
compile 'com.android.support:multidex:1.0.1'
...
}

次に、AndroidManifest.xmlに次のように記述します

<application
    android:name="android.support.multidex.MultiDexApplication"
    .....
    .....
</application>

それでおしまい。間違いなく動作します


6

App GradleでMultiDexを使用している場合は、extend applicationを変更して、アプリケーションクラスのextends MultiDexApplicationに変更します。それは挑戦的に機能します


4

私は同じ問題を抱えており、コードを追加するだけで解決しました。この問題が発生している場合は、Firebaseを使用するために必要なすべての手順がすでに完了していることを意味します。アプリケーションを拡張するクラス(パブリッククラスApplication_CrashReport extends Application)を作成し、このクラスをmainifestファイルに追加し、そのクラスで以下のメソッドをオーバーライドするだけです。

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
}

MultiDex.install(this);を追加します。その方法では

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

:- 上記の手順を実行することを忘れないでください


2

これはMultiDexによるものです。

解決する手順:

  1. gradle-> dependencies->(compile'c​​om.android.support:multidex:1.0.1 ')これを依存関係に追加します

  2. あなたのプロジェクトでは、アプリケーションクラスはMultiDexApplicationを次のように拡張します(パブリッククラスMyApplication extends MultiDexApplication)

  3. 実行して確認する


2

これは入ってきた人には少し遅れますが、プロガードルールを確認してください!私はこれに多くの時間を費やしました。プロガードルールが名前を重要なfirebaseファイルに変更している可能性があります。これは本当に、生産と即時実行の問題を証明するだけです:)

proguard-rules.pro

-keep class com.google.firebase.** { *; }
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**

これでうまくいき、multidexを有効にしても時間を無駄にするだけでした。
マグナスW

2

前述したように、これはの問題multidexです。build.gradleとに実装を追加する必要がありますMainApplication.java。ただし、実際に追加するのは、AndroidXをサポートしているかどうかによって異なります。この問題を解決するために必要なものは次のとおりです。

  1. AndroidXをサポートしている場合

次のコード行をbuild.gradle(android / app / build.gradle)に追加します。

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "androidx.multidex:multidex:2.0.1" // <-- THIS LINE
  ...
}

これらの行をあなたのMainApplication.java(android / app / src / main / java /.../ MainApplication.java)に入れてください:

package com.your.package;

import androidx.multidex.MultiDexApplication; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE
  1. AndroidXをサポートしていない場合

次のコード行をbuild.gradle(android / app / build.gradle)に追加します。

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "com.android.support:multidex:1.0.3" // <-- THIS LINE
  ...
}

これらの行をあなたのMainApplication.java(android / app / src / main / java /.../ MainApplication.java)に入れてください:

package com.your.package;

import android.support.multidex.MultiDex;; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE

1

MultiDexApplication代わりにでアプリケーションクラスを拡張する必要がありますApplication


0

この問題は、Android Gradleプラグイン3.4.0を使用してAndroid Studio 3.4に切り替えたときに発生しました。R8コンパイラで動作します。

Android Gradleプラグインには、事前定義された追加のProGuardルールファイルが含まれていますが、proguard-android-optimize.txtを使用することをお勧めします。詳細はこちら

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile(
          'proguard-android-optimize.txt'),
          // List additional ProGuard rules for the given build type here. By default,
          // Android Studio creates and includes an empty rules file for you (located
          // at the root directory of each module).
          'proguard-rules.pro'
    }
}

0

私は同じ問題に直面していて、fireabseStorageのバージョンをFirebaseデータベースのバージョンと同じに変更することでこの問題を解決しました

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:17.0.0'

 implementation 'com.google.firebase:firebase-core:16.0.8'
 implementation 'com.google.firebase:firebase-database:16.0.1'
 implementation 'com.google.firebase:firebase-storage:16.0.1'

0

20分を超えるバージョンがある場合は、最新のFirebase Authバージョンを使用する必要があります。

実装 'com.google.firebase:firebase-auth:18.1.0'

実際に必要ない場合は、マルチdexをセットアップする必要はありません。

Firebaseヘルパーの16.0.5を使用したときにこの問題が発生しましたが、18.1.0に更新したときに修正できました。



-6

プロジェクトのルートパスgoogle-services.jsonに追加

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'
  }
apply plugin: 'com.google.gms.google-services'

誰ウル答えと、このコードにいくつかの情報を追加することを検討つもり助けをしません
アッシュ・クマール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.