scanner - NoClassDefFoundError con Android Studio en Android 4
webview android studio 2017 (7)
Estoy en el proceso de convertir una aplicación existente de Eclipse a Android Studio.
Sin embargo, cuando lo ejecuto en un dispositivo con 4.x (he probado varias versiones en emuladores), se bloquea inmediatamente con un
NoClassDefFoundError
.
He intentado comentar las referencias a las clases que no puede encontrar, pero siempre hay otra. Por lo que puedo decir, la clase infractora es siempre
- Dentro de mi propio código
- Una clase interna ( Actualización: con más investigación, esta no siempre es cierta)
Todo funciona bien en un emulador 5.0.1 (no tengo un dispositivo para probar).
Mi archivo
build.gradle
es bastante largo, pero se ve así:
apply plugin: ''com.android.application''
apply plugin: ''android-apt''
def AAVersion = "2.7.1"
android {
compileSdkVersion 19
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.myapp.android"
minSdkVersion 8
targetSdkVersion 19
multiDexEnabled = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
packagingOptions {
*snip*
}
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:1.0.0''
classpath ''com.neenbedankt.gradle.plugins:android-apt:1.4''
}
}
repositories {
maven {
url "https://repo.commonsware.com.s3.amazonaws.com"
}
}
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName ''com.pact.android''
}
}
dependencies {
*snip compile project('':...'') declarations
apt "com.googlecode.androidannotations:androidannotations:$AAVersion"
compile "com.googlecode.androidannotations:androidannotations-api:$AAVersion"
compile ''com.actionbarsherlock:actionbarsherlock:4.4.0@aar''
compile ''com.android.support:support-v4:21.0.3''
compile ''com.google.android.gms:play-services:3.1.36''
*snip many more compile declarations*
compile fileTree(dir: ''libs'', include: [''*.jar''])
}
Algunos ejemplos de clases que causan problemas:
- Una clase anónima que implementa una interfaz dentro de la biblioteca de Facebook (como un proyecto de biblioteca)
-
Parcelable.CREATOR
implementaciones en mis modelos - Una clase interna que extiende android.os.Library
- Una clase interna en mi propio código
- Una clase que implementa una interfaz en una biblioteca de maven
¿Qué está mal y cómo lo soluciono?
1) Agregue
multiDexEnabled = true
en su configuración predeterminada
2) Agregue compilar
com.android.support:multidex:1.0.0
en sus dependencias
3) La clase de
Application
extiende
MultiDexApplication
lugar de solo
Application
1) agregue multiDexEnabled = true en su DefaultConfig en build.gradle.
2) También debe incluir la compilación ''com.android.support:multidex:1.0.1''
3) agregue lo siguiente a su etiqueta de "aplicación" en su manifiesto:
android: name = "android.support.multidex.MultiDexApplication"
está trabajando conmigo, espero que ayude
En mi caso, fue Kotlin porque cada uno estaba causando la excepción. Más información aquí: java.lang.NoClassDefFoundError $$ en línea $ forEach $ lambda $ 1 en Kotlin
Estaba implementando incompletamente el soporte MultiDex, por lo que algunas de mis clases no estaban en el archivo dex adecuado.
Para solucionarlo, debe hacer más que simplemente establecer
multiDexEnabled = true
en su bloque
defaultConfig
.
También tienes que:
-
Incluya la
compile ''com.android.support:multidex:1.0.1''
en sus dependencias -
Haga que su clase de Aplicación extienda
MultiDexApplication
lugar de soloApplication
. Alternativamente, puede llamar aMultiDex.install()
enattachBaseContext()
de su aplicación.
Consulte https://developer.android.com/tools/building/multidex.html para obtener más detalles.
También publico resolver después de seguir los siguientes pasos
1) agregue
multiDexEnabled = true
en su DefaultConfig en build.gradle.
2) También debe incluir compilación
com.android.support:multidex:1.0.1
3) agregue lo siguiente a su etiqueta de "aplicación" en su manifiesto:
android:name="android.support.multidex.MultiDexApplication"
Tuve el mismo problema, probé todas las soluciones sugeridas en pero no funcionaron en mi caso.
Después de eso descubrí que una de las bibliotecas compiladas por Java 8. Por lo tanto, también necesito habilitar Java 8 en mi proyecto.
android {
//...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Hay muchas razones que conducen a este error. Espero eso ayude.
multiDexEnabled = true
el problema eliminando
multiDexEnabled = true
en mi caso.