合并dex程序类型时出现错误:android.support.v4.os.ResultReceiver $ MyResultReceiver [英] Error while merging dex Program type already present: android.support.v4.os.ResultReceiver$MyResultReceiver

查看:626
本文介绍了合并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

解决方案

这是因为您弄乱了依赖性.您必须完全迁移到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 Studio捆绑在一起的Android gradle插件.

P. S.我没有测试Anko是否可以使用AndroidX依赖项,但是即使启用了gradle.properties中的那些属性,如果还不能使用它,您别无选择,只能使用现在支持的库.

Error when merging the dex

following are the dependencies.

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"
}

error

  • What went wrong: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

    com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: /app/build/intermediates/transforms/dexBuilder/debug/0.jar, Program type already present: android.support.v4.os.ResultReceiver$1

解决方案

It's because you messed up the dependencies. You have to either fully migrate to AndroidX dependencies or stay on Support library ones. Thus, instead of

implementation "android.arch.persistence.room:runtime:$room_lib"
annotationProcessor "android.arch.persistence.room:compiler:$room_lib"

use

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

Also be sure to check your gradle.properties project file to contain

android.useAndroidX=true
android.enableJetifier=true

Jetifier helps libraries, which depend on old Support packages, to use the new AndroidX ones.

What is Jetifier? It's an Android Gradle Plugin task (now can also be used as a standalone tool) which is invoked during build phase. AGP (>= 3.2.0) does automatically apply dependency translation which rewrites bytecode and resources of JAR and AAR dependencies (and transitive dependencies) to reference the new androidx-packaged classes and artifacts. You can also use it as a standalone tool to individually migrate a library.

Jetifier Official Documentation

The standalone Jetifier tool migrates support-library-dependent libraries to rely on the equivalent AndroidX packages instead. The tool lets you migrate an individual library directly, instead of using the Android gradle plugin bundled with Android Studio.

P. S. I didn't test if Anko works with AndroidX dependencies, but if it doesn't even though those properties in your gradle.properties are enabled, you have no other choices, but fallback to using Support libraries as for now.

这篇关于合并dex程序类型时出现错误:android.support.v4.os.ResultReceiver $ MyResultReceiver的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆