web-dev-qa-db-fra.com

Android gradle buildTypes: classe en double

Je convertis mon application pour utiliser gradle et j'essaie d'utiliser les buildTypes. J'ai une classe Constants que je souhaite modifier pour la construction de ma version. J'ai donc un fichier à src/main/Java/my/package/name/Constants.Java et à src/release/Java/my/package/name/Constants.Java.

Lorsque j'essaie de construire ceci, gradle me dit que la construction a échoué sur le fichier Constants dans mon build version, avec l'erreur qu'il s'agit d'une classe dupliquée.

J'ai aussi essayé d'ajouter un sourceSet différent pour cela dans mon build.gradle comme ceci:

sourceSets {
    main {
        Java.srcDirs = ['src/main/Java'];
        //...
    }
    release {
        Java.srcDirs = ['src/release/Java'];
    }
}

Mais cela me donne toujours la même erreur. Alors je me demande, qu'est-ce que je fais mal ici?

32
Arne517

Vous ne pouvez pas avoir une classe dans main et release. Vous devez le scinder en quelque chose comme debug et release.

gradle fusionnera les ensembles source pour chaque buildType avec main.
C'est la raison pour laquelle la classe est dupliquée dans votre build release.

La règle est donc la suivante: placez une classe dans main ou dans every buildType mais pas les deux.

75
flx

La réponse de "correctif" m'a aidé sur le chemin, mais j'ai eu une erreur de la part de Gradle principal, disant qu'une constante manquait (dans ma classe Config). Ceci depuis que j'ai eu ma classe uniquement en version payante et gratuite et non en version principale. Impossible de trouver la classe de configuration . Je ne suis pas sûr qu'il s'agisse d'un bogue dans Studio ... Je l'ai finalement résolu avec ce qui suit:

buildTypes {

    release {
        ...
        buildConfig "public static final boolean XYZ = false;"
    }

}

Et au lieu d'utiliser ma constante de classe Config.XYZ, j'ai utilisé buildConfig.XYZ

0
powder366