web-dev-qa-db-ja.com

既に存在するdexプログラムタイプのマージ中にエラーが発生しました:Android.support.v4.os.ResultReceiver $ MyResultReceiver

Dexをマージする際のエラー

以下は依存関係です。

ext {
    anko_version='0.10.5'
    support_lib='1.0.0-alpha1'
    room_lib = "1.1.0"
}
dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "androidx.cardview:cardview:$support_lib"
    implementation "com.google.Android.material:material:$support_lib"
    implementation "androidx.appcompat:appcompat:$support_lib"
    implementation "org.jetbrains.anko:anko:$anko_version"
    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1"
    implementation "Android.Arch.persistence.room:runtime:$room_lib"
    annotationProcessor "Android.Arch.persistence.room:compiler:$room_lib"
}

エラー

  • 問題点:タスク ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'の実行に失敗しました。

    com.Android.builder.dexing.DexArchiveMergerException:dexアーカイブのマージ中のエラー:/app/build/intermediates/transforms/dexBuilder/debug/0.jar、プログラムの種類は既に存在します:Android.support.v4.os.ResultReceiver $ 1

43
Anil Ugale

依存関係を台無しにしたからです。 AndroidXの依存関係に完全に移行するか、サポートライブラリの依存関係を維持する必要があります。したがって、代わりに

implementation "Android.Arch.persistence.room:runtime:$room_lib"
annotationProcessor "Android.Arch.persistence.room:compiler:$room_lib"

つかいます

implementation "androidx.room:room-runtime:2.0.0-alpha1"
annotationProcessor "androidx.room:room-compiler:2.0.0-alpha1"

また、必ずgradle.propertiesプロジェクトファイルをチェックして、

Android.useAndroidX=true
Android.enableJetifier=true

Jetifierは、古いサポートパッケージに依存するライブラリが新しいAndroidXパッケージを使用するのを支援します。

Jetifierとは何ですか?これは、ビルドフェーズ中に呼び出されるAndroid Gradleプラグインタスク(スタンドアロンツールとしても使用できるようになりました)です。 AGP(> = 3.2.0)は、依存関係の変換を自動的に適用し、JARおよびAAR依存関係(および推移的依存関係)のバイトコードとリソースを書き換えて、新しいandroidxパッケージクラスおよびアーティファクトを参照します。ライブラリを個別に移行するためのスタンドアロンツールとして使用することもできます。

Jetifier公式ドキュメント

スタンドアロンJetifierツールは、サポートライブラリに依存するライブラリを移行して、代わりに同等のAndroidXパッケージに依存します。このツールを使用すると、Android St​​udioにバンドルされているAndroid gradleプラグインを使用する代わりに、個々のライブラリを直接移行できます。

P. S. AnkoがAndroidX依存関係で動作するかどうかはテストしませんでしたが、gradle.propertiesのプロパティが有効になっていても動作しない場合、他に選択肢はありませんが、今のところサポートライブラリを使用するフォールバックです。

89
Skyfall100

gradle.propertiesに次の行を追加します

Android.useAndroidX=true
Android.enableJetifier=true

build.gradle(moudel:app)でルームの依存関係を変更します

implementation "androidx.room:room-runtime:2.0.0-alpha1"
annotationProcessor "androidx.room:room-compiler:2.0.0-alpha1"
18
Aung Myo Lwin

依存関係をandroidx依存関係に移行します。 gradle.propertiesに以下の行を追加します(まだ作成していない場合は、ルートフォルダーにファイルを作成します)。

Android.useAndroidX=true
Android.enableJetifier=true

お役に立てれば。

8
Naveen T P

Android St​​udioの[リファクタリング]-> [AndroidXに移行]オプションがこれでうまくいきました。これは、AndroidXの移行を一度に1つの依存関係で実行しようとしたときに見落としていた可能性のある問題を解決するように見えました。 https://developer.Android.com/jetpack/androidx/migrate

3
toobsco42

Com.Android.supportと競合するパッケージを確認し、そのパッケージから除外します。私にとっては、androidxパッケージとFCMを使用していましたが、そこで衝突が発生しました。だから、これは私のために修正されました:

implementation ('com.google.firebase:firebase-core:16.0.4') {
    exclude group: 'com.Android.support'
}
2
Anil

同じ問題がありました。

プロジェクトで依存関係スタイル(androidxとcom.Android.support)を混在させないでください。

あなたのコードで置き換えてみてください

implementation "androidx.appcompat:appcompat:$support_lib"

implementation "com.Android.support:appcompat-v7:$version_of_support_library"

here にある依存関係の移行の完全なリスト。

WorkManagerが必要であり、現在AndroidXに依存していない公式ドキュメントWorkManagerによると、古いスタイルの依存関係を使用する必要があります。

WorkManagerクラスは既にandroidx.workパッケージに含まれていますが、現在サポートライブラリ27.1および関連するArchコンポーネントバージョンに依存しています。 AndroidXに依存するWorkManagerのバージョンは将来リリースされる予定です。

2
mtwain

私のために働いたのは、Android Studioの[リファクタリング]-> [AndroidXに移行]オプションでした。これは、AndroidXの移行を一度に1つの依存関係で実行しようとしたときに見落としていた可能性のある問題を解決するように見えました。 https://developer.Android.com/jetpack/androidx/migrate

2
toobsco42

私のインスタンスでは、実装 'com.github.bumptech.glide:glide:4.0.0から実装' com.github.bumptech.glide:glide:4.7.1 'にアップグレードしました。

0
Mbanda