无法获取提供者com.google.firebase.provider.FirebaseInitProvider

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

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

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

我在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 } } 

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

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

如果你使用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" ... /> 

希望能帮助到你。

如果你遇到同样的问题,但是已经在build.gradle设置了build.gradle ,你也可以尝试下面的方法:

  • 在Android Studio中: Build > Clean Project
  • 在其他IDE:清洁,重build,无论…

你应该确定

在清单中添加这一行

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> 

Pre棒棒糖设备中有同样的问题。 为了解决,我做了如下。 同时我在项目中使用multiDex。

1.添加这个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" 

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

不要包括整个播放服务库,而是使用你需要的。在你的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' 

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

这应该工作:

步骤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' 

第三步:再上课

 public class MyApplication extends MultiDexApplication { } 

第4步:在清单中添加此行

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

在我的情况下,通过添加此行到模块build.gradle解决了问题:

//将其添加到底部

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

资源

做这样的改变

在构build(应用程序)::

  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); } } 

而不是在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或者更高版本,这个改变已经存在了。

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

我从Gradle中移除了Firebase资源库,并使用Firebase Assistant重新安装了这些资源