我按照 FCM 网站上的步骤在应用程序上实施了新的 FCM。
现在,我正在尝试运行该应用程序,但是当我尝试时,该应用程序崩溃并显示此错误:
05-30 12:28:45.788 3002-3002/es.in2.otr.app.im E/AndroidRuntime: FATAL EXCEPTION: main
Process: es.in2.otr.app.im, PID: 3002
java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.res.Resources.getResourcePackageName(int)' on a null object reference
at android.app.ActivityThread.installProvider(ActivityThread.java:6765)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6357)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6297)
at android.app.ActivityThread.access$1800(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1860)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.res.Resources.getResourcePackageName(int)' on a null object reference
at com.google.android.gms.common.internal.zzah.<init>(Unknown Source)
at com.google.firebase.FirebaseOptions.fromResource(Unknown Source)
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1789)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1764)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:6762)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6357)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6297)
at android.app.ActivityThread.access$1800(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1860)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
如我所见,thre 方法试图获取一些值,其中为 null。
我搜索了解决方案,并在SO中找到了这篇文章。 -->无法获取提供程序com.google.firebase.provider.FirebaseInitProvider
作为解决方案,他们说将 applicationId 添加到 gradle 构建项目文件中,但我得到了它:
defaultConfig {
applicationId "es.in2.otr.app.im"
minSdkVersion 16
targetSdkVersion 23
multiDexEnabled true
testApplicationId "es.in2.otr.app.im.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
并且仍然崩溃。
这个问题有没有办法或解决方案?
我遇到了同样的问题。添加应用程序ID后,我注意到我的设备上安装了2个应用程序。我认为它以某种方式更改了应用程序的包名称,导致设备了解这是两个不同的应用程序。
所以我卸载了两个版本,然后它起作用了。
ps:命令行无法正常启动应用程序。它说: "正在启动应用程序...启动成功",但该应用程序从未启动,我必须手动打开它
编辑:刚刚发现我输入了一个错误的应用程序ID,现在它可以正常工作
行compile 'com.android.support:multidex:1.0.1'
添加到依赖项中(或者如果不需要,只需删除multiDexEnabled true
)
将此属性添加到清单中的应用程序标记:
android:name="android.support.multidex.MultiDexApplication"
如果您已经在 Android 清单中定义了自定义应用程序类,请从 MultiDexApplication 而不是应用程序扩展它
这对我有用!