プロバイダーcom.google.firebase.provider.FirebaseInitProviderを取得できません


160

新しいCrashツールをテストしています:https : //firebase.google.com/docs/crash/

手順を完了すると、アプリが起動し、次のようにクラッシュします。

05-18 17:28:18.870 28743 28743 E AndroidRuntime: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5156)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.-wrap1(ActivityThread.java)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-18 17:28:18.870 28743 28743 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Incorrect provider authority in manifest. Most likely due to a missing applicationId variable in application's build.gradle.
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
05-18 17:28:18.870 28743 28743 E AndroidRuntime:    ... 10 more

1
build.gradleにapplicationIDがありますか?
Ian Barber

1
@IanBarber:わあ、build.gradleの編集中に削除しました。私の悪い。
Macarse 2016年

stackoverflow.com/a/38224316/4663544だけが私のために働きました
Jeba Ra

8
試してみてくださいAndroid studio> Build>Clean Project
Ujjwal Singhの

アプリのgraddle defaultConfigでmultiDexEnabledがtrueの場合、アプリケーションクラスをMultiDexApplicationに拡張することで修正しました。
ハーマン

回答:


145

1。

applicationIdをアプリケーションのbuild.gradleに追加します

android {
    ...
    defaultConfig {
        applicationId "com.example.my.app"
        ...
    }
}

そして、プロジェクトのクリーンアップ->プロジェクトのビルドまたはビルドより


2. minSdkVersionが20以下の場合(https://developer.android.com/studio/build/multidex

Multidexを正しく使用してください。

アプリケーションのbuild.gradle

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

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

manifest.xml

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

3。

カスタムアプリケーションクラスを使用する場合

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

manifest.xml

<application
    ...
    android:name="com.example.my.app.MyApplication" >
    ...

1
私は同じエラーを受け取りました、そしてそれは解決策によって修正されました。理由はわかりませんが、うまくいきます。
藤五郎

これは私の日を救った。CordovaアプリをAndroidデバイスで実行しようとしたときにエラーが発生しました。
manosim

1
build.gradleに同じ問題とapplicationIdがあります。その場合、私は何ができますか?
マリアメルセデスウィスアルバレス

@ekonstantinidisコルドバアプリの修正方法を教えてください。build.gradleが生成されたときに正しく追加される構成に追加できますか?(中cordova platform add android)?
ザック

@ザック私はそうは思いません。走った後に追加しましたcordova platform add android。コルドバが更新されたら修正されると思いますか?Ps。Firebaseをまったく使用していません。
manosim '26年

93

SDKが22未満のデバイスでも同じ問題が発生しましたが、私にとっての理由はMultiDexであり、メソッドにあるMultiDex.install必要がありますattachBaseContext

MultiDexを使用している場合は、次のことを試してください。

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 

    }
}

app / build.gradle:

android {

    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

....
}

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

        compile 'com.android.support:appcompat-v7:24.2.1'
        ...
        compile 'com.google.firebase:firebase-messaging:9.6.1'
        compile 'com.google.android.gms:play-services:9.6.1'
        compile 'com.android.support:multidex:1.0.1'

    }
...

4
下記の回答を参照、それは動作しますが、それはMultiDexApplicationと呼ばれていますが代わりに一つの関数をオーバーライドすることを行うための特別なクラスだとstackoverflow.com/questions/37312103/...
GregoryK

うん、それはまた、私はいつものonCreate()メソッドのおかげで男の内側MultiDex.install(これを)書いて私のために働いた
ダラ

私の場合、私はコンパイル「com.android.support:multidex:1.0.1」を最新の利用可能なバージョンに更新しました
Aleksey Timoshchenko '27

これは受け入れられる答えになるはずです。私は他のすべての答えを試し、GoogleとFirebaseのガイドに従っていましたが、これは正しい答えです、あなたは素晴らしい人です!
ブルーウェア

ありがとう、どうやってそれを見つけられますか?しかし、私の質問は、コードラインアプリが65000以下である理由です。なぜmultudexを使用する必要があるのか​​、なぜsdk> 22で機能し、sdk <22で機能しないのですか
milad salimi

75

受け入れられた答えは私の問題を解決しませんでした。

Multidexを使用している場合、アプリケーションはのMultiDexApplication代わりに拡張する必要がありApplicationます。

MyApplication.java

public class MyApplication extends MultiDexApplication{
     ...
}

AndroidManifest.xml

<application
      android:name="your.package.name.MyApplication"
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      ...
      />

それが役に立てば幸い。


完璧に働きました!ありがとうございました:)
ソリューションスピリット

3
これらのことをどうやって知っていますか?誰があなたに言ったのですか???Android Studio 3にアップデートして「デバッグ」アプリをインストールしたところ、この問題が発生し始めました。「リリース」バージョンはうまくいきました。今、あなたのソリューションでは、「デバッグ」バージョンも機能します。私はあなたのような人々が存在するのでとても幸せです!!
トン

それは完璧な答えです
androidXP 2018

これらのすべての回答において、問題を解決するためにmultidexを追加することが実際に何を行うかを実際に説明しているものはありません(そのような問題に直面するときに複雑にランダムに行うこと)
Aditya Anand

36

同じ問題が発生するが、既にでapplicationId設定されているbuild.gradle場合は、次のことも試すことができます。

  • Android Studioの場合:Build>Clean Project
  • 他のIDE:クリーン、リビルド、何でも...

3
それでも問題が解決しない場合は、ビルドディレクトリを削除して再試行してください。それをするまで私は行き詰まりました:)
ローレンス・モロニー

buildディレクトリを削除するだけでうまくいきました。リポジトリからの最後のプルでめちゃくちゃになってしまったようです。
Sevastyan Savanyuk 2017

17

Pre Lollipopデバイスでも同じ問題がありました。それを解決するために私は次のようにしました。その間、私はプロジェクトでmultiDexを使用していました。

1.これをbuild.gradleのモジュールに追加:app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2.この依存関係を追加する

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

3.次にMainApplicationで

public class MainApplication extends MultiDexApplication {

private static MainApplication mainApplication;

@Override
public void onCreate() {
    super.onCreate();
    mainApplication = this;
}

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


public static synchronized MainApplication getInstance() {
    return mainApplication;
}
}

4. manifestsファイル

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

これは私にとってはうまくいきます。これがあなたにも役立つことを願っています:)


4
multidexを1つだけ有効にするために、3つのジョブ(MultiDexApplicationの拡張、attacheBaseContextの実装、およびメニフェストファイルの変更)をすべて行うべきではありません。developer.android.com/studio/build/multidex.html
Hossein Shahdoost

minSdkが21以上の場合、ドキュメントではデフォルトですでに有効になっていると記載されているため、これを行う必要はありません。それでも、minSdk = 21でこの問題が発生します。これに対する解決策はありますか?
Aditya Anand

15

きっと

この行をマニフェストに追加するには

https://developer.android.com/studio/run/index.html#instant-run

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

multiDexEnabled trueと共に私にも働きました
ashishdhiman2007

7

全体のプレイ・サービスのライブラリが含まれていますが、あなたのことでneed.Replaceライン1を使用しないでくださいbuild.gradleを

compile 'com.google.android.gms:play-services:9.6.1'

から適切なものを使って たとえば、Google Play Services API使用します

compile 'com.google.android.gms:play-services-gcm:9.6.1'

7

これをモジュールレベルのbuild.gradleに追加します。

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

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

Applicationクラスをオーバーライドする場合は、以下から拡張しますMultiDexApplication

YourApplicationClass extends MultiDexApplication

MultiDexApplicationクラスから拡張できない場合はattachBaseContext()、次のようにメソッドをオーバーライドします。

protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }

そして、前に何も実行しないでください MultiDex.install(this)実行される実行しないでください。

Applicationクラスをオーバーライドしない場合は、マニフェストファイルを次のように編集するだけです。

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

3

これはうまくいくはずです:

ステップ1:

defaultConfig {
    applicationId "service.ingreens.com.gpsautoon"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

ステップ2:

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

ステップ3:別のクラスを受講する

public class MyApplication extends MultiDexApplication {
}

手順4:この行をマニフェストに追加する

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

2

私の場合、問題はモジュールbuild.gradleに次の行を追加することで解決されました。

//これを一番下に追加します

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

ソース


「IDが「com.google.gms.play-services」のプラグインが見つかりません」というメッセージが表示されました。
kaleemsagard

@kaleemsagardがこれをyoutプロジェクトに追加build.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

私の場合、問題はAndroidXへの移行後に発生しました。何らかの理由で、アプリはリフレクションを使用してMultiDex.install()を呼び出していました:

    final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
    final Method method = clazz.getDeclaredMethod("install", Context.class);
    method.invoke(null, this);

パッケージをからに変更しandroid.support.multidex.MultiDexましたandroidx.multidex.MultiDex。出来た。


0

にパッケージ名を手動で追加する代わりにbuild.gradle、次の方法で行うことができます。

最初にこの行を最初に追加します

import java.util.regex.Pattern

次に、これをdefaultConfigに追加します

android {
    ...
    defaultConfig {
        ...
        applicationId = doExtractStringFromManifest("package")
        ...
    }
    ...
}

そして最後にdoExtractStringFromManifestメソッドを追加します

def doExtractStringFromManifest(name) {
     def manifestFile = file(android.sourceSets.main.manifest.srcFile)
     def pattern = Pattern.compile(name + "=\"(\\S+)\"")
     def matcher = pattern.matcher(manifestFile.getText())
     matcher.find()
     return matcher.group(1)
}

答えにはCordovaのコメントがたくさんあるので、Cordovaを使用している場合は、実際にbuild.gradle自分で編集するべきではありません。

//生成されたファイル!編集しないでください!

したがって、Cordovaを使用している場合、最善の方法は、この変更がすでに存在するCordova-android 5.1.0以降に更新することです。


0

私のものは、GradleファイルのFirebase SDKが誤った番号バージョンに設定されていたためです。

GradleからFirebase debsを削除し、次を使用してそれらを再インストールしました Firebase Assistant


0

Ctrl+Alt+Swindowsで押すことにより)android studio設定に移動し、検索しますInstant Runてチェックを外しEnable Instant Runます。

Instant Runアプリケーションを無効にして再度実行することにより、問題は解決されます。


0

反応ネイティブアプリの場合、エラーは java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" Androidバージョン<〜4.4のデバイスでのみ発生していました

交換するだけで解決しましApplicationMainApplication.javaましたMultiDexApplication

注意: import android.support.multidex.MultiDexApplication;


0

次のコードをproguardファイルに追加しました。

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

そしてそれは私の場合にはうまくいきました。


0

私の場合、ビルドgradleにfirebaseコアを追加する(または誤って削除する)ことを忘れました

implementation 'com.google.firebase:firebase-core:xx.x.x'

1
3か月が経過しましたが、現在は廃止されています。これを追加しないでください!出典= firebase.google.com/support/release-notes/android(必須:ありがとうGoogle)
Aditya Anand

0

このエラーは、APIが21未満のデバイスでのみ発生します。私の場合、multiDexEnabledオプションbuild.gradleが既にに設定されているプロジェクトで作業する必要がありましたtrue。APKからdexファイルをチェックし、参照されるメソッドの数が64k未満だったので、プロジェクトはmultidexである必要はないため、に設定multiDexEnabledしましたfalse。この解決策は私にとってうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.