web-dev-qa-db-fra.com

java.lang.IllegalStateException: archives Dex: définition de l'extension .DEX uniquement pour les fichiers .CLASS

Je construis le projet chez gitlab ci 

./gradlew assembleDebug --stacktrace

et parfois ça jette 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

Sur mon ordinateur local, cela fonctionne correctement.

la version de kotlin est 1.2

multidex est activé

Quelle est la raison de cette erreur?

32
m.myalkin

Il semble que j'ai trouvé la solution… .. Au moment de la construction, Gradle me montrait des avertissements:

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 mal orthographié et oublié de supprimer annotationProcessor inutile pour la bibliothèque:

annotationProcessor "com.arello-mobile:moxy-compiler:$moxyVersion"
kapt "com.arello-mobile:moxy-compiler:$moxyVersion"

Alors j'ai enlevé la première ligne.

Après cela, j’ai appliqué le plugin kapt apply plugin: 'kotlin-kapt' et corrigé quelques erreurs de construction dans le code.

Après tout, j'ai réalisé que j'avais oublié de remplacer compile par implementation à certains endroits. C'est bizarre mais sans cela la construction n'a pas fonctionné.

Cette modification corrige mon erreur de génération.

8
m.myalkin

./gradlew clean corrige la même erreur pour moi.

79
mixel

La réponse ci-dessus est généralement correcte, mais dans mon cas, je reçois cette exception lorsque je crée le même nom Java et kotlin fichier puis supprime l’un d’eux. 

Les solutions sont: just Build -> Clean Project mon projet et ça marche. Et mon projet a également activé multiDex .

defaultConfig {
        ...
        // Enabling multidex support.
        multiDexEnabled true
    }
4
Md Imran Choudhury

Comme mentionné ci-dessus par @mixel cleaning, le travail est fait. Mais en tant qu'option, ne pas le faire manuellement, ajoutez simplement la tâche de nettoyage à la configuration d'exécution de l'application afin qu'elle soit effectuée en permanence avant le lancement. Bien sûr, cela peut ralentir un peu l'ensemble du processus.

4
oshurmamadov

Pour les développeurs Cordova,

Si vous obtenez cette erreur de construction dans votre projet, comme dit Pierrick Martellière dans les commentaires de cette réponse , dans votre dossier de projet, utilisez:

cordova clean

Il fait un nettoyage et une construction immédiatement

3
Zl3n

J'ai pu résoudre le problème en fermant et en redémarrant Android Studio. Peut-être même qu'un projet de reconstruction l'aurait fait aussi (je n'ai pas essayé cela).

1
dazed

Configuration pour multidexing n'a pas résolu ce problème pour moi.

Cependant, je suis arrivé avec une résolution ... de toutes sortes. Fondamentalement, il s'agissait de créer une demande d'extraction pour une deuxième branche sur le même commit que la construction qui échouait. La génération de cette demande d'extraction a réussi, puis Bitbucket a pensé que la demande d'extraction initiale était correcte et nous a permis de fusionner, même si nous n'avions apporté aucune modification à cette branche. Il y a là quelques bizarreries inexpliquées mais la technique a fonctionné.

Voici comment je l'ai fait:

Supposons que la branche en échec s'appelle bad-branch.

J'ai créé une nouvelle branche appelée bad-branch-copy sur la validation commune à bad-branch et develop. Puis j'ai fusionné bad-branch dans bad-branch-copy. Le résultat final en a été une avance rapide telle que bad-branch-copy s'est retrouvé sur le même commit que bad-branch. Je m'attendais à un commit séparé, donc ce résultat m'a surpris, mais je tenais quand même à la paille, alors j'ai continué.

J'ai ensuite poussé bad-branch-copy dans GitHub et créé une demande d'extraction de bad-branch-copy à develop. Cela a déclenché une compilation sur bad-branch-copy -> develop, qui a abouti.

À ce stade, buddybuild a montré que la compilation était réussie sur bad-branch-copy -> develop et qu'il y avait toujours un échec sur bad-branch -> develop. Cependant, Bitbucket a montré que la demande d’extraction pour bad-branch avait été construite. Oui, c'est vrai: buddybuild a échoué mais Bitbucket a dit que tout allait bien. 

Nous avons ensuite pu fusionner la demande de tirage bad-branch et tout allait bien dans le monde. S'il vous plaît ne me demandez pas pourquoi, je ne répondrai pas. :)

Je pense que la même chose pourrait être accomplie avec

git checkout bad-build
git checkout -b bad-build-copy
git Push Origin bad-build-copy

suivi de la création d'une demande d'extraction pour bad-build-copy.

1
roobyroo

Ce qui a résolu le problème pour moi, c’est d’ajouter manuellement tous les fichiers en conflit. Par exemple, dans mon fichier de notes, j'avais:

implementation 'com.Android.support:support-compat:27.1.1'

il a été souligné avec lu. J'ai survolé la ligne et le studio Android a déclaré qu'il y avait un conflit avec un autre fichier en utilisant une version plus petite. L'erreur était semblable à, 

come.Android.support:support-annotations:26.0.1 entre en conflit/mélange les versions avec 27.1.1.

Il m'a donné les noms des fichiers et je les ai ajoutés manuellement avec la version correspondante afin 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'
0
JenniferG