无法获得提供商com.google.firebase.provider.FirebaseInitProvider

时间:2016-05-19 00:31:02

标签: firebase

我正在测试新的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

20 个答案:

答案 0 :(得分:115)

<强> 1

applicationId 添加到应用程序的build.gradle:

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

而不是清洁项目 - &gt;构建重建项目

2。如果你的minSdkVersion&lt; = 20(https://developer.android.com/studio/build/multidex

正确使用Multidex。

application&#39; 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 :(得分:89)

我在使用SDK&lt;的设备中遇到了同样的问题。 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 

    }
}

应用程序/的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'

    }
...

答案 2 :(得分:72)

接受的答案并没有解决我的问题。

如果您使用的是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 :(得分:31)

如果您遇到同样的问题,但已在applicationId中设置了build.gradle,您还可以尝试以下操作:

    Android Studio中的
  • Build&gt; Clean Project
  • 在其他IDE中:清洁,重建,无论......

答案 4 :(得分:16)

我在Pre Lollipop设备中遇到了同样的问题。为了解决这个问题我做了如下。同时我在项目中使用multiDex。

1.在module:app

中为build.gradle添加此项
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.在清单文件中

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

这对我有用。希望这也有助于你:)

答案 5 :(得分:16)

你应该确定

在清单上添加此行

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>

答案 6 :(得分:6)

不要包含整个游戏服务库,而是使用您需要的库。在 build.gradle 中放置一行:

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

使用Google Play Services APIs中的相应内容,例如:

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

答案 7 :(得分:6)

将其添加到模块级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>

答案 8 :(得分: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>

答案 9 :(得分:2)

在我的情况下,通过将此行添加到模块build.gradle:

来解决问题

//在底部添加

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

Source

答案 10 :(得分: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或更高版本。

答案 11 :(得分:0)

我是因为Gradle文件中的Firebase SDK设置为错误的数字版本。

我从Gradle中移除了Firebase debs并使用Firebase Assistant

重新安装它们

答案 12 :(得分:0)

转到android studio设置(在Windows中按Ctrl+Alt+S,搜索Instant Run,然后取消选中Enable Instant Run

通过禁用Instant Run并再次运行您的应用程序,问题将得到解决。

答案 13 :(得分:0)

对于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

的设备

通过将Application中的MainApplication.java替换为MultiDexApplication来解决了该问题

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

答案 14 :(得分:0)

就我而言,问题是在我们迁移到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。奏效了。

答案 15 :(得分:0)

我在proguard文件中添加了以下代码。

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

在我的情况下有效。

答案 16 :(得分:0)

就我而言,我忘记在build gradle中添加(或意外删除)firebase内核

link: any = decodeURIComponent('http%3A%2F%2Flocalhost%3F%3Dtest');
// will be decoded as http://localhost?=test

答案 17 :(得分:0)

我仅在API低于21的设备上遇到此错误。就我而言,我不得不处理一个项目,其中multiDexEnabled中的build.gradle选项已设置为{{1 }}。我从APK检查了dex文件,并且引用的方法号小于64k,因此项目不必是multidex项,因此我将true设置为multiDexEnabled。这个解决方案对我有用。

答案 18 :(得分:0)

我遇到了同样的问题,并通过使用项目级别的crashlytics gradle版本2.1.1进行了修复

classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.1'

答案 19 :(得分:0)

如果您启用“multidex”,则问题将得到解决,但此问题完全与 Android Studio 缓存有关。所以在添加“multidex”清除缓存之前希望问题能得到解决。

在清理缓存后删除 .gradle.idea.build 文件。

Android studio > File > Invalidate Caches / Restart

enter image description here