多个dex文件定义BuildConfig

时间:2015-06-19 02:17:35

标签: android android-studio

我正在将项目从Eclipse迁移到Android Studio并遇到了问题。我有很多在不同项目之间共享的库模块,其中一些库模块具有相同的包名,所以我最终得到以下错误:

AGPBI: {"kind":"SIMPLE","text":"com.android.dex.DexException: Multiple dex files define Lcom/foo/bar/BuildConfig;","position":{},"original":"com.android.dex.DexException: Multiple dex files define Lcom/foo/bar/BuildConfig;"}

我的依赖关系很好,所以这不是问题所在:

compile - Classpath for compiling the main sources.
+--- project :project1
|    +--- com.mixpanel.android:mixpanel-android:4.6.0
|    \--- com.google.android.gms:play-services-gcm:7.5.0
|         \--- com.google.android.gms:play-services-base:7.5.0
|              \--- com.android.support:support-v4:22.0.0
|                   \--- com.android.support:support-annotations:22.0.0
+--- project :facebook
|    \--- com.parse.bolts:bolts-android:1.1.4
+--- com.google.android.gms:play-services-location:7.5.0
|    \--- com.google.android.gms:play-services-maps:7.5.0
+--- project :project2
|    \--- project :project3
|         \--- project :project4
|              \--- project :project5
+--- project :project6
\--- project :project7

但是,当我在目录中搜索BuildConfig.java时,我得到以下结果:

./project1/build/generated/source/buildConfig/androidTest/debug/com/foo/bar/test/BuildConfig.java
./project1/build/generated/source/buildConfig/debug/com/foo/bar/BuildConfig.java
./project1/build/generated/source/buildConfig/release/com/foo/bar/BuildConfig.java
./project5/build/generated/source/buildConfig/androidTest/debug/com/foo/bar/test/BuildConfig.java
./project5/build/generated/source/buildConfig/debug/com/foo/bar/BuildConfig.java
./project5/build/generated/source/buildConfig/release/com/foo/bar/BuildConfig.java
./project4/build/generated/source/buildConfig/androidTest/debug/com/foo/bar/test/BuildConfig.java
./project4/build/generated/source/buildConfig/debug/com/foo/bar/BuildConfig.java
./project4/build/generated/source/buildConfig/release/com/foo/bar/BuildConfig.java

看来问题是我有几个共享命名空间的模块。有没有办法解决这个问题?我不想更改其他项目的命名空间。

在货运崇拜节目的经典展示中,我尝试添加:

dexOptions {
    preDexLibraries = false
}

到我的应用程序的build.gradle中的android块,但这只会让它变得更糟,并且构建开始抱怨其他依赖项。

有没有办法解决这个名称重命名的问题?

3 个答案:

答案 0 :(得分:4)

我通过更改子模块清单中的包来解决这个问题,直到那时我的所有库都有相同的名称。

答案 1 :(得分:0)

主要问题是这一行

Multiple dex files define Lcom/foo/bar/BuildConfig;

首先尝试从上方位置或从libs文件夹中删除AppCompatLibrary

发生此错误的原因是单个项目依赖项中存在两个相同的库。

答案 2 :(得分:0)

我定义了一个库项目。我将此库项目作为我的主项目的依赖项包含在内。 BuildConfig 具有相同的包。

图书馆项目清单有

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.<companyname>.library.baseapp">

主要项目

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.<companyname>.library.baseapp">

我得到的错误是

baseapp_android/build/.transforms/23204dbdbf5b7208d6261a7b35e24e97/classes/classes.dex
Type com.<companyname>.library.baseapp.BuildConfig is defined multiple times: /<path>/baseapptest_android/baseapp_android/build/.transforms/23204dbdbf5b7208d6261a7b35e24e97/classes/classes.dex, /<path>/baseapptest_android/baseapp_test/build/intermediates/project_dex_archive/debug/out/com/<companyname>/library/baseapp/BuildConfig.dex
com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: /Users/jsiddharth/AndroidStudioProjects/baseapptest_android/baseapp_android/build/.transforms/23204dbdbf5b7208d6261a7b35e24e97/classes/classes.dex
com.android.tools.r8.utils.b: Type com.<companyname>.library.baseapp.BuildConfig is defined multiple times: /<path>/baseapp_android/build/.transforms/23204dbdbf5b7208d6261a7b35e24e97/classes/classes.dex, /<path>/baseapptest_android/baseapp_test/build/intermediates/project_dex_archive/debug/out/com/<companyname>/library/baseapp/BuildConfig.dex
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 

我将主项目清单更改为

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.<companyname>.library.baseapp_test">

它奏效了。