116 votes

Quand ADT définit-il BuildConfig.DEBUG à false ?

Dans la dernière version d'ADT (r17) une constante générée a été ajoutée BuildConfig.DEBUG qui est défini en fonction du type de construction. Le problème que j'ai est qu'il n'est jamais défini à 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 construction ?

Ajout d'une fonctionnalité qui vous permet d'exécuter certains codes uniquement en mode débogage. Les builds génèrent maintenant 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 fonctions de débogage uniquement

2 votes

BuildConfig.java est généré automatiquement par les outils de construction Android, et est placé dans le dossier gen. L'APK signé devrait avoir BuildConfig.DEBUG = false. Cela ne devrait pas être un problème pour vous. Vous ne devriez pas avoir à toucher manuellement ce fichier...

1 votes

Si vous utilisez gradle pour libérer ce drapeau est 100% fiable. Donc quand vous faites un ./gradlew assembleDebug c'est vrai et quand vous faites assembleRelease c'est faux.

56voto

smith324 Points 6423

Actuellement, vous pouvez obtenir le comportement correct en désactivant "Build Automatically", en nettoyant le projet puis en l'exportant via "Android Tools -> Export Signed Application Package". Lorsque vous exécutez l'application BuildConfig.DEBUG devrait être faux.

0 votes

Cassé aussi. Ce qui a pour conséquence d'afficher tous les messages Log.d qui devraient être omis par ce drapeau. ps. où déposer un rapport de bug ?

0 votes

La mine est toujours fausse, même en déboguant

34voto

yuku Points 15705

Il ne fonctionne pas correctement :

Numéro 27940 : BuildConfig.DEBUG est "true" pour le paquet d'application exporté

Il est décevant qu'ils publient parfois des fonctionnalités boguées.

9 votes

Veuillez vous rendre sur le lien vers le problème mentionné ci-dessus et lui attribuer une étoile si vous souhaitez que le problème soit résolu.

11voto

pbhowmick Points 199

Cela fonctionne, mais notez que le fichier de code ne change jamais, même en exportant le fichier signé. L'exportation processus change la valeur de cette variable en false, ce qui pourrait vous donner la fausse impression que cela ne fonctionne pas. J'ai testé cela avec des instructions de journalisation comme

if (com.mypackage.BuildConfig.DEBUG)
            Log.d(TAG, location.getProvider() + " location changed");

Lors des tests, mes instructions Log ne produisent plus aucune sortie.

2 votes

J'ai changé les instances de BuildConfig.DEBUG en com.mypackage.BuildConfig.DEBUG, puis j'ai réexécuté l'application... et elle retournait toujours true. Peut-être ai-je mal compris votre suggestion.

1 votes

Ce que je dis, c'est que le code ne changera PAS. Cependant, com.mypackage.BuildConfig.DEBUG sera mis à False après la compilation. Essayez de tester une déclaration de journalisation comme ci-dessus (choisissez une chaîne arbitraire à journaliser), faites l'exportation et ensuite exécutez-la. Voyez si adb affiche la déclaration de journalisation. Je suis prêt à parier qu'adb n'affichera pas cette déclaration de journalisation, ce qui signifie que DEUBUG a été mis à faux.

1 votes

Je ne suis pas sûr de comprendre ce que vous voulez dire par "le code"... cependant, je dirai que faire un nettoyage avant d'exporter l'APK (comme suggéré dans la réponse acceptée) a fait en sorte que BuildConfig.DEBUG et com.mypackage.BuildConfig.DEBUG rapportent faux comme prévu.

6voto

peter Points 377

Desde Préparation de la libération :

Désactiver la journalisation et le débogage

Assurez-vous de désactiver la journalisation et de désactiver l'option de débogage. avant de construire votre application en vue de sa diffusion. Vous pouvez désactiver la la journalisation en supprimant les appels aux méthodes Log dans vos fichiers sources. Vous pouvez également désactiver le débogage en supprimant l'attribut Android:debuggable de la balise de la balise dans votre fichier manifeste, ou en définissant l'attribut Android:debuggable à false dans votre fichier manifest. De même, supprimez tous les fichiers journaux ou les fichiers de test statiques créés dans votre projet.

De plus, vous devez supprimer tous les appels de traçage Debug que vous avez ajoutés à votre fichier code, tels que les appels de méthode startMethodTracing() et stopMethodTracing(). et stopMethodTracing().

Vous trouverez plus d'informations en suivant le lien.

1 votes

Je pensais que ce processus se faisait maintenant automatiquement au moment de la construction : developer.Android.com/tools/sdk/tools-notes.html

0 votes

Provoque une erreur de compilation : "Évitez de coder en dur le mode de débogage ; le fait de ne pas l'indiquer permet aux versions de débogage et de publication d'en attribuer un automatiquement".

5voto

e.shishkin Points 419

La solution pour moi :

  1. Projet -> Construire automatiquement
  2. Projet -> Nettoyer
  3. Projet -> Construire
  4. Projet d'exportation d'une application Android

C'est un travail dans la r20

1 votes

Cela vient de fonctionner pour moi (avec la dernière version de l'ADT, je suppose). Peut-être que le nettoyage a réglé le problème, je ne suis pas sûr.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X