공급자 com.google.firebase.provider.FirebaseInitProvider를 가져올 수 없습니다
새 충돌 도구 ( 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
1.
applicationId 를 애플리케이션의 build.gradle에 추가하십시오 .
android {
...
defaultConfig {
applicationId "com.example.my.app"
...
}
}
그리고 Clean Project-> Build or Rebuild Project보다
2. minSdkVersion <= 20 인 경우 ( https://developer.android.com/studio/build/multidex )
멀티 덱스를 올바르게 사용하십시오.
응용 프로그램의 build.gradle
android {
...
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
...
}
manifest.xml
<application
...
android:name="android.support.multidex.MultiDexApplication" >
...
삼.
사용자 정의 응용 프로그램 클래스를 사용하는 경우
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" >
...
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
}
}
app / 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"
...
/>
도움이 되길 바랍니다.
같은 문제가 있지만 이미 applicationId
설정되어 build.gradle
있는 경우 다음을 시도 할 수도 있습니다.
- Android Studio에서 :
Build
>Clean Project
- 다른 IDE에서 : Clean, Rebuild 등 무엇이든 ...
Pre Lollipop 기기에서도 같은 문제가있었습니다. 이를 해결하기 위해 다음과 같이했습니다. 그동안 프로젝트에서 multiDex를 사용하고있었습니다.
1. 모듈의 build.gradle에 이것을 추가하십시오 : 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"
이것은 나를 위해 작동합니다. 희망이 도움이되기를 바랍니다 :)
당신은 확신해야
이 줄을 매니페스트에 추가하려면
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>
Add this to your module-level build.gradle :
android {
defaultConfig {
....
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
.........
}
If you override Application
class then extend it from MultiDexApplication
:
YourApplicationClass extends MultiDexApplication
If you cant extend it from MultiDexApplication
class then override attachBaseContext()
method as following :
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
And dont run anything before MultiDex.install(this)
is executed.
If you dont override the Application
class simply edit your manifest file as following :
<?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>
Don't include the whole play services library but use the one that you need.Replace the line in your build.gradle:
compile 'com.google.android.gms:play-services:9.6.1'
with the appropriate one from Google Play Services APIs,like for example:
compile 'com.google.android.gms:play-services-gcm:9.6.1'
This should works:
Step1:
defaultConfig {
applicationId "service.ingreens.com.gpsautoon"
minSdkVersion 17
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Step 2:
compile 'com.android.support:multidex:1.0.1'
Step 3: Take another class
public class MyApplication extends MultiDexApplication {
}
Step 4: Add this line on manifest
<application
android:name="android.support.multidex.MultiDexApplication">
</application>
In my case, the problem was solved by adding this line to the module build.gradle:
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
In my case the problem happened after we migrated to AndroidX. For some reason, app was calling MultiDex.install() with reflection:
final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
final Method method = clazz.getDeclaredMethod("install", Context.class);
method.invoke(null, this);
I changed package from android.support.multidex.MultiDex
to androidx.multidex.MultiDex
. It worked.
Instead of manually adding the package name on the build.gradle
, you can do it this way:
first add this line at the beggining
import java.util.regex.Pattern
Then add this on the defaultConfig
android {
...
defaultConfig {
...
applicationId = doExtractStringFromManifest("package")
...
}
...
}
And finally add the doExtractStringFromManifest method
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)
}
As there are a lot of Cordova comments on the answer, if you are working with Cordova, you shouldn't really edit the build.gradle
yourself, it has a comment at the beggining that say
// GENERATED FILE! DO NOT EDIT!
So, if you are using a Cordova, the best thing you can do is to update to cordova-android 5.1.0 or greater where this changes are already present.
Mine was because Firebase SDK in Gradle file was set to a wrong number version.
I removed the Firebase debs from Gradle and re-installed them again using Firebase Assistant
Go to android studio setting (by pressing Ctrl+Alt+S
in windows), search for Instant Run
and uncheck Enable Instant Run
.
By disabling Instant Run
and running your application again, problem will be resolved.
For react native app, the error was java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider"
It was only getting for devices with Android Version < ~4.4
Solved it by just replacing Application
in MainApplication.java
with MultiDexApplication
NOTE: import android.support.multidex.MultiDexApplication;
I added the following code in proguard file.
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
and it worked in my case.
'Programing' 카테고리의 다른 글
Haml에서 조건이 참인 경우 클래스 추가 (0) | 2020.06.10 |
---|---|
git-diff에서 패치 호환 출력을 얻을 수 있습니까? (0) | 2020.06.10 |
iOS 앱에서 문서 폴더 안에 폴더 만들기 (0) | 2020.06.10 |
COUNTIF 집계 함수에 해당하는 SQL Server (0) | 2020.06.10 |
ACID 및 데이터베이스 트랜잭션은 어떻게 작동합니까? (0) | 2020.06.10 |