Dans la dernière version d'ADT (r17), une constante générée a été ajoutée BuildConfig.DEBUG
, définie en fonction du type de construction. Le problème que j'ai est qu'il n'est jamais défini sur false, je m'attendais à ce qu'il change en faisant "Android Tools -> Export Signed Application Package" mais ce n'est pas le cas pour moi.
Alors, comment changer le type de build?
Ajout d'une fonctionnalité qui vous permet d'exécuter du code uniquement en mode débogage. Les builds génèrent désormais une classe appelée BuildConfig contenant une constante DEBUG qui est automatiquement définie en fonction de votre type de build. Vous pouvez vérifier la constante (BuildConfig.DEBUG) dans votre code pour exécuter des fonctions de débogage uniquement
Réponses:
Actuellement, vous pouvez obtenir le comportement correct en désactivant "Construire automatiquement", en nettoyant le projet puis en l'exportant via "Outils Android -> Exporter le package d'application signé". Lorsque vous exécutez l'application
BuildConfig.DEBUG
doit être false.la source
Avec Eclipse , je désactive toujours l'option "Construire automatiquement" avant d'exporter l'application en version. Ensuite, je nettoie le projet et l'exporte. Sinon, il démarre la compilation en mode débogage et la valeur de BuildConfig.DEBUG peut être incorrecte.
Avec Android Studio , j'ajoute simplement ma propre variable personnalisée dans le build.gradle:
Lorsque je construis le projet, le BuildConfig.java est généré comme suit:
Ensuite, dans mon code, je peux utiliser:
Je recommande de nettoyer après avoir basculé la version debug / release.
la source
Cela ne fonctionne pas correctement:
Problème 27940 : BuildConfig.DEBUG est "true" pour le package d'application exporté
Il est décevant qu'ils publient parfois des fonctionnalités de buggy.
la source
Cela fonctionne, mais notez que le fichier de code ne change jamais, même lors de l'exportation du fichier signé. Le processus d' exportation change la valeur de cette variable en false, ce qui peut vous donner la fausse impression qu'elle ne fonctionne pas. J'ai testé cela avec des instructions de journalisation comme
Lors des tests, mes instructions Log ne produisent plus de sortie.
la source
Vérifiez
imports
, parfois BuildConfig est importé de n'importe quelle classe de bibliothèque sans le vouloir. Par exemple:Dans ce cas, BuildConfig.DEBUG retournera toujours false ;
Dans ce cas, BuildConfig.DEBUG renverra votre variante de construction réelle .
ps Je viens de copier celui-ci de ma réponse ici: BuildConfig.DEBUG toujours false lors de la construction de projets de bibliothèque avec gradle
la source
android.support.compat
. Je suppose que c'est une autre raison pour définir simplement votre propre champ avec un nom différent.De Préparation à la sortie :
Plus d'informations sont en suivant le lien.
la source
La solution pour moi:
C'est du travail en r20
la source
Je voudrais proposer une solution de contournement simple si vous utilisez proguard lors de l'exportation APK.
Proguard fournit un moyen de supprimer les appels à des fonctions spécifiques en mode de libération. Tous les appels de journaux de débogage peuvent être supprimés avec le paramètre suivant dans
proguard-project.txt
.Et l'optimisation s'installe
project.properties
.Avec cela, vous n'avez pas besoin de vous soucier de tout calcul String inutile passant au journal de débogage vers lequel @Jeremyfa a pointé. Les calculs sont simplement supprimés dans la version de version.
Ainsi, la solution de contournement pour BuildConfig.DEBUG utilise la même fonctionnalité de proguard comme suit.
Et après l'installation
proguard-project.txt
.Je préférerais l'utiliser à la désactivation de l'
Build Automatically
option, car cela ne dépend pas du paramètre IDE individuel du constructeur, mais est conservé en tant que fichier engagé qui est partagé entre les développeurs.la source
Pour autant que je sache, ne fonctionne pas correctement ( problème Android 22241 )
J'ai eu quelques problèmes sur un projet (en travaillant avec Eclipse), cette constante n'était pas définie sur true lors de l'exportation d'un APK signé de mon projet :(
J'adorerais entendre que ça marche
la source
un bon moyen est de créer votre propre classe:
la source
J'ai vu un comportement étrange lié au moment où les valeurs de BuildConfig sont définies sur leurs valeurs finales. Cela peut avoir quelque chose à voir avec votre problème.
L'explication simple est que les valeurs par défaut sont définies initialement avant l'exécution de Proguard, puis après l'exécution de Proguard, le fichier BuildConfig est régénéré avec les valeurs appropriées. Cependant, Proguard a déjà optimisé votre code à ce stade et vous rencontrez des problèmes.
Voici un bug que j'ai créé contre Gradle. https://code.google.com/p/android/issues/detail?id=182449
la source