当前位置: 首页 > 知识库问答 >
问题:

错误转换字节码到dex:多个dex文件,Android Studio 3.0

安毅
2023-03-14

我最近升级到Android Studio 3.0,在运行程序时我收到以下错误:

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/vuforia/TransformModel;
Error:com.android.dex.DexException: Multiple dex files define Lcom/vuforia/TransformModel;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error:  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/vuforia/TransformModel;

除了我的主应用程序模块外,我的项目中还有另外两个模块。我已经试过了

  • 清理并制作/重建
  • 使用最新的构建工具和Java版本,
  • predex为false,
  • 删除. gradle文件夹,但都不起作用。

有人能帮我吗?

app模块:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.example.shais.gpsdetector"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        resValue "string", "google_maps_key", (project.findProperty("GOOGLE_MAPS_API_KEY") ?: "")
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        javaMaxHeapSize "4g"
        preDexLibraries = false
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.google.android.gms:play-services-location:10.2.4'
    compile 'com.google.android.gms:play-services-places:10.2.4'
    compile 'com.google.android.gms:play-services-maps:10.2.4'
    compile 'com.google.maps.android:android-maps-utils:0.5+'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    implementation 'com.cocoahero.android:geojson:1.0.1'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.google.code.gson:gson:2.8.1'
    compile 'com.android.support:design:25.3.1'
    implementation project(':vuforia')
    implementation project(':rajawali')
}

< code>Vuforia模块:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        preDexLibraries = false
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile files('libs/Vuforia.jar')
}

rajawali模块:

apply plugin: 'com.android.library'
apply plugin: 'jacoco'
apply plugin: 'signing'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        debug {
            testCoverageEnabled true
            minifyEnabled false
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }   
    lintOptions {
        abortOnError false
    }
}

dependencies {   
    androidTestCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'org.jetbrains:annotations-java5:15.0'
}

共有2个答案

毕衡
2023-03-14

首先,尝试删除项目中的 .gradle 文件夹。然后,您需要在 Linux 中使用以下命令检查依赖关系树中的依赖关系:

./gradlew app:dependencies

或者,如果您使用的是Windows,请尝试以下操作:

gradlew.bat app:dependencies

如果您在列表中发现重复的依赖项,您可以使用以下内容排除它:

compile('com.library.name:version') {
  exclude group: 'com.example', module: 'library'
}
卢普松
2023-03-14

最后,我能够解决问题。错误是由于Vuforia gradle中的Vuforia jar的两条路径而产生的。Vuforia Gradle中的以下两行实际上指向同一个库罐。

compile fileTree(include: ['*.jar'], dir: 'libs')
compile files('libs/Vuforia.jar')

我只是删除了第二次编译的< code>jar,它删除了我的错误。

 类似资料:
  • 错误:将字节码转换为dex时出错:原因:com.android.dex。DexException:多个dex文件定义Landroid/arch/lifecycle/LiveData$LifecycleBoundObserver; 我的 gradle 文件 **这就是错误,我明白了**

  • 项目清理和重建工作成功,但如果我想运行应用程序,我得到这样的错误。 错误:将字节码转换为Dex时出错:原因:Dex无法解析版本52字节码。这是由使用Java8或更高版本编译的库依赖项造成的。如果在库子模块中使用'java'gradle插件,请将targetCompatibility='1.7'sourceCompatibility='1.7'添加到该子模块的build.gradle文件中。 错误:

  • 我使用samsung knox sdk,正在更新knox版本(2.7.1)。这个错误在尝试编译我的应用程序时出现。 错误详细信息: 错误:将字节码转换为Dex时出错:原因:Dex无法解析版本52字节码。这是由使用Java8或更高版本编译的库依赖项造成的。如果在库子模块中使用'java'gradle插件,请将targetCompatibility='1.7'sourceCompatibility='

  • 清理和生成项目 将“sourceCompatibility=”1.7“targetCompatibility=”1.7“”添加到分级文件。 谁能建议一下如何解决这个问题。

  • 因此,在升级build.gradle(project)后运行项目时,我收到以下错误 至

  • 问题内容: 我有2个应用版本-专业版和精简版。它们都已经在 v1.01上上市。我正在尝试为两者发布v1.1。此更新包括 SwawrmConnect集成,以便使用其全球排行榜。 我首先要说我知道我没有正确维护我的代码。我 有2个完全独立的应用程序,它们可能共享90%的代码。我分别 维护它们,因为在一周或两到三周未能弄清楚 如何做一个库和共享代码之后,我放弃了,只是这样做了 。 SwarmConnec