Não foi possível obter o provedor com.google.firebase.provider.FirebaseInitProvider


160

Estou testando a nova ferramenta Crash: https://firebase.google.com/docs/crash/

Depois de seguir as etapas, o aplicativo é iniciado e trava dizendo:

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
Você tem um applicationID no seu build.gradle?
Ian Barber

1
@IanBarber: Oh uau, enquanto editava o build.gradle eu o removi. Foi mal.
Macarse

única stackoverflow.com/a/38224316/4663544 funcionou para mim
Jeba Ra

8
Tente Android studio> Build>Clean Project
Ujjwal Singh

Corrigi-o fazendo minha classe de aplicativo estender MultiDexApplication quando multiDexEnabled for verdadeiro no graddle defaultConfig do aplicativo.
Herman

Respostas:


145

1

Adicione o applicationId ao build.gradle do aplicativo:

android {
    ...
    defaultConfig {
        applicationId "com.example.my.app"
        ...
    }
}

E que o Projeto Limpo -> Construir ou Reconstruir Projeto


2. Se sua minSdkVersion <= 20 ( https://developer.android.com/studio/build/multidex )

Use o Multidex corretamente.

build.gradle do aplicativo

android {
...               
    defaultConfig {
    ....
        multiDexEnabled true
    }
    ...
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
    ...
}

manifest.xml

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

3)

Se você usar uma classe Application personalizada

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
Eu recebi o mesmo erro e foi corrigido pela solução. Não sei o porquê, mas funciona.
FUJI Goro

Isso salvou o dia para mim. Recebi o erro enquanto tentava executar um aplicativo Cordova em um dispositivo Android.
Manosim 25/05

1
Eu tenho o mesmo problema e o applicationId no meu build.gradle. O que posso fazer nesse caso?
Maria Mercedes Wyss Alvarez

@ekonstantinidis Como você o corrigiu no seu aplicativo cordova? Ele pode ser adicionado a uma configuração em algum lugar que a adicione corretamente quando o build.gradle for gerado? (Durante cordova platform add android)?
Zach

@ Zach Acho que não. Eu adicionei depois que corri cordova platform add android. Eu acho que ele será corrigido assim que o cordova for atualizado. Ps. Não estou usando o Firebase.
26616 manosim

93

Eu estava com o mesmo problema em dispositivos com SDK <22, mas para mim o motivo é o MultiDex, o MultiDex.installdeve estar no attachBaseContextmétodo.

Se você estiver usando o MultiDex, tente o seguinte:

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
Funciona, mas há uma classe especial para fazer isso, em vez de substituir uma função e é chamada MultiDexApplication, veja a resposta abaixo stackoverflow.com/questions/37312103/…
GregoryK

Sim, funcionou para mim também, eu sempre escrevi o método MultiDex.install (this) dentro do método onCreate () thanks dude
dara

no meu caso, acabei de atualizar a compilação 'com.android.support:multidex:1.0.1' para a última versão disponível
Aleksey Timoshchenko

Essa deve ser a resposta aceita. Eu tentei todas as outras respostas e estava seguindo os guias do Google e do Firebase, mas esta é a correta, você é um cara incrível!
blueware 28/03/19

Obrigado, como você pode encontrar? mas a minha pergunta é a minha linhas de código do aplicativo não é superior a 65000 Por que eu deveria usá-lo multudex e por que eu trabalho no SDK> 22 e ele não funciona no SDK <22
milad Salimi

75

A resposta aceita não resolveu meu problema.

Se você estiver usando o Multidex, seu Aplicativo deverá se estender em MultiDexApplicationvez de 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"
      ...
      />

Espero que ajude.


Funcionou perfeitamente! Muito obrigado :)
Solution Spirit

3
Como você sabe essas coisas? Quem te contou??? Comecei a ter esse problema depois de atualizar para o Android Studio 3 e instalar aplicativos de "depuração". A versão "Release" funcionou bem. Agora, com sua solução também funciona a versão "Debug". Estou tão feliz que existem pessoas como você!
Ton

Isso é resposta perfeita
androidXP

Em todas essas respostas, nenhuma delas explica realmente o que a adição de multidex realmente faz para resolver o problema (algo desconcertantemente aleatório a ser feito diante de uma questão dessas)
Aditya Anand

36

Se você tiver o mesmo problema, mas já tiver o applicationIdconjunto configurado build.gradle, também poderá tentar o seguinte:

  • no Android Studio: Build>Clean Project
  • em outros IDEs: limpar, reconstruir, o que for ...

3
E se você ainda tiver problemas, exclua o diretório de compilação e tente novamente. Eu estava preso até que eu fiz isso :)
Laurence Moroney

Somente a exclusão do builddiretório funcionou para mim. Parece que foi atrapalhado pela minha última atração no repositório.
Sevastyan Savanyuk

17

Eu tive o mesmo problema em dispositivos Pre Lollipop. Para resolver isso, fiz o seguinte. Enquanto isso, eu estava usando o multiDex no projeto.

1. adicione isso para build.gradle no módulo: app

multiDexEnabled = true

dexOptions {
    javaMaxHeapSize "4g"
}

2. adicione essa dependência

compile 'com.android.support:multidex:1.0.1'

3.Em seguida, no aplicativo principal

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. No arquivo de manifestos

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

Isso funciona para mim. Espero que isso ajude voçe tambem :)


4
Você não deve executar todos os três trabalhos (estenda o MultiDexApplication, implemente o attacheBaseContext e altere o arquivo manifesto) para permitir a ativação do multidex, apenas um é suficiente: D. developer.android.com/studio/build/multidex.html
Hossein Shahdoost

Se o seu minSdk for 21 ou superior, não será necessário fazer isso, pois os documentos dizem que ele já está ativado por padrão. E, no entanto, esse problema está chegando para mim com minSdk = 21, alguma solução para isso?
Aditya Anand

15

você deve ter certeza

para adicionar esta linha ao seu manifesto

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>

Trabalhei para mim também junto com o multiDexEnabled true #
ashishdhiman2007

7

Não inclua toda a biblioteca de serviços do jogo, mas use a que você precisa. Substitua a linha em seu build.gradle :

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

com o apropriado das APIs do Google Play Services , como por exemplo:

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

7

Adicione isso ao seu build.gradle no nível do módulo:

android {               
defaultConfig {
    ....
    multiDexEnabled true
}
...
}

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    .........
}

Se você substituir a Applicationclasse, estenda-a de MultiDexApplication:

YourApplicationClass extends MultiDexApplication

Se você não pode estendê-lo da MultiDexApplicationclasse, substitua o attachBaseContext()método da seguinte maneira:

protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }

E não execute nada antes de MultiDex.install(this)ser executado.

Se você não substituir a Applicationclasse, edite seu arquivo de manifesto da seguinte maneira:

<?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

Isso deve funcionar:

Passo 1:

defaultConfig {
    applicationId "service.ingreens.com.gpsautoon"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Passo 2:

compile 'com.android.support:multidex:1.0.1'

Etapa 3: faça outra aula

public class MyApplication extends MultiDexApplication {
}

Etapa 4: adicione esta linha no manifesto

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

2

No meu caso, o problema foi resolvido adicionando esta linha ao módulo build.gradle:

// ADICIONE ISTO NA PARTE INFERIOR

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

Fonte


Recebi "Plug-in com o ID 'com.google.gms.play-services' não encontrado."
kaleemsagard

@kaleemsagard colocar isso em yout projetobuild.gradle dependencies { classpath 'com.google.gms:google-services:3.0.0' }
Borja

1

No meu caso, o problema ocorreu após a migração para o AndroidX. Por alguma razão, o aplicativo estava chamando MultiDex.install () com reflexão:

    final Class<?> clazz = Class.forName("android.support.multidex.MultiDex");
    final Method method = clazz.getDeclaredMethod("install", Context.class);
    method.invoke(null, this);

Mudei o pacote de android.support.multidex.MultiDexpara androidx.multidex.MultiDex. Funcionou.


0

Em vez de adicionar manualmente o nome do pacote no build.gradle, você pode fazer o seguinte:

primeiro adicione esta linha no início

import java.util.regex.Pattern

Em seguida, adicione isso no defaultConfig

android {
    ...
    defaultConfig {
        ...
        applicationId = doExtractStringFromManifest("package")
        ...
    }
    ...
}

E, finalmente, adicione o método 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)
}

Como existem muitos comentários do Cordova na resposta, se você estiver trabalhando com o Cordova, não deve editar o seu caso build.gradle, ele tem um comentário no início que diz

// ARQUIVO GERADO! NÃO EDITE!

Portanto, se você estiver usando um Cordova, a melhor coisa a fazer é atualizar para o cordova-android 5.1.0 ou superior, onde essas alterações já estão presentes.


0

O meu foi porque o Firebase SDK no arquivo Gradle foi definido para uma versão numérica errada.

Eu removi as debs do Firebase da Gradle e as reinstalei novamente usando Firebase Assistant


0

Vá para a configuração do Android Studio (pressionando Ctrl+Alt+Snas janelas), pesquise Instant Rune desmarque Enable Instant Run.

Desabilitando Instant Rune executando seu aplicativo novamente, o problema será resolvido.


0

Para reagir com o aplicativo nativo, o erro foi: java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.provider.FirebaseInitProvider" ele estava sendo obtido apenas para dispositivos com a versão Android <~ 4.4

Resolveu por apenas substituindo Applicationem MainApplication.javacomMultiDexApplication

NOTA: import android.support.multidex.MultiDexApplication;


0

Eu adicionei o seguinte código no arquivo proguard.

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

e funcionou no meu caso.



0

Eu tenho esse erro apenas em dispositivos com API menor que 21. No meu caso, tive que trabalhar com um projeto em que a multiDexEnabledopção in build.gradlejá estava definida true. Eu verifiquei o arquivo dex no APK e o número de métodos referenciados era menor que 64k, portanto, o projeto não precisa ser multidex, portanto, defina multiDexEnabledcomo false. Esta solução funcionou para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.