2014-04-16 18 views
22

Android Lint si lamenta di assert() in uso e consiglia di utilizzare i controlli condizionali BuildConfig.DEBUG.Cosa sono i "controlli condizionali BuildConfig.DEBUG"?

Ho capito perfettamente perché affermare non sono sicuri da usare su Android, ma cosa esattamente sono "controlli condizionali BuildConfig.DEBUG"?

Come si modifica il seguente codice di esempio?

Context ctx = getContext(); 
assert (ctx instanceof FragmentActivity); 
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager(); 

risposta

24

Credo che quello che non lasci residui sta cercando di dire è che aggiungono un assegno di BuildConfig.DEBUG per assert

se (BuildConfig.DEBUG)

assert (CTX instanceof FragmentActivity) ;

modo che assert funziona solo quando si esegue il test l'applicazione, ma il rilascio di versioni affermano non sarà chiamato

BuildConfig.DEBUG sarà falso quando si esporta una build di rilascio.

Edit: Sembra che si dovrebbe fare qualcosa di simile di seguito invece di usare affermare

if(BuildConfig.DEBUG && !(ctx instanceof FragmentActivity)) 
     throw new RuntimeException(); 

invece di affermare.

fonte: http://tools.android.com/recent/androidstudio045released

Alcuni nuovi controlli niente, e in particolare quella che utilizza le bandiere della parola chiave asserzione. Questo non funziona in modo affidabile sui dispositivi e dovresti usare BuildConfig.DEBUG per eseguire controlli condizionali.

+1

Ma il codice assert() non viene chiamato/non completamente implementato su dalvik, quindi anche quando si esegue un test (su un emulatore), assert() non deve essere utilizzato. –

+1

AFAIK, assert può essere abilitato utilizzando debug.assert = 1 puntello del sistema – nandeesh

+1

Secondo questo post http://code.google.com/p/android/issues/detail?id=65183 "[assert()] non è mai stato supportato a Dalvik, la proprietà del sistema esiste, ma è praticamente ignorata in vari punti, c'è una ragione per cui questo non è documentato o reso facile da usare. " –