android - Obtención de excepción java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions después de actualizar a la nueva base de fuego
exception firebase-database (15)
He actualizado mi aplicación a la nueva base de fuego usando this y ahora cuando compilo mi proyecto obtengo la siguiente excepción.
Aquí está mi logcat:
11:57:54.533 27844-27844/com.example.dayshift_2.traveyy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.dayshift_2.traveyy, PID: 27844
java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1591)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1562)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:4871)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4466)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4406)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5102)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Mi Build.gradle:
apply plugin: ''com.android.application''
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.dayshift_2.traveyy"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
}
}
packagingOptions {
exclude ''META-INF/LICENSE''
exclude ''META-INF/LICENSE-FIREBASE.txt''
exclude ''META-INF/NOTICE''
}
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
testCompile ''junit:junit:4.12''
compile ''com.android.support:appcompat-v7:23.3.0''
compile ''com.android.support:design:23.3.0''
compile ''com.facebook.android:facebook-android-sdk:4.+''
compile ''com.google.android.gms:play-services:9.0.0''
compile ''com.google.firebase:firebase-database:9.0.0''
compile ''com.google.firebase:firebase-auth:9.0.0''
compile ''com.android.support:support-v13:23.3.0''
compile ''com.roughike:bottom-bar:1.2.1''
}
apply plugin: ''com.google.gms.google-services''
No estoy seguro de dónde obtengo esta excepción. Cualquier ayuda será muy apreciada. Gracias
Antes de hacer todas esas soluciones agitadas, intente limpiar el proyecto o reconstruir el proyecto desde Android Studio.
java.lang. NoClassDefFoundError
Se producen excepciones cuando cambia cualquier nombre de Clase en su proyecto, pero no pudo obtener los cambios que realizó en Runtime .
Creo que he encontrado una solución para este problema en esta answer , échale un vistazo y agradece a @Gabriele Mariotti , escribió:
En su build.gradle de nivel superior, debe agregar:
buildscript {
// ...
dependencies {
// ...
classpath ''com.google.gms:google-services:3.0.0''
}
}
Luego, en su módulo build.gradle:
apply plugin: ''com.android.application''
android {
// ...
}
dependencies {
// ...
}
// ADD THIS AT THE BOTTOM
apply plugin: ''com.google.gms.google-services''
Es muy sencillo arreglarlo. Si está utilizando servicios de jugador y firebase tanto en su proyecto, asegúrese de no importar todos los servicios disponibles en Google. Simplemente importe las API que realmente necesita. Por ejemplo:
compile ''com.google.firebase:firebase-messaging:9.2.0''
compile ''com.google.android.gms:play-services:9.2.0''
Al hacer esto, puede darte noclassdeffounderror . Para solucionar esto
elimina play-services y sincroniza tu proyecto. Si tiene dependencia, como el uso de anuncios o mapas en su aplicación, defina la API específica. me gusta:
compile ''com.google.android.gms:play-services-maps:9.2.0''
Nota: Maximum no intente usar multiDexEnabled true . Este debería ser tu último paso para arreglar algo.
Espero que esto sea útil.
Estaba enfrentando el mismo error cuando incrementé el targetSDKVersion de 22 a 23. Pasé un mínimo de un día entero para resolver el problema. Ahora, finalmente, encuentro el resultado que usa una API de servicio de reproducción diferente en su archivo build.gradle Fuente: https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
Agregué solo Api relevantes y mi aplicación funciona bien.
Esto funcionó para mí:
- Si aún no lo ha hecho, actualice sus ''Servicios de Google Play'' a la Revisión 30 desde Android SDK Manager> Extras.
-
Y luego agregue la línea
compile ''com.android.support:multidex:1.0.1''
a sus dependencias (o simplemente eliminemultiDexEnabled true
si no es necesario) -
Agregue este atributo a la etiqueta de la aplicación en manifiesto:
android:name="android.support.multidex.MultiDexApplication"
Si ya tiene una clase de aplicación personalizada definida en el Manifiesto de Android,MultiDexApplication
desdeMultiDexApplication
lugar deApplication
Espero que haya ayudado!
Intenta resolverlo...
en archivo Gradle
multiDexEnabled true
compile ''com.android.support:multidex:1.0.1''
Archivo de manifiesto
etiqueta de aplicación agregue esta línea
android: name = "android.support.multidex.MultiDexApplication"
Lo resolví agregando esto y reduciendo la dependencia de play-service a la compilación 8.4.0 ''com.google.android.gms: play-services: 8.4.0''
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
MultiDex.install(this);
}
y agregue lo siguiente al manifiesto
android:name="android.support.multidex.MultiDexApplication"
No lo olvides
android:name="android.support.multidex.MultiDexApplication"
Paso 1: arreglar multidex
Clase de aplicación:
public class StudyNApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MultiDex.install(this);
}
}
Archivo de calificaciones
defaultConfig {
...
multiDexEnabled true
}
dependencies {
compile ''com.android.support:multidex:1.0.0''
}
Paso 2: corrige java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
retirar
compile ''com.google.android.gms:play-services:9.4.0''
Agregue dos lib:
compile ''com.google.android.gms:play-services-maps:9.4.0''
compile ''com.google.android.gms:play-services-location:9.4.0''
Funcionó bien.
Reduzca su dependencia en el archivo
build.gradle
:
desde:
compile ''com.google.android.gms:play-services:9.4.0''
a:
compile ''com.google.android.gms:play-services:7.3.0''
Esto funcionó en mi caso, espero lo mismo para ti.
Usaba los últimos servicios de Google Play pero no funcionaba. Para mí este procedimiento está funcionando:
-
Actualicé mi clase de aplicación:
public class App extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
-
Archivo
build.gradle
actualizado:defaultConfig { ... multiDexEnabled true }
-
Dependencias incluidas:
dependencies { compile ''com.android.support:multidex:1.0.0'' }
Bajé mi dependencia de google play-service de
compile ''com.google.android.gms:play-services:9.2.0''
a
compile ''com.google.android.gms:play-services:8.4.0''
que resolvió este problema para mí
Consulte el siguiente enlace de desbordamiento de pila para obtener una descripción más detallada .
Nota: al
actualizar al último servicio de Google Play
compile ''com.google.android.gms:play-services:9.4.0''
también resolvió este problema.
O puede importar selectivamente ciertos servicios que necesita, en lugar de importar todos los servicios de Google Play.
Configure su aplicación para multidex para resolver este problema.
Para
minSdkVersion
21 o superior, establezcamultiDexEnabled
en verdadero en su archivo build.gradle de nivel de módulo, como se muestra a continuación:
android {
defaultConfig {
//...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
//...
}
Para
minSdkVersion
API 20 o inferior
-
Modifique el
module-level build.gradle
y agregue la biblioteca multidex como una dependencia, como se muestra a continuación:android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 26 multiDexEnabled true } //... } dependencies { compile ''com.android.support:multidex:1.0.1'' }
-
Si no anula la clase de
Application
, edite su archivo demanifest
para configurarandroid:name
en la etiqueta de la aplicación de la siguiente manera<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:name="android.support.multidex.MultiDexApplication"> //... </application> </manifest>
2.1.1. Si anula la clase de
Application
ExtenderMultiDexApplication
public class MyApplication extends MultiDexApplication { //... }
2.1.2. O si anula la clase de
Application
pero no es posible cambiar la clase base, puede anular el métodoattachBaseContext()
y llamar a MultiDex.install (this) para habilitar multidex:public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
para más mdex-gradle
Espero que esto ayude a otros que enfrentan el mismo problema.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(**R.string.default_web_client_id**))
.requestEmail()
.build();
En mi mismo caso cambié requestIdToken y funcionó.
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''
}
aplique el complemento:
''com.google.gms.google-services''
.