我正在测试新的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
答案 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
,您还可以尝试以下操作:
Build
&gt; Clean Project
答案 4 :(得分:16)
我在Pre Lollipop设备中遇到了同样的问题。为了解决这个问题我做了如下。同时我在项目中使用multiDex。
1.在module:app
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)
答案 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)