I'm using the new gradle build system and I'm facing the following problem:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/kibo/mobi/BuildConfig;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
Priniting the dependencies I can't see anything, here they are:
firstDebugCompile - ## Internal use, do not manually configure ##
\--- KiboGradle:KiboSDK:unspecified
+--- KiboGradle:TextInputAPI:unspecified
+--- KiboGradle:VoiceImeUtils:unspecified
+--- com.google.android.gms:play-services:5.0.77
| \--- com.android.support:support-v4:19.1.0
+--- com.squareup.picasso:picasso:2.3.2
+--- com.google.code.gson:gson:2.2.4
\--- com.crittercism:crittercism-android-agent:4.5.1
I tried to verify that the problem is not a duplicate support library so I tried to add:
compile ('com.google.android.gms:play-services:5.0.77'){
exclude module: 'support-v4'
}
Which resulted in errors that some of the support-v4
library classes can't be found, so this library not getting compiled from any other location.
One thing I had in mind that could cause this problem is the fact that I using the Flavors
feautre in oreder to create several versions of my application with different resourse files.
And when I look at the file that is in the error I see this:
**
* Automatically generated file. DO NOT MODIFY
*/
package com.kibo.mobi;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String PACKAGE_NAME = "com.kibo.mobi.test.official";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "liverpool";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}
So the package in of the file and the package specified in String value are not the same.
Can anyone see any issues in my configuration that could cause this problem?
In my case the similar error happened because there were 2 modules with the same package name in AndroidManifest.xml files. Using different package names in the modules solved the problem.
Also the same thing happens when a library jar is being included twice (or more times) in several modules, as a dependency. In this case error message says about duplicate configs named after that library's package name. I solved it with including the library as a dependency in one module, and the second module had in dependencies the first module.