web-dev-qa-db-fra.com

Plusieurs fichiers dex définissent <mon paquet>/BuildConfig, la cause n’est pas trouvée:

J'utilise le nouveau système de compilation Gradle et je suis confronté au problème suivant:

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)

En prédisant les dépendances, je ne vois rien, les voici:

 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

J'ai essayé de vérifier que le problème n'était pas une bibliothèque de support dupliquée alors j'ai essayé d'ajouter:

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

Cela a entraîné des erreurs qui empêchaient de trouver certaines classes de la bibliothèque support-v4. Cette bibliothèque n'a donc pas été compilée à partir d'un autre emplacement.

Ce qui me donnait à l’esprit ce qui pourrait causer ce problème est le fait que j’utilise le Flavors feautre dans oreder pour créer plusieurs versions de mon application avec différents fichiers de ressource.

Et quand je regarde le fichier qui est dans l'erreur, je vois ceci:

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

Ainsi, le package dans le fichier et le package spécifié dans Valeur chaîne ne sont pas les mêmes.

Est-ce que quelqu'un peut voir des problèmes dans ma configuration qui pourraient causer ce problème?

29
Emil Adz

Dans mon cas, l'erreur similaire s'est produite car il y avait 2 modules portant le même nom de package dans les fichiers AndroidManifest.xml. L'utilisation de noms de packages différents dans les modules a résolu le problème.

De même, la même chose se produit lorsqu'un jar de bibliothèque est inclus deux fois (ou plus) dans plusieurs modules, en tant que dépendance. Dans ce cas, un message d'erreur indique à propos des configurations en double nommées d'après le nom du paquet de cette bibliothèque. Je l'ai résolu en incluant la bibliothèque en tant que dépendance dans un module, et le second module avait en dépendances le premier module.

67
Mixaz

Ajoutez ceci à votre build.gradle:

Android {
    dexOptions {
        preDexLibraries = false
    }
}

Je suppose que de cette façon, il n’ya pas de BuildConfig.Java en conflit.

MODIFIER:

Pourquoi ce qui précède fonctionne-t-il: Android Studio utilisera d’abord dex les bibliothèques avant de décompresser le module de l’application. Si vous avez un module de bibliothèque avec le même nom de package que votre module d'application, cette "pré-analyse" entraînera la création d'un BuildConfig.Java dans le même package que pour l'application.

Ne ralentissez pas un peu votre processus de construction , je vous suggère donc de changer le nom du paquet de votre bibliothèque à la place. 

21
iceman

Pour moi, le simple fait de nettoyer le projet a effacé cette erreur. 

11
Steve D.

Je commençais à avoir ce problème en signant mon instant apk . Le problème:

module/app/manifest.xml incorrect

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

bon: 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">

Il suffit d'ajouter le .app à la fin du nom du paquet

2
Pablo Cegarra

Si vous utilisez NewRelic, mettez-le à jour avec au moins 5.21.1.

0
Sami