2015-06-19 4 views
2

Я переношу проект из Eclipse в Android Studio и столкнулся с проблемой. У меня есть много библиотек модулей, которые являются общими для различных проектов, и некоторые из этих модулей библиотеки имеют одинаковое имя пакета, так что я в конечном итоге со следующей ошибкой:Несколько файлов dex определяют BuildConfig

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 моего приложения, но это только хуже, и строить стали жаловаться на других зависимостей ,

Есть ли способы обойти это без переименования имен пакетов?

ответ

1

Я решил это, изменив пакет в манифесте моих подмодулей, который до тех пор имел одно и то же имя для всех моих библиотек.

0

Основной проблема этой линии

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

Сначала попробуйте удалить AppCompatLibrary сверху места или из ЛИЭС папки

Этой ошибка происходит из-за того, когда есть две одинаковые библиотеки существует в единственных зависимости проектов.

+1

com.foo.bar.BuildConfig не находится в AppCompatLibrary. Кроме того, как вы можете видеть из моей диаграммы зависимостей, там нет посторонних зависимостей. И, как вы можете видеть из моей диаграммы зависимостей, я не использую AppCompatLibrary. – Catherine

+0

Эта ошибка возникает из-за наличия двух одинаковых библиотек в одной зависимости проектов @Catherine –

+1

У меня нет двух одинаковых библиотек в моих зависимостях. Вы можете видеть это выше в моем графике зависимостей. – Catherine