web-dev-qa-db-ja.com

java.lang.IllegalStateException:Dex archives:.CLASSファイルにのみ.DEX拡張子を設定

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です

マルチデックスが有効になっています

このエラーの理由は何ですか?

39
m.myalkin

私は解決策を見つけたようです。ビルド時に、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'を適用し、その後のコードのビルドエラーを修正しました。

結局、いくつかの場所でcompileimplementationに置き換えるのを忘れたことに気付きました。それは奇妙ですが、それなしではビルドは機能しませんでした。

この変更により、エラービルドが修正されます。

8
m.myalkin

./gradlew cleanは同じエラーを修正しました。

92
mixel

Cordova開発者の場合、

この答え のコメントで PierrickMartellière と言われているように、プロジェクトでこのビルドエラーが発生した場合は、プロジェクトフォルダーで次を使用します。

cordova clean

すぐにクリーニングとビルドを行います

39
Zl3n

上記の答えはほとんど正しいですが、私の場合、同じ名前Javaおよびkotlinファイルを作成してからそれらの1つを削除すると、この例外が発生します。

解決策は次のとおりです。ちょうどBuild-> Clean Project私のプロジェクトとそれは動作します。また、私のプロジェクトはmultiDexを有効にしました。

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

@mixelで前述したように、クリーニングは仕事を終わらせます。ただし、手動で実行しないオプションとして、アプリケーションの実行構成にgradle 'clean'タスクを追加するだけで、起動前に常に実行されます。もちろん、プロセス全体を少し遅くする可能性があります。

4
oshurmamadov

Android St​​udioを閉じて再起動することで、問題を解決することができました。おそらく、再構築プロジェクトでさえそれを行っていたでしょう(しかし、それを試してはいませんでした)。

1
dazed

マルチデックス用に設定しても、この問題は解決しませんでした。

しかし、ある種の解像度を思いついたのです。基本的に、失敗したビルドと同じコミットで2番目のブランチのプルリクエストを作成する必要がありました。このプルリクエストのビルドは成功し、その後、Bitbucketは元のプルリクエストは問題ないと判断し、そのブランチに変更を加えていなくてもマージできるようにしました。そこには説明のつかない奇妙さがありますが、テクニックはうまくいきました。

以下がその方法です。

失敗しているブランチはbad-branchと呼ばれると仮定します。

bad-branch-copydevelopに共通のコミットでbad-branchという新しいブランチを作成しました。次に、bad-branchbad-branch-copyにマージしました。これの最終結果は、bad-branch-copybad-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のプルリクエストを作成します。

1
roobyroo

シンプルなソリューション

IonicおよびCordoveプロジェクトの場合

cordova clean
1
ngCourse

現在使用しているAndroid Studio 3.3.2インスタントランを無効にしただけで機能しました。

1
Maxime Claude

問題を解決したのは、競合するすべてのファイルを手動で手動で追加することでした。たとえば、私の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'
0
JenniferG

現在のソリューションはどれも私にとってはうまくいきませんでした。Instant Runを無効にするだけで修正されました。

0
Diego Malone