2015-04-27 15 views
7

Osservando la classe BuildConfig generata da Android Studio e il plugin Gradle si può vedere che il campo BuildConfig.DEBUG viene inizializzato utilizzando la chiamata Boolean.parseBoolean(String) invece di utilizzare uno dei valori letterali booleani true o false.Perché la classe BuildConfig utilizza Boolean.parseBoolean() anziché i valori letterali?

quando aggiungo generazione personalizzata proprietà utilizzando Gradle vorrei semplicemente fare in questo modo:

android { 
    buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true' 
} 

Ma guardando il generato BuildConfig mi dice che Google ha adottato un approccio diverso con la bandiera DEBUG:

public final class BuildConfig { 
    public static final boolean DEBUG = Boolean.parseBoolean("true"); 

    // more fields here 

    // Fields from build type: debug 
    public static final boolean SOME_SETTING = true; 
} 

Qual è il vantaggio dell'uso di Boolean.parseBoolean(String) anziché di valori letterali?

+2

Hai fatto la domanda e risposto allo stesso secondo? Obiettivo sbloccato. Richiedi il tuo distintivo sovrumano. – Rajesh

+0

http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –

+0

C'è una casella di controllo per questo, quando si fa una domanda. Volevo solo condividere le mie conoscenze con la community ;-) –

risposta

15

I valori letterali booleani all'interno della classe BuildConfig generano avvisi IDE quando li si utilizza nel codice (almeno all'interno di Android Studio). Ad esempio quando lo si utilizza in un'espressione booleana Android Studio (erroneamente) consiglia di semplificare l'espressione booleana perché il valore costante è sempre lo stesso (per la variante di build corrente che è).

Android Studio producing code warning because of missing build configuration knowledge

Questo avviso è solo perché Android Studio non sa che il valore finale all'interno BuildConfig.SOME_SETTING può essere diverso per altre varianti di build.

Per mantenere il codice pulito e privo di avvertimenti si può dire Android Studio di ignorare questo avvertimento specifico aggiungendo un commento IDE come questo:

Add code comments to ignore IDE warnings

Ma ancora una volta questo aggiungerà un po 'di rumore al codice e ridurre la leggibilità. Usando il metodo Boolean.parseBoolean(String) per inizializzare il tuo campo costante, in realtà stai ingannando Android Studio che non sarà più in grado di analizzare completamente le espressioni booleane, quindi non genererà più avvisi.

Use parseBoolean(String) to prevent IDE warnings

Questo approccio è molto utile, in quanto mantiene il vostro codice pulito e leggibile, senza spegnere importante analisi del codice e la generazione di avvertimenti.

+1

Forse mi manca qualcosa ma cosa, esattamente, si aggiunge a build.gradle per dichiarare un valore BuildConfig usando parseBoolean? – Tunga

+2

@Tunga prova a seguire 'buildConfigField 'boolean', 'SOME_FLAG', 'Boolean.parseBoolean (" false ")'' dentro 'defaultConfig' o qualsiasi configurazione di tipo flavor o build. –

+0

Ah, probabilmente mi mancavano le virgolette esterne, grazie. Alla fine ho risolto il problema usando sostituzioni manifeste. – Tunga

Problemi correlati