Multiple dex files define <my package>/BuildConfig, can't find the cause:

34,075

Solution 1

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.

Solution 2

Add this to your build.gradle:

android {
    dexOptions {
        preDexLibraries = false
    }
}

I suppose this way there is no conflicting BuildConfig.java.

EDIT:

Why the above works: Android studio will first dex the libraries before dex-ing the app module. If you have a library module with the same package name as your app module, this 'pre-dexing' will result in the creation of a BuildConfig.java in the same package as for the app.

Note: 'pre-dexing' will slow down your build process a bit so I suggest that you change your library's package name instead.

Solution 3

For me, simply doing a clean on the project cleared this error.

Solution 4

I was getting this problem signing my instant apk. The problem:

bad module/app/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.stackoverflow">

good: module/app/manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.stackoverflow.app">

Just adding the .app at the end of the package name

Share:
34,075
Emil Adz
Author by

Emil Adz

Education: B.S. Computer Science, 2012, HIT. Occupation: Mobile Architect &amp; Co-Founder at Digital Cherry Ever seen a dog chase its tail? Now that's an infinite loop ; ) #SOreadytohelp

Updated on November 28, 2020

Comments

  • Emil Adz
    Emil Adz over 3 years

    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?