合并dex程序类型时出错:android.support.v4.os.ResultReceiver $ MyResultReceiver

时间:2018-05-17 08:51:38

标签: android android-gradle android-support-library

合并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

9 个答案:

答案 0 :(得分:87)

这是因为你搞砸了依赖关系。您必须完全迁移到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 Plugin任务(现在也可以用作独立工具),在构建阶段调用它。 AGP(> = 3.2.0)自动应用依赖性转换,其重写JAR和AAR依赖性(和传递依赖性)的字节码和资源以引用新的androidx打包的类和工件。 您还可以将其用作单独迁移库的独立工具。

Jetifier Official Documentation

  

独立的Jetifier工具迁移支持库依赖库,而不是依赖于等效的AndroidX软件包。该工具允许您直接迁移单个库,而不是使用与Android Studio捆绑在一起的Android gradle插件。

P上。 S.我没有测试Anko是否与AndroidX依赖关系一起工作,但即使启用了gradle.properties中的那些属性,它也没有其他选择,但是回退到使用支持库至于现在。

答案 1 :(得分:18)

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"

答案 2 :(得分:9)

将依赖关系迁移到androidx依赖关系。然后在gradle.properties中添加以下几行(如果尚未创建,请在根文件夹中创建文件)。

android.useAndroidX=true
android.enableJetifier=true

希望这会有所帮助。

答案 3 :(得分:4)

这对我有用的是Refactor->在Android Studio中迁移到AndroidX选项。这似乎可以解决我每次尝试一次依赖一个AndroidX迁移时可能错过的任何事情。 https://developer.android.com/jetpack/androidx/migrate

答案 4 :(得分:2)

我遇到了同样的问题。

不要在项目中混合依赖项样式(androidx和com.android.support)。

在您的代码中尝试替换

implementation "androidx.appcompat:appcompat:$support_lib"

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

您可以找到here的完整依赖项迁移列表。

我应该使用旧式依赖项,因为我需要WorkManager并且根据官方文档,WorkManager目前没有AndroidX依赖项。

  

WorkManager类已经在androidx.work包中,但是   目前依赖于支持库27.1和相关的Arch   组件版本。具有AndroidX依赖关系的WorkManager版本   将在未来发布。

答案 5 :(得分:2)

对我有用的是Refactor->迁移到Android Studio中的AndroidX选项。这似乎可以解决我每次尝试一次依赖一个AndroidX迁移时可能错过的任何事情。 https://developer.android.com/jetpack/androidx/migrate

答案 6 :(得分:2)

检查与com.android.support冲突的软件包并将其排除 从那个包。对我来说,我使用的是androidx软件包以及FCM,其中 发生了冲突。所以,这对我来说是固定的:

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

答案 7 :(得分:2)

添加以下插件

ionic cordova plugin add cordova-plugin-androidx
ionic cordova plugin add cordova-plugin-androidx-adapter

在platforms / android / gradle.properties文件中添加这两行

android.useAndroidX=true
android.enableJetifier=true

这里还有一个视频: https://youtu.be/0RaJlGipYHc

答案 8 :(得分:0)

对于我已升级的实例     实施' com.github.bumptech.glide:glide:4.0.0 至     实施' com.github.bumptech.glide:glide:4.7.1'