공급자 com.google.firebase.provider.FirebaseInitProvider를 가져올 수 없습니다


160

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
build.gradle에 applicationID가 있습니까?
Ian Barber

1
@IanBarber : 아와, build.gradle을 편집하는 동안 제거했습니다. 내 잘못이야.
Macarse

stackoverflow.com/a/38224316/4663544 만 나를 위해 일했다
Jeba Ra

8
시도 Android studio> Build>Clean Project
Ujjwal 싱

앱의 graddle defaultConfig에서 multiDexEnabled가 true 일 때 응용 프로그램 클래스가 MultiDexApplication을 확장하도록 수정했습니다.
허먼

답변:


145

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" >
    ...

1
같은 오류가 발생하여 솔루션으로 수정되었습니다. 이유를 모르겠지만 작동합니다.
후지 고로

이것은 나를 위해 날을 구했다. Android 기기에서 Cordova 앱을 실행하려고 시도하는 동안 오류가 발생했습니다.
manosim

1
내 build.gradle에 동일한 문제와 applicationId가 있습니다. 이 경우 어떻게해야합니까?
마리아 메르세데스 Wyss Alvarez

@ekonstantinidis 코르도바 앱에서 어떻게 고쳤습니까? build.gradle이 생성 될 때 올바르게 추가하는 어딘가에 구성에 추가 할 수 있습니까? (동안 cordova platform add android)?
Zach

@Zach 나는 그렇게 생각하지 않습니다. 내가 달린 후에 추가했습니다 cordova platform add android. 코르도바가 업데이트되면 수정 될 것 같습니까? 추신. Firebase를 전혀 사용하지 않습니다.
manosim

93

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'

    }
...

4
작동하지만 하나의 함수를 재정의하는 대신 특수 클래스가 있으며이를 MultiDexApplication이라고합니다. stackoverflow.com/questions/37312103/…
GregoryK

그래 내가 항상에서 onCreate 내부 MultiDex.install (이) () 메소드 덕분에 친구 쓰고, 또한 나를 위해 일한
다라

내 경우에는 그냥 사용 가능한 마지막 버전으로 컴파일 'com.android.support:multidex:1.0.1'를 업데이트
알렉세이 Timoshchenko에게

이것이 정답입니다. 다른 답변을 모두 시도했지만 Google 및 Firebase 가이드를 따르고 있었지만 이것이 맞습니다. 멋진 사람입니다!
blueware

감사합니다. 어떻게 찾을 수 있습니까? 하지만 내 질문은 내 코드 라인 응용 프로그램이 65000보다 높지 않은 이유입니다. multudex를 사용해야하는 이유와 sdk> 22에서 작동하는 이유는 sdk <22에서 작동하지 않습니다.
milad salimi

75

수락 된 답변으로 문제가 해결되지 않았습니다.

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
이런 것들을 어떻게 아십니까? 누가 당신에게 말했습니까 ??? 방금 Android Studio 3로 업데이트하고 "디버그"앱을 설치 한 후이 문제가 발생하기 시작했습니다. "릴리즈"버전이 잘 작동했습니다. 이제 솔루션과 함께 "디버그"버전도 작동합니다. 나는 당신과 같은 사람들이 너무 행복합니다!
Ton

정답입니다
androidXP

이 모든 답변에서 실제로 멀티 덱스를 추가하여 실제로 문제를 해결하기 위해 수행하는 작업에 대해 설명하는 사람은 아무도 없습니다 (이러한 문제에 직면하여 당혹스럽게 할 수있는 일)
Aditya Anand

36

같은 문제가 있지만 이미 applicationId설정되어 build.gradle있는 경우 다음을 시도 할 수도 있습니다.

  • Android Studio에서 : Build>Clean Project
  • 다른 IDE에서 : Clean, Rebuild 등 무엇이든 ...

3
여전히 문제가 발생하면 빌드 디렉토리를 삭제하고 다시 시도하십시오. :)
Laurence Moroney

build디렉토리 삭제 만 나를 위해 일했다. 레포에서 마지막으로 당겨서 엉망이 된 것 같습니다.
Sevastyan Savanyuk

17

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"

이것은 나를 위해 작동합니다. 희망이 도움이되기를 바랍니다 :)


4
멀티 덱스 만 활성화하기 위해 세 가지 작업 (MultiDexApplication 확장, attacheBaseContext 구현 및 매니페스트 파일 변경)을 모두 수행해서는 안됩니다. developer.android.com/studio/build/multidex.html
호세인 Shahdoost에게

minSdk가 21 이상인 경우 문서에서 기본적으로 이미 활성화되어 있다고 말하면이 작업을 수행하지 않아도됩니다. 그러나이 문제는 minSdk = 21, 나에게 해결책이 있습니까?
Aditya Anand

15

당신은 확신해야

이 줄을 매니페스트에 추가하려면

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>

multiDexEnabled와 함께 나를 위해 일했다 true
ashishdhiman2007

7

전체 플레이 서비스 라이브러리를 포함하지 말고 필요한 라이브러리를 사용하십시오. build.gradle에서 줄을 바꾸십시오 .

compile 'com.google.android.gms:play-services:9.6.1'

다음과 같이 Google Play 서비스 API 에서 적절한 것을 사용하십시오 .

compile 'com.google.android.gms:play-services-gcm:9.6.1'

7

이것을 모듈 레벨 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>

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>

2

필자의 경우이 줄을 모듈 build.gradle에 추가하여 문제를 해결했습니다.

// 하단에 추가

apply plugin: 'com.google.gms.google-services'

출처


"ID가 'com.google.gms.play-services'인 플러그인을 찾을 수 없습니다."
kaleemsagard 1

@kaleemsagard는 이것을 yout 프로젝트에 넣었습니다build.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

필자의 경우 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 . 효과가있었습니다.


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 이상으로 업데이트하는 것이 가장 좋습니다.


0

Gradle 파일의 Firebase SDK가 잘못된 숫자 버전으로 설정 되었기 때문입니다.

Gradle에서 Firebase debs를 제거하고 다시 사용하여 다시 설치했습니다. Firebase Assistant


0

Android 스튜디오 설정 ( Ctrl+Alt+SWindows 에서을 누름) 으로 이동하여을 검색 Instant Run하고 선택을 취소하십시오 Enable Instant Run.

Instant Run응용 프로그램 을 비활성화 했다가 다시 실행하면 문제가 해결됩니다.


0

반응 네이티브 앱의 경우 오류는 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 인 기기에만 적용되었습니다.

단지 대체하여 그것을 해결 ApplicationMainApplication.javaMultiDexApplication

노트: import android.support.multidex.MultiDexApplication;


0

proguard 파일에 다음 코드를 추가했습니다.

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

그리고 제 경우에는 효과가있었습니다.



0

API가 21보다 낮은 장치에서만이 오류가 발생했습니다. 제 경우에는 multiDexEnabled옵션 build.gradle이 이미 설정된 프로젝트에서 작업 해야했습니다 true. APK에서 dex 파일을 확인하고 참조 된 메소드 번호가 64k 미만이므로 프로젝트가 멀티 덱스 일 필요가 없으므로로 설정 multiDexEnabled했습니다 false. 이 솔루션은 저에게 효과적이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.