web-dev-qa-db-ger.com

java.lang.IllegalStateException: Dex-Archive: Einstellung der Erweiterung .DEX nur für .CLASS-Dateien

Ich baue das Projekt bei Gitlab ci 

./gradlew assembleDebug --stacktrace

und manchmal wirft es einen Fehler:

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

Bei meinem lokalen PC funktioniert es richtig.

kotlin Version ist 1.2

multidex ist aktiviert

Was ist der Grund für diesen Fehler?

32
m.myalkin

Es scheint, dass ich die Lösung gefunden habe ... In dem Moment, in dem gradle für mich warnte:

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'".

Ich habe einen Rechtschreibfehler gemacht und habe vergessen, unnötigen Anmerkungsprozessor für die Bibliothek zu entfernen:

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

Also entfernte ich die erste Zeile.

Danach habe ich das kapt-Plugin apply plugin: 'kotlin-kapt' angewendet und einige Fehler im Code behoben.

Schließlich wurde mir klar, dass ich vergessen habe, an einigen Stellen compile durch implementation zu ersetzen. Es ist komisch, aber ohne Build funktionierte es nicht.

Diese Änderungen beheben meinen Fehleraufbau.

8
m.myalkin

./gradlew clean hat den gleichen Fehler für mich behoben.

79
mixel

Die obige Antwort ist meistens richtig, aber in meinem Fall erhalte ich diese Ausnahme, wenn ich denselben Namen Java und Kotlin file in die Kiste setze und dann einen von ihnen lösche. 

Lösungen sind: Just Build -> Clean Project mein Projekt und es funktioniert. Und mein Projekt hat auch multiDex aktiviert.

defaultConfig {
        ...
        // Enabling multidex support.
        multiDexEnabled true
    }
4

Wie bereits erwähnt, wird bei @mixel die Reinigung erledigt. Wenn Sie dies jedoch nicht manuell tun möchten, fügen Sie einfach die Task-Clean-Task in die Konfiguration der App-Ausführung ein, damit die gesamte Zeit vor dem Start ausgeführt wird. Natürlich kann es den gesamten Prozess etwas verlangsamen.

4
oshurmamadov

Für Cordova Entwickler,

Wenn Sie diesen Build-Fehler in Ihrem Projekt erhalten, wie Pierrick Martellière in den Kommentaren von diese Antwort , in Ihrem Projektordner verwenden:

cordova clean

Es macht sofort eine Reinigung und einen Build

3
Zl3n

Ich konnte das Problem lösen, indem ich Android Studio schließe und neu starte. Vielleicht hätte sogar ein Rebuild-Projekt es auch getan (habe das aber nicht versucht).

1
dazed

Das Konfigurieren für Multidexing hat dieses Problem für mich nicht gelöst.

Ich hatte jedoch eine Lösung ... irgendwie. Im Wesentlichen ging es darum, eine Pull-Anforderung für einen zweiten Zweig mit demselben Commit wie das fehlerhafte Build zu erstellen. Der Build für diese Pull-Anfrage war erfolgreich, und Bitbucket dachte dann, dass die ursprüngliche Pull-Anfrage in Ordnung war, und erlaubte uns, zusammenzuführen, obwohl wir an diesem Zweig keine Änderungen vorgenommen hatten. Es gibt einige unerklärliche Verrücktheiten, aber die Technik hat funktioniert.

So habe ich es gemacht:

Angenommen, der fehlerhafte Zweig heißt bad-branch.

Ich habe einen neuen Zweig namens bad-branch-copy für das Commit erstellt, der zwischen bad-branch und develop üblich war. Dann habe ich bad-branch in bad-branch-copy zusammengeführt. Das Endergebnis war ein schneller Vorlauf, so dass bad-branch-copy mit demselben Commit endete wie bad-branch. Ich habe mit einem separaten Commit gerechnet und dieses Ergebnis hat mich überrascht, aber ich habe trotzdem nach Strohhalmen gegriffen, also bin ich weiter gegangen.

Ich habe dann bad-branch-copy zu GitHub verschoben und eine Pull-Anforderung von bad-branch-copy an develop erstellt. Dies löste einen erfolgreichen Aufbau von bad-branch-copy -> develop aus.

Zu diesem Zeitpunkt zeigte Buddybuild einen erfolgreichen Build auf bad-branch-copy -> develop und dennoch einen Fehler auf bad-branch -> develop. Bitbucket zeigte jedoch einen erfolgreichen Aufbau der Pull-Anforderung für bad-branch. Ja, das stimmt. Buddybuild zeigte einen Fehler, aber Bitbucket sagte, es sei in Ordnung. 

Wir konnten dann den bad-branch-Pull-Request zusammenführen und alles war gut mit der Welt. Bitte frag mich nicht warum, ich werde nicht antworten. :)

Ich denke, das gleiche könnte man mit erreichen

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

anschließend wird eine Pull-Anforderung für eine fehlerhafte Build-Kopie erstellt.

1
roobyroo

Für Ionic und Cordova-Projekte

cordova clean

1
ngCourse

Momentan benutze ich Android Studio 3.3.2 Ich habe gerade den Instant Run deaktiviert und es hat funktioniert.

1
Maxime Claude

Was das Problem gelöst hat, war das manuelle Hinzufügen aller in Konflikt stehenden Dateien. Zum Beispiel in meiner Gradle-Datei hatte ich:

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

es wurde mit Lesen unterstrichen. Ich schwebte über der Linie und Android Studio sagte, es gab einen Konflikt mit einer anderen Datei, die eine niedrigere Version verwendete. Der Fehler war ähnlich wie 

come.Android.support:support-annotations:26.0.1 Konflikte/Mix-Versionen mit 27.1.1.

Es gab mir die Namen der Dateien und ich habe sie manuell mit der entsprechenden Version hinzugefügt, damit sie alle übereinstimmen

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

Keine der aktuellen Lösungen funktionierte für mich und es wurde einfach durch Deaktivieren von Instant Run Behoben.

0
Diego Malone