将 Eclipse ADT 项目迁移到 Android Studio:错误多个 dex 文件定义 Landroid/support/v4

Migrate Eclipse ADT project to Android Studio: Error Multiple dex files define Landroid/support/v4

我有一个用 Eclipse ADT 制作的旧 Android 项目,我正在尝试将它迁移到 Android Studio。 我遵循了几个指南和 howtos,也许我几乎已经迁移了它。

当我尝试构建它时出现以下错误:

错误:将字节码转换为 dex:Cause 时出错:com.android.dex.DexException:多个 dex 文件定义 Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

我已经阅读了很多解决方案,但 none 似乎适合我的问题。 但也许这个 answer 适合我的情况...

这是 Eclipse 项目资源管理器中的项目状态:

这里是 Android Studio 项目视图中迁移的项目:

也许问题出在每个 gradle 脚本的 dependencies 属性:

app-app:

dependencies {
    compile project(':androidsupportv7appcompat')
    compile project(':library')
    compile files('libs/android-support-v4.jar')
}

androidsupportv7appcompat:

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/android-support-v7-appcompat.jar')
}

googleplayservice_lib:

dependencies {
    compile files('libs/google-play-services.jar')
}

库:(用于标记聚类的 Google 地图库)

dependencies {
    compile project(':googleplayservices_lib')
    compile files('libs/android-support-v4.jar')
}

您知道这些依赖项配置是否有问题吗? 否则,可能是什么原因?

在我的一个旧项目中,我不得不将它放在应用程序部分下的 gradle 文件中

multiDexEnabled 在默认配置中为真,然后在下面添加 dex 选项...也许这会有所帮助。

defaultConfig { 
    applicationId "xxx"
    minSdkVersion 14
    targetSdkVersion 24
    versionCode 4
    versionName "2.2"
    multiDexEnabled true   
}

dexOptions {
    javaMaxHeapSize "2g"
}

首先,您应该从 Android Studio 项目中删除支持库模块。而是向您的应用 gradle 构建文件添加依赖项。如果您的库使用支持库中的组件,其构建文件也应该具有适当的依赖项。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
}

请务必从您的 lib 文件夹中删除支持库 JAR 文件。

同样,您应该为 Google Play 服务添加依赖项。

使用 Gradle 进行依赖管理是迁移到 Android Studio 的众多优势之一。如果库模块不是你写的,你也应该找到正确的 take 依赖添加到你的构建文件中,而不是你现在有的模块。