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?
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
.Respostas:
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.
FirebaseInitProvider é necessário durante a inicialização.
Portanto, você deve especificar manualmente o FirebaseInitProvider, conforme necessário no arquivo DEX principal.
arquivo build.gradle
multidex-config.txt (no mesmo diretório que o arquivo build.gradle)
fonte
Application
turma se estende deMultiDexApplication()
. Isso estava faltando no meu caso.Eu também enfrentei o mesmo problema e finalmente o resolvi desativando
Instant Run
em um estúdio Android.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.
fonte
No arquivo build.gradle (Module: app), insira o código abaixo em defaultConfig:
e insira nas dependências:
Em seguida, adicione o código ao manifesto:
fonte
Eu tive o mesmo problema no meu (projeto do player do YouTube) ... e o seguinte resolveu o problema para mim:
Adicione este código ao seu
build.gradle
(module: app) dentro dedefaultConfing
:Adicione este código ao seu
build.gradle
(module: app) dentro dedependencies
:Aberto
AndroidManifest.xml
e internoapplication
:ou se você tiver sua classe App, estenda-a do MultiDexApplication como:
E, finalmente, acho que você deve fazer o download do Repositório de Suporte Android , nos extras do Gerenciador de SDK .
fonte
Basta substituir o seguinte método na sua classe de aplicativo.
fonte
android:name
material no ManifestoSe 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:
Senão , se sua minSdkVersion estiver definida como 20 ou menos, você deverá usar a biblioteca de suporte multidex da seguinte maneira:
fonte
import android.content.Context;
eimport android.support.multidex.MultiDex;
Habilitar
multidex
não é uma boa solução, porquemultidex
tem outro uso no android veja esta resposta o que é multidexA solução está desativando a execução instantânea, como disse @Shylendra Madda
Acho que o motivo desse problema é que quando a execução instantânea é ativada, o Android Studio não coloca bibliotecas como o
firebase
apk gerado para diminuir o tempo de criação do projeto, porque existemfirebase
bibliotecas e outras bibliotecas comomaps
e 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
fonte
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
e resolve o meu problema.
fonte
-keep class com.google.firebase.provider.FirebaseInitProvider
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Como habilitar por favor me diga senhor1: Vá para o gradle enable multiDexEnabled e adicione a biblioteca multidex nas dependências.
2: Vá para o arquivo Manifest e escreva android: name = ". MyApplication" (Nome da classe (MyApplication) é opcional, você pode escrever o que quiser).
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.
Se você deseja obter mais informações, clique neste link: [ https://developer.android.com/studio/build/multidex.html]
Espero que funcione para você.
fonte
Primeiro adicione o seguinte em build.gradle (Module: app) ---->
Em seguida, no mesmo arquivo, adicione o seguinte
Em AndroidManifest.xml, escreva o seguinte
É isso aí. Definitivamente funcionará
fonte
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á
fonte
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
e adicione MultiDex.install (this); nesse método significa
Nota : - Não esqueça de seguir as etapas acima
fonte
Isto é devido ao MultiDex.
Passos para resolver:
Em gradle-> dependencies -> (compile'com.android.support: multidex: 1.0.1 ') Adicione isso nas dependências
No seu projeto, a classe do aplicativo estende o MultiDexApplication assim (a classe pública MyApplication estende o MultiDexApplication)
Executar e verificar
fonte
É 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
fonte
Como mencionado anteriormente, este é um problema com
multidex
: você deve adicionar implementação ao seubuild.gradle
eMainApplication.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:Coloque estas linhas de código no seu
build.gradle
(android / app / build.gradle):Coloque estas linhas no seu
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):Coloque estas linhas de código no seu
build.gradle
(android / app / build.gradle):Coloque estas linhas no seu
MainApplication.java
(android / app / src / main / java /.../ MainApplication.java):fonte
Você deve estender sua classe Application com em
MultiDexApplication
vez deApplication
.fonte
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 .
fonte
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
para
fonte
Se você tiver> 20 minsdkversion, precisará usar a versão mais recente do Firebase Auth, ou seja,
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.
fonte
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.
fonte
adicionar no caminho raiz do projeto google-services.json
fonte