Java.lang.IllegalStateException: Dex archives: setting.Extension DEX uniquement pour.Les fichiers de CLASSE
je construis le projet à gitlab ci
./gradlew assembleDebug --stacktrace
et parfois, il renvoie une erreur:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
> com.android.build.api.transform.TransformException: java.lang.IllegalStateException: Dex archives: setting .DEX extension only for .CLASS files
À mon pc local il fonctionne correctement.
la version de kotlin est 1.2
multidex est activé
Quelle est la raison de cette erreur?
8 réponses
Il semble que j'ai trouvé la solution. Au moment de la construction Grad Le me mettait en garde:
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
app: 'androidProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'com.arello-mobile:moxy-compiler:1.5.3' and apply the kapt plugin: "apply plugin: 'kotlin-kapt'".
j'ai fait une faute d'orthographe et j'ai oublié de supprimer les annotationProcessor pour la bibliothèque:
annotationProcessor "com.arello-mobile:moxy-compiler:$moxyVersion"
kapt "com.arello-mobile:moxy-compiler:$moxyVersion"
donc j'ai enlevé la première ligne.
Après que j'ai appliqué kapt plugin apply plugin: 'kotlin-kapt'
et corrigé quelques erreurs de compilation dans le code après cela.
Après tout, j'ai réalisé que j'avais oublié de remplacer compile
implementation
dans certains endroits. C'est bizarre, mais sans elle construire n'a pas fonctionné.
cette modification corrige mon erreur de compilation.
la réponse ci-dessus est en grande partie juste mais dans mon cas, j'obtiens cette exception quand je crée le même nom java et kotlin file puis en supprime un.
Les Solutions sont: juste Build -> Nettoyage De Projet mon projet et il fonctionne. Et mon projet a également permis multiDex.
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
j'ai pu résoudre le problème en fermant et en redémarrant Android Studio. Peut-être même un Projet de Reconstruction aurait aussi bien fait (n'essayez pas que si).
configurer pour multidexing n'a pas résolu ce problème pour moi.
cependant j'ai trouvé une résolution...de toutes sortes. Fondamentalement, il s'agissait de créer une demande de pull pour une deuxième branche sur le même commit que la construction qui échouait. La construction de cette requête pull a réussi, et puis Bitbucket a pensé que la requête pull originale était ok et nous a permis de fusionner, même si nous n'avions pas fait de changements sur cette branche. Il y a là quelque chose de bizarre inexpliqué, mais la technique a marché.
Voici comment j'ai fait:
supposons que la branche qui échoue s'appelle bad-branch
.
j'ai créé une nouvelle branche appelée bad-branch-copy
sur la Commission qui était commune entre bad-branch
et develop
. Puis j'ai fusionné bad-branch
en bad-branch-copy
. Le résultat final fut une progression rapide telle que bad-branch-copy
fini sur la même livraison que bad-branch
. Je m'attendais à un engagement séparé donc ce résultat m'a surpris, mais je m'accrochais à des pailles de toute façon donc j'ai continué.
j'ai ensuite poussé bad-branch-copy
GitHub et créé une demande d'extraction de bad-branch-copy
develop
. Cela a déclenché une construction sur , ce qui fut un succès.
À ce moment, buddybuild a montré une construction réussie sur et encore a montré une défaillance sur bad-branch
->develop
. Cependant, Bitbucket a montré une construction réussie sur la demande de pull pour bad-branch
. Oui, c'est vrai: buddybuild a montré un échec mais Bitbucket a dit que c'était ok.
nous avons alors pu fusionner les bad-branch
pull request et tout allait bien avec le monde. Ne me demandez pas pourquoi, je ne répondrai pas. :)
je pense que la même chose peut être accompli grâce à
git checkout bad-build
git checkout -b bad-build-copy
git push origin bad-build-copy
suivi de la création d'une demande de pull pour une mauvaise copie de compilation.
Comme mentionné ci-dessus par @mixel nettoyage fait le travail. Mais comme une option pour ne pas le faire manuellement, il suffit d'ajouter la tâche gradle 'clean' dans la configuration d'exécution de l'application afin qu'elle soit faite tout le temps avant le lancement. De la source, il peut ralentir l'ensemble du processus un peu.
ce qui a résolu le problème pour moi était d'ajouter manuellement tous les fichiers en conflit. Par exemple dans mon gradle fichier que j'avais :
implementation 'com.android.support:support-compat:27.1.1'
il a été souligné à lire. J'ai survolé la ligne et android studio a dit qu'il y avait un conflit avec un autre fichier en utilisant une version moindre. L'erreur est semblable,
venir.Android.support: support-annotations: 26.0.1 conflits / mixage versions avec 27.1.1.
Il m'a donné les noms des les fichiers et je les ai ajoutés manuellement avec la version correspondante pour qu'ils correspondent tous
compile 'com.android.support:support-annotations:27.1.1'
compile 'com.android.support:support-compat:27.1.1'
compile 'com.android.support:support-core-ui:27.1.1'
compile 'com.android.support:animated-vector-drawable:27.1.1'
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:design:27.1.1'
veuillez trouver ici la solution de ce problème,
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}