Não encontrou a classe "com.google.firebase.provider.FirebaseInitProvider"?

156

Estou recebendo a exceção abaixo no lançamento do aplicativo.

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) 

Aqui está o build.gradle no nível do aplicativo

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'

Este é o meu nível de aplicativo 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
}

Como resolver o problema?

WISHY
fonte
Possível duplicata de stackoverflow.com/questions/37312103/… #
21419 Jay Rathod RJ 3/16
Eu já tinha tentado todas essas respostas. nada funciona
wishy
Parece haver um problema no seu manifesto ou no google-services.json Verifique se eles estão corretos. Você pode postar seu arquivo de manifesto?
Rushi M Thakker
6
Você fez a alteração manifesta necessária para o MultiDex android:name="android.support.multidex.MultiDexApplication":? Se MultiDex está configurado corretamente, você verá mensagens Logcat durante a aplicação o init como este: I/MultiDex: install done.
Bob Snyder
verifique a ativação instantânea, se sim, desative a execução instantânea.
Prathap Badavath

Respostas:

145

Eu tive o mesmo erro e o resolvi com o MultiDex, como descrito neste link: https://developer.android.com/studio/build/multidex.html


Às vezes, não basta apenas ativar o MultiDex.

Se qualquer classe necessária durante a inicialização não for fornecida no arquivo DEX principal , seu aplicativo trava com o erro java.lang.NoClassDefFoundError . https://developer.android.com/studio/build/multidex#keep

FirebaseInitProvider é necessário durante a inicialização.

Portanto, você deve especificar manualmente o FirebaseInitProvider, conforme necessário no arquivo DEX principal.

arquivo build.gradle

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-config.txt')
            ...
        }
    }
}

multidex-config.txt (no mesmo diretório que o arquivo build.gradle)

com/google/firebase/provider/FirebaseInitProvider.class
johanvs
fonte
1
você é incrível <3 muito obrigado por ter salvado meu dia <3 #
Mohamed Atef
24
Hey, essa exceção: Causada por: java.lang.ClassNotFoundException: Não encontrou a classe "com.google.firebase.provider.FirebaseInitProvider" não tem nada a ver com a ativação do multidex, na verdade, se você vir as perguntas build.gradle multiDexEnabled está ativado!
Jorgesys
3
Nenhum erro deste multidex, ele simplesmente não concluiu todas as etapas, pois você não pode ver o manifesto ou a classe principal.
AMAN77
3
Isso funcionou. Eu tinha o multidex ativado no meu arquivo gradle, mas estava faltando a parte do manifesto do Android!
precisa saber é o seguinte
3
Além disso, verifique se sua Applicationturma se estende de MultiDexApplication(). Isso estava faltando no meu caso.
Nelson Almendra
86

Eu também enfrentei o mesmo problema e finalmente o resolvi desativando Instant Runem um estúdio Android.

Configurações → Compilar, Execução, Implantação → Execução Instantânea e desmarque Ativar Execução Instantânea

Atualizar:

Não há opção Instant Run disponível no Android Studio 3.5 ou superior. Deve ser aplicável apenas para versões mais antigas.

Shylendra Madda
fonte
8
O mesmo para mim. Essa foi a causa do problema - não multidex ou qualquer outra resposta.
user3562927
3
Parece que este é um problema com o Android Studio 2.3. A desativação do instant run fez trabalhos para mim também, mas esta não é a solução ideal :(
Tharaka Devinda
1
Eu herdei dois projetos de outra empresa. As configurações de base de código, manifesto e gradle são praticamente as mesmas esperadas para alguns itens menores. Um projeto cria e executa bem, o outro não. Desligou o Instant Run e os dois correm agora. Estranho. Isso está usando o Android Studio. 2.3
precisa saber é o seguinte
3
Eu enfrentei esse mesmo problema com o AS 3.1 e um emulador executando a API 26. Antes não encontrei nenhum problema com as APIs 19-25. Desabilitar a execução instantânea, de fato, deixe-me executar o aplicativo. Obrigado.
Marcin Jedynak
1
Desativar a Execução Instantânea não resolve esse problema para mim.
Alyoshak
49

No arquivo build.gradle (Module: app), insira o código abaixo em defaultConfig:

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

e insira nas dependências:

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

Em seguida, adicione o código ao manifesto:

<application 
    android:name="android.support.multidex.MultiDexApplication"
CodeArt
fonte
1
I, estou tentando isso, se ele vai trabalhar eu vou para cima voto e comentário
Kamil Ibadov
45

Eu tive o mesmo problema no meu (projeto do player do YouTube) ... e o seguinte resolveu o problema para mim:

  1. Adicione este código ao seu build.gradle(module: app) dentro de defaultConfing:

    defaultConfig {
        ....
        ....
        multiDexEnabled = true
    }
  2. Adicione este código ao seu build.gradle(module: app) dentro de dependencies:

    dependencies {
        compile 'com.android.support:multidex:1.0.1'
        .....
        .....
    }
  3. Aberto AndroidManifest.xmle interno application:

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

    ou se você tiver sua classe App, estenda-a do MultiDexApplication como:

    public class MyApp extends MultiDexApplication {
    .....

E, finalmente, acho que você deve fazer o download do Repositório de Suporte Android , nos extras do Gerenciador de SDK .

Firas Hashash
fonte
1
Eu fiz "MultiDex.install (this);" mas não funcionou. Estender a classe do aplicativo com o MultiDexApplication fez o truque.
Safe
33

Basta substituir o seguinte método na sua classe de aplicativo.

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 

    }
}
SilverSky
fonte
mais um para não cair para o android:namematerial no Manifesto
Chisko
O mais simples e a melhor resposta
Kader kabore
Se você estiver usando uma classe Application personalizada, esta é a resposta. Outras respostas não resolverão o problema.
makkhay gurung
25

Quando seu aplicativo e as bibliotecas referenciados excederem 65.536 métodos, você encontrará um erro de compilação que indica que seu aplicativo atingiu o limite da arquitetura de compilação do Android

Para evitar essa limitação, você deve configurar seu aplicativo para multidex

Se sua minSdkVersion estiver configurada como 21 ou superior, tudo o que você precisa fazer é definir multiDexEnabled como true no seu arquivo build.gradle no nível do módulo, conforme mostrado aqui:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        multiDexEnabled true
    }
    ...   
}

Senão , se sua minSdkVersion estiver definida como 20 ou menos, você deverá usar a biblioteca de suporte multidex da seguinte maneira:

1. Modifique o arquivo build.gradle no nível do módulo para ativar o multidex e adicionar a biblioteca multidex como uma dependência, conforme mostrado aqui:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        multiDexEnabled true
    }
    ...
 }

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

2. Dependendo da substituição da classe Application, execute um dos seguintes procedimentos:

  • Se você não substituir a classe Application, edite seu arquivo de manifesto para definir android: name na tag da seguinte maneira:

    <application
        android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
  • Caso contrário, se você substituir a classe Application, altere-a para estender o MultiDexApplication (se possível) da seguinte maneira:

   public class MyApplication extends MultiDexApplication { ... }
  • Else você substituir a classe de aplicação, mas não é possível alterar a classe base, então você pode ao invés substituir o método attachBaseContext () e chamar MultiDex.install (this) para permitir multidex:

   public class MyApplication extends SomeOtherApplication {
     @Override
     protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
     }
   }
Sokmean Pon
fonte
Por que o aplicativo precisa estender o MultiDexApplication?
Jason
1
MultiDexApplication é uma classe de biblioteca de suporte. Ele implementa a classe Application e substitui o nome do método attachBaseContext para realizar o trabalho de registro no MultiDex. Você não precisa estender essa classe se substituir o método attachBaseContext.
Sokmean Pon
1
Este fixa-lo para mim em 2019 com Reagir Native mas está faltando 2 importações em MainApplication.java: import android.content.Context;eimport android.support.multidex.MultiDex;
xaphod
1
sua resposta me ajudou a tornar meu aplicativo compatível novamente.
Alok Vishwakarma
18

Habilitar multidexnão é uma boa solução, porque multidextem outro uso no android veja esta resposta o que é multidex

A solução está desativando a execução instantânea, como disse @Shylendra Madda

Configurações → Compilar, Execução, Implantação → Execução Instantânea e desmarque Ativar Execução Instantânea

Acho que o motivo desse problema é que quando a execução instantânea é ativada, o Android Studio não coloca bibliotecas como o firebaseapk gerado para diminuir o tempo de criação do projeto, porque existem firebase bibliotecas e outras bibliotecas como mapse outras nos serviços de reprodução e serviços de reprodução instalados no dispositivo Android, se a execução instantânea ativada não precisar colocá-los no apk gerado para acelerar o tempo de compilação.

Então, quando você extrair o apk e instalá-lo em outro dispositivo, verá esta exceção

Edalat Feizi
fonte
1
Esta é a solução perfeita
Ghanshyam Bagul
Desativar o Instant Run não resolve o problema para mim.
Alyoshak 14/02/19
No Android Studio 3.5.1, não há item Execução Instantânea na seção Compilação, Execução, Implantação.
Vergiliy
@Vergiliy Eles o substituíram por alterações de aplicação. Consulte a publicação do blog de lançamento android-developers.googleblog.com/2019/08/… para obter mais informações e os documentos developer.android.com/studio/run#apply-changes para obter mais informações sobre aplicar alterações
Edalat Feizi
14

Também enfrentei o mesmo problema depois de tentar todas as soluções que encontrei na solução abaixo.

Se você aplicou regras de progresso, adicione a linha abaixo nas Regras do ProGuard

-keep class com.google.firebase.provider.FirebaseInitProvider

e resolve o meu problema.

Gunavant Patel
fonte
@gunavant Patel bro por favor me diga como adicionar em proguard favor
Gowthaman M
1
@gunavant Patel Acho que isso vai resolver o meu problema ... você pode agradar código de exemplo pós onde manter esta linha-keep class com.google.firebase.provider.FirebaseInitProvider
Gowthaman M
@GowthamanM Primeiro, verifique se você habilita o proguard no arquivo app / build.gradle. se enable, você encontrará o arquivo proguard-rules em app / proguard-rules.pro nesse arquivo, adicione a linha acima. Se você não ativar o proguard, não será ele.
Gunavant Patel
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }Como habilitar por favor me diga senhor
Gowthaman M
Se você não ativou o programa, o problema é diferente. mas eu mostro como habilitar isso. adicione "minifyEnabled true" na versão ou, se desejar ativar a depuração, adicione também o tipo de depuração.
Gunavant Patel
8

1: Vá para o gradle enable multiDexEnabled e adicione a biblioteca multidex nas dependências.

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

dependencies {
  // add dependency 
  implementation 'com.android.support:multidex:1.0.1'
}

2: Vá para o arquivo Manifest e escreva android: name = ". MyApplication" (Nome da classe (MyApplication) é opcional, você pode escrever o que quiser).

    <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: Como você escreveu no Android: name = ". MyApplication" Dentro do aplicativo no arquivo manifesto. isso causará um erro porque você não criou a classe MyApplication. Criar classe MyApplication estenda-a pela classe "application" ou simplesmente clique em. MyApplication, um pequeno balão vermelho aparece no lado esquerdo de uma sintaxe, clique nele; você verá (criar classe MyApplication) no menu, clique nele e inclua Método abaixo Dentro dessa classe.

    public class MyApplication extends Application {

    @Override 
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    } 

Se você deseja obter mais informações, clique neste link: [ https://developer.android.com/studio/build/multidex.html]

Espero que funcione para você.

Shahzad Afridi
fonte
7

Primeiro adicione o seguinte em build.gradle (Module: app) ---->

defaultConfig{
..
multiDexEnabled true
..
}

Em seguida, no mesmo arquivo, adicione o seguinte

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

Em AndroidManifest.xml, escreva o seguinte

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

É isso aí. Definitivamente funcionará

Hirak JD
fonte
6

Se você estiver usando o MultiDex no seu App Gradle, a alteração estende o aplicativo para estender o MultiDexApplication na sua classe de aplicativo. Desafiadoramente funcionará

Suresh kumar
fonte
4

Eu tive o mesmo problema e resolvi apenas adicionar um pedaço de código . Se você está recebendo esse problema, significa que já concluiu todas as etapas necessárias para usar o Firebase. Você só precisa criar uma classe que estenda o Aplicativo (a classe pública Application_CrashReport estende o Aplicativo) e adicione essa classe no arquivo mainifest. Nessa classe, basta substituir o método abaixo

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
}

e adicione MultiDex.install (this); nesse método significa

  @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

Nota : - Não esqueça de seguir as etapas acima

Peter
fonte
2

Isto é devido ao MultiDex.

Passos para resolver:

  1. Em gradle-> dependencies -> (compile'com.android.support: multidex: 1.0.1 ') Adicione isso nas dependências

  2. No seu projeto, a classe do aplicativo estende o MultiDexApplication assim (a classe pública MyApplication estende o MultiDexApplication)

  3. Executar e verificar

Sukhdeep Saini
fonte
2

É um pouco tarde para quem está entrando, mas verifique as regras do seu programa! Eu perdi muito tempo com isso. Suas regras de programação podem estar mudando os nomes para arquivos importantes do firebase. Isso realmente prova apenas um problema na produção e na execução instantânea :)

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.**
Keith Aylwin
fonte
Isso fez o truque, permitindo que o multidex não fizesse nada além de perder tempo!
Magnus W
2

Como mencionado anteriormente, este é um problema com multidex: você deve adicionar implementação ao seu build.gradlee MainApplication.java. Mas o que você adiciona realmente depende se você suporta o AndroidX ou não. Aqui está o que você precisa para resolver este problema:

  1. Se você suporta AndroidX

Coloque estas linhas de código no seu build.gradle(android / app / build.gradle):

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "androidx.multidex:multidex:2.0.1" // <-- THIS LINE
  ...
}

Coloque estas linhas no seu MainApplication.java(android / app / src / main / java /.../ MainApplication.java):

package com.your.package;

import androidx.multidex.MultiDexApplication; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE
  1. Se você não suporta AndroidX

Coloque estas linhas de código no seu build.gradle(android / app / build.gradle):

defaultConfig {
  applicationId "com.your.application"
  versionCode 1
  versionName "1.0"
  ...
  multiDexEnabled true // <-- THIS LINE
}
...
...
dependencies {
  ...
  implementation "com.android.support:multidex:1.0.3" // <-- THIS LINE
  ...
}

Coloque estas linhas no seu MainApplication.java(android / app / src / main / java /.../ MainApplication.java):

package com.your.package;

import android.support.multidex.MultiDex;; // <-- THIS LINE
...
...
public class MainApplication extends MultiDexApplication { ... } // <-- THIS LINE
E. Dn
fonte
1

Você deve estender sua classe Application com em MultiDexApplicationvez de Application.

Ali Akram
fonte
0

Esse problema ocorreu quando mudei para o Android Studio 3.4 com o plug-in Android Gradle 3.4.0. que funciona com o compilador R8.

O plug-in Android Gradle inclui arquivos de regras predefinidos adicionais do ProGuard, mas é recomendável usar proguard-android-optimize.txt . Mais informações aqui .

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'
    }
}
Levon Petrosyan
fonte
0

Eu estava enfrentando o mesmo problema e resolvi esse problema alterando a versão do fireabseStorage da mesma forma que a versão do banco de dados do Firebase

 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'

para

 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'
Umer Waqas
fonte
0

Se você tiver> 20 minsdkversion, precisará usar a versão mais recente do Firebase Auth, ou seja,

implementação 'com.google.firebase: firebase-auth: 18.1.0'

e não é necessário configurar o multi-dex, se você realmente não precisa.

Encontrei esse problema ao usar o 16.0.5 no auxiliar do Firebase, mas consegui corrigi-lo quando atualizei para o 18.1.0.

Flecha prateada
fonte
0

Se você estiver usando o Xamarin.Forms, talvez queira dar uma olhada em Não encontrou a classe "com.google.firebase.provider.FirebaseInitProvider"? pois isso captura o problema com o erro dex no google firebase na inicialização (não resolvido no momento).

Voltei a não usar encolhimento a curto prazo e planejo usar o ProGuard até que o R8 seja mais estável.

Devology Ltd
fonte
-6

adicionar no caminho raiz do projeto 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'
Muhammad Azeem
fonte
considere adicionar algumas informações para resposta ur e este código não vai ajudar ninguém
Ashu Kumar