我在应用程序中使用Google Firebase已经有一段时间了,我做了一些维护和更新,但我一直得到:
无法获取提供程序com.google.firebase.provider.FirebaseInitProvider
每当我启动应用程序时,就会发生这种情况。自从我开始使用FCM以来,我已经尝试启用MultiDex
,并且我的applicationId
已经设置好了。我只是不知道它可能是什么。
任何帮助都将不胜感激。
build.gradle(应用程序):
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.vivatrucking.drivershub"
multiDexEnabled true
minSdkVersion 15
targetSdkVersion 27
versionCode 2
versionName "1.0.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
// android
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.volley:volley:1.0.0'
// google
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-messaging:15.0.2'
//external libs
implementation 'com.github.devlight:infinitecycleviewpager:1.0.2'
}
apply plugin: 'com.google.gms.google-services'
完整堆栈跟踪:
05-08 15:03:31.400 30530-30530/?E/AndroidRuntime:致命异常:main流程:com.vivartrucking.drivershub,PID:30530java.lang.RuntimeException:无法获取提供程序com.google.firebase.provider.FirebaseInitProvider:android.content.res.Resources$NotFoundException:无法找到资源ID#0x7f0c002a在android.app.ActivityThread.installProvider上(ActivityThreads.java:6575)位于android.app.ActivityThread.installContentProviders(ActivityThreads.java:6127)在android.app.ActivityThread.handleBindApplication(ActivityThreads.java:6037)在android.app.ActivityThread.-wrap1(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1764)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThreads.java:6938)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:1374)由以下原因引起:android.content.res.Resources$NotFoundException:找不到资源ID#0x7f0c002a位于android.content.res.ResourcesImpl.getResourcePackageName(ResourcesImpl.java:253)位于android.content.res.Resources.getResourcePackageName(Resources.java:1963)网址:com.google.android.gms.common.internal.StringResourceValueReader。(未知来源:16)网址:com.google.firebase.FirebaseOptions.fromResource(未知来源:2)网址:com.google.firebase.FirebaseApp.initializeApp(未知来源:19)网址:com.google.firebase.provider.FirebaseInitProvider.onCreate(未知来源:4)在android.ContentProvider.attachInfo(ContentProvider.java:1925)在android.ContentProvider.attachInfo(ContentProvider.java:1900)网址:com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知来源:23)在android.app.ActivityThread.installProvider(ActivityThreads.java:6572)位于android.app.ActivityThread.installContentProviders(ActivityThreads.java:6127)在android.app.ActivityThread.handleBindApplication(ActivityThreads.java:6037)在android.app.ActivityThread.-wrap1(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1764)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThreads.java:6938)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:1374)
firebase common在FirebaseApp.initializeApp(Context)
中查找一个特定的字符串资源"google_app_id",在我的情况下,它似乎不存在。
(com.google.firebase:firebase-common@@16.0.4:301)
StringResourceValueReader reader = new StringResourceValueReader(context);
String applicationId = reader.getString("google_app_id");
我想这应该是由google-services.json填充的。目前还不确定解决方案。
我认为我的解决方案对再次遇到这个问题的人没有任何帮助,但我只想说明我做了什么来消除错误。
我已经实现了我自己的ShakeEventListener,但不知何故它与我的应用程序发生了冲突。
如果你遇到这个问题,那么可能值得参考@Gazoou发布的答案。答案就在这里