无法获取提供者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
重新安装了这些资源