web-dev-qa-db-ja.com

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

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

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
}

問題を解決するには?

122
WISHY

私は同じエラーがあり、私はこのリンクに記載されているように、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
123
johanvs

私も同じ問題に直面し、ついにAndroidスタジオでInstant Runを無効にすることでそれを解決しました。

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

80
Shylendra Madda

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

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

そして依存関係に挿入する:

compile 'com.Android.support:multidex:1.0.1'

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

<application 
    Android:name="Android.support.multidex.MultiDexApplication"
43
CodeArt

私は(YouTubeプレーヤープロジェクト)で同じ問題を抱えていましたが、以下の問題を解決しました。

  1. このコードをdefaultConfing内のbuild.gradle(module:app)に追加します。

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
    
  2. このコードをdependencies内のbuild.gradle(module:app)に追加します。

    dependencies {
        compile 'com.Android.support:multidex:1.0.1'
        .....
        .....
    }
    
  3. AndroidManifest.xmlapplication内を開きます。

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

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

    public class MyApp extends MultiDexApplication {
    .....
    

そして最後に、 Android Support Repository Extras in SDK Manager にダウンロードする必要があると思います。

36
Firas Hashash

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

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 

    }
}
21
SilverSky

multidexを有効にすることは良い解決策ではありません。なぜならmultidexはAndroidで別の使用法を持っているからです。 multidexとは何ですか

@Shylendra Maddaが言ったように解決策はインスタントランを無効にしています

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

firebaseライブラリやfirebaseothers などのライブラリがあるため、この問題の原因はインスタントランが有効になっているとき、Android Studioがmapsなどのライブラリを生成されたapkに入れないことであると思います。プレイサービスに存在し、プレイサービスはAndroidデバイスにインストールされているので、インスタントランが有効になっている場合はビルド時間を早くするために生成されたAPKにそれらを配置する必要はありません。

だからあなたはapkを抽出して別のデバイスにインストールするとあなたはこの例外が表示されます

14
Edalat Feizi

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

Proguardの規則を適用した場合は、ProGuardの規則に次の行を追加してください。

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

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

9
gunavant patel

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

この制限を回避するには、マルチデックス用にアプリを設定する必要があります

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

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

ただし、 、minSdkVersionが20以下に設定されている場合は、次のようにマルチインデックスサポートライブラリを使用する必要があります。

1 。次のように、モジュールレベルのbuild.gradleファイルを修正してマルチインデックスを有効にし、マルチインデックスライブラリを依存関係として追加します。

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

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

2 Applicationクラスをオーバーライドするかどうかに応じて、次のいずれかを実行します。

  • の場合は、Applicationクラスをオーバーライドしないで、マニフェストファイルを編集してタグにAndroid:nameを設定します。
    <application
        Android:name="Android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • の場合、Applicationクラスをオーバーライドする場合は、次のように(可能であれば)MultiDexApplicationを拡張するように変更します。
public class MyApplication extends MultiDexApplication { ... }
  • または を指定してApplicationクラスをオーバーライドしても基本クラスを変更できない場合は、attachBaseContext()メソッドをオーバーライドしてMultiDex.install(this)を呼び出してマルチインデックスを有効にできます。
public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
9
Sokmean Pon

App GradleでMultiDexを使用している場合は、アプリケーションクラスで extends application extends MultiDexApplication に変更します。それは間違いなく動作します

6
Suresh kumar

まず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>

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

5
Hirak JD

1: gradle enable multiDexEnabledに移動して、依存関係にマルチインデックスライブラリを追加します。

Android {
   ...
   defaultConfig {
      multiDexEnabled true
      ...
   }
}

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

2: Manifestファイルに移動して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"マニフェストファイルの内側のアプリケーション。 MyApplicationクラスを作成しなかったため、エラーが発生します。 MyApplicationクラスを作成するには、「application」クラスを拡張するか、単にクリックします。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]

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

4
Opriday

私は同じ問題を抱えていて、コードを追加するだけで解決しました 、あなたがこの問題に遭遇したなら、Firebaseを使用するために必要なすべてのステップをすでに完了しています。 Applicationを拡張するクラスを作成する必要があります (public class Application_CrashReportはApplicationを拡張します) そしてこのクラスを mainifest file に追加します。

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

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

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

: - 上記の手順に従うことを忘れないでください

3
Peter

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

解決するための手順

  1. Gradle-> dependencies - >(compile'c​​om.Android.support:multidex:1.0.1 ')でこれを依存関係に追加

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

  3. 実行してチェック

2
Sukhdeep Saini

ApplicationクラスをMultiDexApplicationではなくApplicationで拡張する必要があります。

1
Ali Akram

これはやってくる人たちには少し遅れますが、あなたの予防規則をチェックしてください!私はこれに多くの時間を浪費しました。あなたの予防措置の規則は重要な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.**
0
Keith Aylwin

20を超えるminsdkversionがある場合は、最新のFirebase Authバージョン、つまり.

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

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

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

0
SilverArrow

この問題は、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
Levon Petrosyan

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

 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
vicky khan

Xamarin.Formsを使用している場合は、チェックアウトすることをお勧めします 「com.google.firebase.provider.FirebaseInitProvider」クラスが見つかりませんでしたか? これはdexエラーの問題をキャプチャするためです起動時にgoogle firebaseを使用します(現時点では未解決)。

短期的には縮小なしに戻し、R8がより安定するまでProGuardを使用する予定です。

0
Devology Ltd