“com.google.firebase.provider.FirebaseInitProvider”클래스를 찾지 못했습니까?
앱 시작시 아래 예외가 발생합니다.
java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList[[zip file "/data/app/com.vfirst.ifbagro-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.vfirst.ifbagro-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4596)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4536)
at android.app.ActivityThread.access$1300(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
다음은 앱 레벨 build.gradle입니다.
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.vfirst.ifbagro"
minSdkVersion 17
targetSdkVersion 24
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.google.android.gms:play-services:9.4.0'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
이것은 내 응용 프로그램 수준의 build.gradle입니다.
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.google.gms:google-services:3.0.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
문제를 해결하는 방법?
나는 같은 오류가 있었고이 링크에 설명 된 것처럼 MultiDex로 해결했습니다 : https://developer.android.com/studio/build/multidex.html
때로는 MultiDex를 활성화하는 것만으로는 충분하지 않습니다.
시작 하는 동안 필요한 클래스가 기본 DEX 파일에 제공되지 않으면 java.lang.NoClassDefFoundError 오류로 앱이 충돌합니다 . https://developer.android.com/studio/build/multidex#keep
시작하는 동안 FirebaseInitProvider 가 필요합니다.
따라서 기본 DEX 파일에서 필요에 따라 FirebaseInitProvider 를 수동으로 지정해야 합니다.
build.gradle 파일
android {
buildTypes {
release {
multiDexKeepFile file('multidex-config.txt')
...
}
}
}
multidex-config.txt (build.gradle 파일과 동일한 디렉토리에 있음)
com/google/firebase/provider/FirebaseInitProvider.class
나도 같은 문제에 직면하여 마침내 Instant Run안드로이드 스튜디오에서 비활성화 하여 해결했습니다 .
설정 → 빌드, 실행, 배포 → 즉시 실행 및 즉시 실행 사용을 선택 취소하십시오.
build.gradle (Module : app) 파일에서 아래 코드를 defaultConfig에 삽입하십시오.
defaultConfig {
applicationId "com.***.****"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
}
의존성에 삽입하십시오 :
compile 'com.android.support:multidex:1.0.1'
그런 다음 매니페스트 코드를 추가하십시오.
<application
android:name="android.support.multidex.MultiDexApplication"
내 (YouTube 플레이어 프로젝트)에서 동일한 문제가 발생했으며 다음과 같은 문제가 해결되었습니다.
이 코드를
build.gradle(module : app) 안에 추가하십시오defaultConfing.defaultConfig { .... .... multiDexEnabled = true }이 코드를
build.gradle(module : app) 안에 추가하십시오dependencies.dependencies { compile 'com.android.support:multidex:1.0.1' ..... ..... }개방
AndroidManifest.xml및 내application:<application android:name="android.support.multidex.MultiDexApplication" ..... ..... </application>또는 App 클래스가있는 경우 다음과 같이 MultiDexApplication에서 확장하십시오.
public class MyApp extends MultiDexApplication { .....
마지막으로 Extras in SDK Manager 에서 Android Support Repository를 다운로드 해야한다고 생각합니다 .
애플리케이션 클래스에서 다음 메소드를 대체하십시오.
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
}
}
안드로이드에서 다른 사용법이 multidex있기 때문에 활성화 는 좋은 해결책 이 아닙니다.multidex
@Shylendra Madda가 말한 것처럼 솔루션이 즉시 실행을 비활성화하고 있습니다.
설정 → 빌드, 실행, 배포 → 즉시 실행 및 즉시 실행 사용을 선택 취소하십시오.
나는 즉시 실행이, 안드로이드 스튜디오와 같은 라이브러리를 넣지 마십시오 사용하는 경우이 문제의 이유는 생각 firebase프로젝트 빌드 시간을 단축하기 위해 생성 APK에 있기 때문에 firebase라이브러리와 같은 다른 라이브러리 maps와 다른 사람이 설치되어 플레이 서비스 및 플레이 서비스에 존재입니다 Android 기기에서 즉시 실행이 활성화 된 경우 빌드 시간을 단축하기 위해 생성 된 APK에 넣을 필요가 없습니다.
따라서 apk를 추출하여 다른 장치에 설치하면이 예외가 표시됩니다
앱과 앱이 참조하는 라이브러리가 65,536 개의 메소드를 초과하면 앱이 Android 빌드 아키텍처의 한계에 도달했음을 나타내는 빌드 오류가 발생합니다.
minSdkVersion이 21 이상으로 설정된 경우 다음과 같이 모듈 수준 build.gradle 파일에서 multiDexEnabled를 true로 설정하기 만하면됩니다.
android { defaultConfig { ... minSdkVersion 21 multiDexEnabled true } ... }
그러나 minSdkVersion이 20 이하로 설정된 경우 다음과 같이 멀티 덱스 지원 라이브러리를 사용해야합니다.
1. 모듈 수준 build.gradle 파일을 수정하여 멀티 덱스를 활성화하고 다음과 같이 멀티 덱스 라이브러리를 종속성으로 추가하십시오.
android { defaultConfig { ... minSdkVersion 15 multiDexEnabled true } ... } dependencies { implementation 'com.android.support:multidex:1.0.3' }2. Application 클래스를 재정의하는지 여부에 따라 다음 중 하나를 수행하십시오.
- 경우 응용 프로그램 클래스를 오버라이드 (override)하지 않는, 편집 세트에 매니페스트 파일은 안드로이드 : 이름을 태그에 다음과 같이 :
<application android:name="android.support.multidex.MultiDexApplication" > ... </application>
- 경우 응용 프로그램 클래스를 오버라이드 (override) 할, 다음과 같이이 MultiDexApplication을 (가능한 경우) 연장 변경 :
public class MyApplication extends MultiDexApplication { ... }
- 또는 Application 클래스를 재정의하지만 기본 클래스를 변경할 수없는 경우 대신 attachBaseContext () 메서드를 재정의하고 MultiDex.install (this)를 호출하여 멀티 덱스를 활성화 할 수 있습니다.
public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
아래 솔루션을 찾은 모든 솔루션을 시도한 후에도 동일한 문제에 직면했습니다.
프로 가드 규칙을 적용한 경우 ProGuard 규칙에 아래 행을 추가하십시오.
-keep class com.google.firebase.provider.FirebaseInitProvider
그리고 내 문제를 해결합니다.
1 : gradle enable multiDexEnabled로 이동하여 종속 항목에 멀티 덱스 라이브러리를 추가하십시오.
android {
...
defaultConfig {
multiDexEnabled true
...
}
}
dependencies {
// add dependency
implementation 'com.android.support:multidex:1.0.1'
}
2 : Manifest 파일로 이동하여 android : name = ". MyApplication"을 작성하십시오 (클래스 이름 (MyApplication)은 선택 사항입니다).
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
.
.
.
.
.
</application>
3: As you wrote android:name=".MyApplication" Inside Application at Manifest file. it will give you an error because you didn't create MyApplication class. Create MyApplication Class extend it by "application" class or Simply click on.MyApplication, a small red balloon appear on the left side of a syntax click on it, you will see (create MyApplication class) in the menu, click on it and Include below Method Inside that class.
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
If you want to get more information then Click on this Link:[https://developer.android.com/studio/build/multidex.html]
Hopefully, It works for you.
If you are using MultiDex in your App Gradle then change extends application to extends MultiDexApplication in your application class. It will defiantly work
First add the following into build.gradle(Module:app)---->
defaultConfig{
..
multiDexEnabled true
..
}
Then in same file add the following
dependencies{
...
compile 'com.android.support:multidex:1.0.1'
...
}
Then in AndroidManifest.xml write the following
<application
android:name="android.support.multidex.MultiDexApplication"
.....
.....
</application>
That's it. It will definitely work
I had the same issue and solved just add a piece of code, If you are getting this issue means you had already completed all the steps that need to use Firebase. You just need to create a class that extends the Application (public class Application_CrashReport extends Application ) and add this class in mainifest file and In that class just override the below method
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
}
and add MultiDex.install(this); in that method means
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Note :- Don't forget to follow above steps
This is due to MultiDex.
Steps to solve:
In gradle->dependencies->(compile'com.android.support:multidex:1.0.1') Add this in dependencies
In your project application class extends MultiDexApplication like this (public class MyApplication extends MultiDexApplication)
Run and check
This is a bit late for those coming in, but check your proguard rules! I wasted a lot of time on this. Your proguard rules could be changing the names to important firebase files. This really only proves a problem in production and instant run :)
proguard-rules.pro
-keep class com.google.firebase.** { *; }
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**
You should extend your Application class with MultiDexApplication instead of Application.
This issue occurred when I switched to Android Studio 3.4 with Android Gradle plugin 3.4.0. which works with the R8 compiler.
The Android Gradle plugin includes additional predefined ProGuard rules files, but it is recommended that you use proguard-android-optimize.txt. More info here.
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
// List additional ProGuard rules for the given build type here. By default,
// Android Studio creates and includes an empty rules file for you (located
// at the root directory of each module).
'proguard-rules.pro'
}
}
I was facing the same problem and i solved this issue by changing the fireabseStorage version the same as the Firebase database version
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-storage:17.0.0'
to
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'
If you have > 20 minsdkversion, you need to use the latest Firebase Auth version i.e.
implementation 'com.google.firebase:firebase-auth:18.1.0'
and no need to setup multi-dex if you don't actually need it.
I encountered this issue when I've used 16.0.5 from the Firebase helper but was able to fix it when I've updated to 18.1.0.
If you're using Xamarin.Forms you might want to check out Didn't find class "com.google.firebase.provider.FirebaseInitProvider"? as this captures the issue with the dex error with google firebase on startup (unresolved at this time).
I've reverted to using no shrinking in the short-term and plan to use ProGuard until R8 is more stable.
add in project root path google-services.json
dependencies {
compile 'com.android.support:support-v4:25.0.1'
**compile 'com.google.firebase:firebase-ads:9.0.2'**
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.android.support:multidex:1.0.1'
}
apply plugin: 'com.google.gms.google-services'
'IT' 카테고리의 다른 글
| 문자열을 QString으로 변경하는 방법은 무엇입니까? (0) | 2020.06.24 |
|---|---|
| 파이썬에서 열거 형에 대한 일반적인 관행은 무엇입니까? (0) | 2020.06.24 |
| HTML5 양식 유효성 검사 기본 오류 메시지를 어떻게 변경하거나 제거 할 수 있습니까? (0) | 2020.06.23 |
| 각도 컴포넌트와 모듈의 차이점 (0) | 2020.06.23 |
| Objective-C 2.0에서 메소드를 더 이상 사용되지 않는 것으로 플래그 지정하려면 어떻게합니까? (0) | 2020.06.23 |