Je suis en train de convertir une application existante d'Eclipse en Android Studio. Cependant, lorsque je l'exécute sur un périphérique sous 4.x (j'ai testé plusieurs versions sur des émulateurs), il se bloque immédiatement avec une NoClassDefFoundError
.
J'ai essayé de commenter les références aux classes qu'il ne peut pas trouver, mais il y en a toujours une autre. Autant que l'on puisse en juger, la classe fautive est toujours
Tout fonctionne bien sur un émulateur 5.0.1 (je n'ai pas de périphérique à tester). Mon fichier build.gradle
est assez long, mais ressemble à ceci:
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'])
}
Quelques exemples de classes qui posent problème:
Parcelable.CREATOR
implémentations dans mes modèlesQuel est le problème, et comment puis-je résoudre ce problème?
J'étais en train de mettre en œuvre de manière incomplète le support MultiDex, de sorte que certaines de mes classes n'étaient pas dans le fichier dex approprié. Pour résoudre ce problème, vous devez faire plus que simplement définir multiDexEnabled = true
dans votre bloc defaultConfig
. Vous devez également:
compile 'com.Android.support:multidex:1.0.1'
dans vos dépendancesMultiDexApplication
au lieu de Application
. Vous pouvez également appeler MultiDex.install()
dans attachBaseContext()
de votre application.Voir https://developer.Android.com/tools/building/multidex.html pour plus de détails.
1) Ajoutez multiDexEnabled = true
dans votre configuration par défaut
2) Ajoutez la compilation com.Android.support:multidex:1.0.0
dans vos dépendances
3) Application
class extend MultiDexApplication
au lieu de Application
J'ai eu le même problème, j'ai essayé toutes les solutions suggérées sur StackOverflow mais elles n'ont pas fonctionné dans mon cas.
Après cela, j’ai découvert l’une des bibliothèques compilées par Java 8. Par conséquent, j’ai également besoin d’activer Java 8 dans mon projet.
Android {
//...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Plusieurs raisons expliquent cette erreur. J'espère que ça aide.
1) ajoutez multiDexEnabled = true dans votre defaultConfig dans build.gradle.
2) Vous devez également inclure compiler 'com.Android.support:multidex:1.0.1'
3) ajoutez ce qui suit à votre balise "application" dans votre manifeste:
Android: name = "Android.support.multidex.MultiDexApplication"
son travail avec moi, espérons que l'aide
J'ai aussi le problème d'être résolu après avoir suivi les étapes suivantes
1) ajoutez multiDexEnabled = true
dans votre defaultConfig dans build.gradle.
2) Vous devez également inclure Compiler com.Android.support:multidex:1.0.1
3) ajoutez ce qui suit à votre balise "application" dans votre manifeste:
Android:name="Android.support.multidex.MultiDexApplication"
Dans mon cas, c’était Kotlin car chaque cause était une exception . Plus d’informations ici: Java.lang.NoClassDefFoundError $$ inline $ forEach $ lambda $ 1 dans Kotlin
J'ai résolu le problème en supprimant multiDexEnabled = true
dans mon cas.