多个 dex 文件定义 BuildConfig

Cat*_*ine 3 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;"}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

但是,当我在我的目录中搜索 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
Run Code Online (Sandbox Code Playgroud)

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

在 Cargo cult 编程的经典展示中,我尝试添加:

dexOptions {
    preDexLibraries = false
}
Run Code Online (Sandbox Code Playgroud)

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

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

Cat*_*ine 7

我通过更改子模块清单中的包解决了这个问题,在此之前,我的所有库都具有相同的名称。