Gitlab ciでプロジェクトをビルドします
./gradlew assembleDebug --stacktrace
そして時々それはエラーをスローします:
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
私のローカルPCでは正常に動作します。
kotlinバージョンは1.2です
マルチデックスが有効になっています
このエラーの理由は何ですか?
私は解決策を見つけたようです。ビルド時に、gradleは私に警告を表示していました。
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'".
スペルミスをして、ライブラリの不必要なannotationProcessorを削除するのを忘れました:
annotationProcessor "com.arello-mobile:moxy-compiler:$moxyVersion"
kapt "com.arello-mobile:moxy-compiler:$moxyVersion"
そこで、最初の行を削除しました。
その後、kaptプラグインapply plugin: 'kotlin-kapt'
を適用し、その後のコードのビルドエラーを修正しました。
結局、いくつかの場所でcompile
をimplementation
に置き換えるのを忘れたことに気付きました。それは奇妙ですが、それなしではビルドは機能しませんでした。
この変更により、エラービルドが修正されます。
./gradlew clean
は同じエラーを修正しました。
Cordova開発者の場合、
この答え のコメントで PierrickMartellière と言われているように、プロジェクトでこのビルドエラーが発生した場合は、プロジェクトフォルダーで次を使用します。
cordova clean
すぐにクリーニングとビルドを行います
上記の答えはほとんど正しいですが、私の場合、同じ名前Javaおよびkotlinファイルを作成してからそれらの1つを削除すると、この例外が発生します。
解決策は次のとおりです。ちょうどBuild-> Clean Project私のプロジェクトとそれは動作します。また、私のプロジェクトはmultiDexを有効にしました。
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
@mixelで前述したように、クリーニングは仕事を終わらせます。ただし、手動で実行しないオプションとして、アプリケーションの実行構成にgradle 'clean'タスクを追加するだけで、起動前に常に実行されます。もちろん、プロセス全体を少し遅くする可能性があります。
Android Studioを閉じて再起動することで、問題を解決することができました。おそらく、再構築プロジェクトでさえそれを行っていたでしょう(しかし、それを試してはいませんでした)。
マルチデックス用に設定しても、この問題は解決しませんでした。
しかし、ある種の解像度を思いついたのです。基本的に、失敗したビルドと同じコミットで2番目のブランチのプルリクエストを作成する必要がありました。このプルリクエストのビルドは成功し、その後、Bitbucketは元のプルリクエストは問題ないと判断し、そのブランチに変更を加えていなくてもマージできるようにしました。そこには説明のつかない奇妙さがありますが、テクニックはうまくいきました。
以下がその方法です。
失敗しているブランチはbad-branch
と呼ばれると仮定します。
bad-branch-copy
とdevelop
に共通のコミットでbad-branch
という新しいブランチを作成しました。次に、bad-branch
をbad-branch-copy
にマージしました。これの最終結果は、bad-branch-copy
がbad-branch
と同じコミットで終了するような早送りでした。別のコミットを期待していたので、この結果は驚きましたが、とにかくストローを把握していたので、続けました。
次に、bad-branch-copy
をGitHubにプッシュし、bad-branch-copy
からdevelop
へのプルリクエストを作成しました。これにより、bad-branch-copy
-> develop
のビルドがトリガーされ、成功しました。
その時点で、buddybuildはbad-branch-copy
-> develop
で成功したビルドを示し、bad-branch
-> develop
で失敗を示しました。ただし、Bitbucketはbad-branch
のプルリクエストでビルドが成功したことを示しました。はい、そうです。buddybuildは失敗を示しましたが、Bitbucketはそれは問題ないと言いました。
その後、bad-branch
プルリクエストをマージすることができ、すべてが順調でした。理由は聞かないで、答えません。 :)
私は同じことを達成できると思います
git checkout bad-build
git checkout -b bad-build-copy
git Push Origin bad-build-copy
その後、bad-build-copyのプルリクエストを作成します。
シンプルなソリューション
IonicおよびCordoveプロジェクトの場合
cordova clean
現在使用しているAndroid Studio 3.3.2インスタントランを無効にしただけで機能しました。
問題を解決したのは、競合するすべてのファイルを手動で手動で追加することでした。たとえば、私のgradleファイルには次のものがあります:
implementation 'com.Android.support:support-compat:27.1.1'
赤で下線が引かれました。ライン上にマウスを移動すると、Androidスタジオは、以前のバージョンを使用している別のファイルと競合していると言いました。エラーは
come.Android.support:support-annotations:26.0.1 conflicts/mix versions with 27.1.1。
それは私にファイルの名前を与え、それらがすべて一致するように手動でそれらを対応するバージョンに追加しました
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'
現在のソリューションはどれも私にとってはうまくいきませんでした。Instant Run
を無効にするだけで修正されました。