web-dev-qa-db-ja.com

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

私は新しいクラッシュツールをテストしています: 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
143
Macarse

1.

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

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

そしてClean Project - > BuildまたはRebuild Projectより


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.

カスタムのApplicationクラスを使用する場合

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" >
    ...
115
norbDEV

私はSDK <22のデバイスでも同じ問題を抱えていましたが、私にとっての理由はMultiDexなので、MultiDex.installattachBaseContextメソッドになければなりません。

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'

    }
...
88
luizMello

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

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"
      ...
      />

それが役に立てば幸い。

71
Ye Min Htut

同じ問題が発生しても、すでにapplicationIdbuild.gradleに設定されている場合は、次の方法も試してください。

  • android Studioの場合:Build> Clean Project
  • 他のIDEの場合:クリーン、リビルド、その他.
31
Barthy

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

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

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

この依存関係を追加

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

3.メインアプリケーションで

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.マニフェストファイル内

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

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

16
thilina Kj

あなたは確信するべきです

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

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>
16
Juan Salamanca

Play servicesライブラリ全体を含めるのではなく、必要なライブラリを使用してください。 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'
6
Ayan

これをあなたのモジュールレベルの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>
6
Nurlan Sofiyev

このように変更を加える

ビルド中(アプリ)::

  defaultConfig {
    multiDexEnabled true
  }

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

マニフェストでは::

 <application
    Android:name=".BaseApplication"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name">

BaseApplicationの場合::

public class BaseApplication extends Application{
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
}
4
garry

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

ステップ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: / manifestにこの行を追加

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

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

//このAT下に追加

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

出典

2
Borja

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

私はGradleからFirebaseのdebを取り除き、Firebase Assistantを使ってそれらを再インストールしました。

0
Suhaib

私の場合、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
cgr

手動で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
jcesarmobile

React Nativeアプリの場合、エラーは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のデバイスでのみ取得されていました

MainApplication.JavaApplicationMultiDexApplicationに置き換えるだけで解決しました

注:import Android.support.multidex.MultiDexApplication;

0
Malith

(WindowsでCtrl+Alt+Sを押して)Androidのスタジオ設定に移動し、Instant Runを検索してEnable Instant Runのチェックを外します。

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

0
VSB