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"
}
エラー
com.Android.builder.dexing.DexArchiveMergerException:dexアーカイブのマージ中のエラー:/app/build/intermediates/transforms/dexBuilder/debug/0.jar、プログラムの種類は既に存在します:Android.support.v4.os.ResultReceiver $ 1
依存関係を台無しにしたからです。 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ツールは、サポートライブラリに依存するライブラリを移行して、代わりに同等のAndroidXパッケージに依存します。このツールを使用すると、Android StudioにバンドルされているAndroid gradleプラグインを使用する代わりに、個々のライブラリを直接移行できます。
P. S. AnkoがAndroidX依存関係で動作するかどうかはテストしませんでしたが、gradle.properties
のプロパティが有効になっていても動作しない場合、他に選択肢はありませんが、今のところサポートライブラリを使用するフォールバックです。
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"
依存関係をandroidx
依存関係に移行します。 gradle.properties
に以下の行を追加します(まだ作成していない場合は、ルートフォルダーにファイルを作成します)。
Android.useAndroidX=true
Android.enableJetifier=true
お役に立てれば。
Android Studioの[リファクタリング]-> [AndroidXに移行]オプションがこれでうまくいきました。これは、AndroidXの移行を一度に1つの依存関係で実行しようとしたときに見落としていた可能性のある問題を解決するように見えました。 https://developer.Android.com/jetpack/androidx/migrate
Com.Android.supportと競合するパッケージを確認し、そのパッケージから除外します。私にとっては、androidxパッケージとFCMを使用していましたが、そこで衝突が発生しました。だから、これは私のために修正されました:
implementation ('com.google.firebase:firebase-core:16.0.4') {
exclude group: 'com.Android.support'
}
同じ問題がありました。
プロジェクトで依存関係スタイル(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のバージョンは将来リリースされる予定です。
私のために働いたのは、Android Studioの[リファクタリング]-> [AndroidXに移行]オプションでした。これは、AndroidXの移行を一度に1つの依存関係で実行しようとしたときに見落としていた可能性のある問題を解決するように見えました。 https://developer.Android.com/jetpack/androidx/migrate
私のインスタンスでは、実装 'com.github.bumptech.glide:glide:4.0.0から実装' com.github.bumptech.glide:glide:4.7.1 'にアップグレードしました。