[android] “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안드로이드 스튜디오에서 비활성화 하여 해결했습니다 .

설정 → 빌드, 실행, 배포 → 즉시 실행 및 즉시 실행 사용을 선택 취소하십시오.

최신 정보:

최신 Android Studio 3.5 이상에서는 Instant Run 옵션을 사용할 수 없습니다. 이전 버전에만 적용 할 수 있어야합니다.


답변

build.gradle (Module : app) 파일에서 아래 코드를 defaultConfig에 삽입하십시오.

  defaultConfig {
        applicationId "com.***.****"
minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

의존성에 삽입하십시오 :

implementation 'com.android.support:multidex:2.0.1'

그런 다음 매니페스트 코드를 추가하십시오.

<application
    android:name="android.support.multidex.MultiDexApplication"


답변

내 (YouTube 플레이어 프로젝트)에서 동일한 문제가 발생했으며 다음과 같은 문제가 해결되었습니다.

  1. 이 코드를 build.gradle(module : app) 안에 추가하십시오 defaultConfing.

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. 이 코드를 build.gradle(module : app) 안에 추가하십시오 dependencies.

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. 개방 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 

    }
}


답변

앱과 앱이 참조하는 라이브러리가 65,536 개의 메소드를 초과하면 앱이 Android 빌드 아키텍처의 한계에 도달했음을 나타내는 빌드 오류가 발생합니다.

이 제한을 피하려면 멀티 덱스에 맞게 앱을 구성해야합니다

minSdkVersion21 이상 으로 설정된 경우 다음 과 같이 모듈 수준 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>
  • 그렇지 않으면 Application 클래스를 재정의하는 경우 다음과 같이 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);
     }
   }

답변

안드로이드에서 다른 사용법이 multidex있기 때문에 활성화 는 좋은 해결책 이 아닙니다.multidex

@Shylendra Madda가 말한 것처럼 솔루션이 즉시 실행을 비활성화하고 있습니다.

설정 → 빌드, 실행, 배포 → 즉시 실행 및 즉시 실행 사용을 선택 취소하십시오.

나는 즉시 실행이, 안드로이드 스튜디오와 같은 라이브러리를 넣지 마십시오 사용하는 경우이 문제의 이유는 생각 firebase때문에 프로젝트 빌드 시간을 단축하기 위해 생성 APK에 firebase 같은 라이브러리와 다른 라이브러리 maps다른 사람 설치되어 플레이 서비스 및 플레이 서비스에 존재입니다 Android 기기에서 즉시 실행이 활성화 된 경우 빌드 시간을 단축하기 위해 생성 된 APK에 넣을 필요가 없습니다.

따라서 apk를 추출하여 다른 장치에 설치하면이 예외가 표시됩니다