web-dev-qa-db-de.com

Mehrere dex-Dateien definieren <mein Paket>/BuildConfig. Die Ursache kann nicht gefunden werden:

Ich verwende das neue Gradle-Build-System und stehe vor dem folgenden 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)

Ich drücke die Abhängigkeiten ein, ich kann nichts sehen, hier sind sie:

 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

Ich habe versucht zu überprüfen, dass es sich bei dem Problem nicht um eine doppelte Unterstützungsbibliothek handelt, und ich habe versucht, Folgendes hinzuzufügen:

compile ('com.google.Android.gms:play-services:5.0.77'){
    exclude module: 'support-v4'
}

Dies hat zu Fehlern geführt, dass einige der support-v4-Bibliotheksklassen nicht gefunden werden konnten, sodass diese Bibliothek nicht von einem anderen Ort aus kompiliert wird.

Ich habe daran gedacht, dass dieses Problem die Ursache sein könnte, weil ich mit Flavors in oreder mehrere Versionen meiner Anwendung mit unterschiedlichen Ressourcendateien erstellt.

Und wenn ich mir die Datei ansehe, die im Fehler ist, sehe ich Folgendes:

**
* 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";
}

Das Paket in der Datei und das im String-Wert angegebene Paket stimmen also nicht überein.

Kann jemand Probleme in meiner Konfiguration sehen, die dieses Problem verursachen könnten?

29
Emil Adz

In meinem Fall trat ein ähnlicher Fehler auf, weil in AndroidManifest.xml-Dateien 2 Module mit demselben Paketnamen vorhanden waren. Die Verwendung verschiedener Paketnamen in den Modulen löste das Problem.

Dasselbe passiert, wenn ein Bibliotheksglas zweimal (oder mehrmals) in mehreren Modulen als Abhängigkeit enthalten ist. In diesem Fall werden in der Fehlermeldung doppelte Konfigurationen angegeben, die nach dem Paketnamen der Bibliothek benannt sind. Ich löste es, indem ich die Bibliothek als eine Abhängigkeit in ein Modul einbezog, und das zweite Modul hatte in Abhängigkeit das erste Modul.

67
Mixaz

Fügen Sie dies Ihrem build.gradle hinzu:

Android {
    dexOptions {
        preDexLibraries = false
    }
}

Ich vermute, auf diese Weise gibt es keinen Konflikt mit BuildConfig.Java.

EDIT:

Warum die oben genannten Arbeiten. .__ Android Studio wird zunächst Dex die Bibliotheken vor dex-ing des App-Modul. Wenn Sie ein Bibliotheksmodul mit dem gleichen Paketnamen wie Ihr App-Modul haben, führt dieses "Vorab-Dexing" zur Erstellung eines BuildConfig.Java im selben Paket wie für die App.

Nicht "pre-dexing" wird verlangsamt den Build-Prozess ein wenig . Ich empfehle Ihnen, stattdessen den Paketnamen Ihrer Bibliothek zu ändern. 

21
iceman

Wenn ich das Projekt einfach sauber mache, wurde dieser Fehler behoben. 

11
Steve D.

Ich habe dieses Problem beim Signieren meiner instant apk..__ bekommen.

fehlerhaftes modul/app/manifest.xml

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

gut: modul/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">

Fügen Sie einfach die .app am Ende des Paketnamens hinzu

2
Pablo Cegarra

Wenn Sie NewRelic verwenden, aktualisieren Sie es mindestens auf 5.21.1.

0
Sami