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?
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.
./gradlew clean
hat den gleichen Fehler für mich behoben.
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
}
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.
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
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).
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.
Für Ionic und Cordova-Projekte
cordova clean
Momentan benutze ich Android Studio 3.3.2 Ich habe gerade den Instant Run deaktiviert und es hat funktioniert.
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'
Keine der aktuellen Lösungen funktionierte für mich und es wurde einfach durch Deaktivieren von Instant Run
Behoben.