So utilizzando Proguard è possibile rimuovere java dichiarazioni Log.d di debug da versioni di rilascio https://stackoverflow.com/a/13327603/1527440NDK come rimuovere dichiarazioni registro di debug sul rilascio
Ma c'è modo per rimuovere le dichiarazioni di registro di debug dal codice NDK C/C++.
Sto usando una dichiarazione definire a chiamarli in NDK
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
Ma con NDEBUG la chiamata al LOGD sarebbe ancora nel binario, lasciando la stringa di messaggio della chiamata da estrarre da potenziali hacker. C'è un modo più semplice di usare #ifdef rispetto ad ogni chiamata al registro D? grazie – pt123
'LOGD' è una macro, non una funzione. Il preprocessore lo rimuoverà prima che il compilatore lo veda. Sarà come se la chiamata non si è verificata affatto. Inoltre, non dovresti circondare ogni chiamata a 'LOGD'. Questa è la * definizione * di 'LOGD', quindi devi farlo una sola volta per ogni definizione data di' LOGD'. – Joel
Più precisamente, il preprocessore è il * solo * modo di eliminare le cose dal binario finale. Qualsiasi cosa basata nella lingua memorizzerà i tuoi valori letterali di stringa nella memoria statica. Il metodo che ho mostrato rimuove completamente le stringhe dal tuo codice sorgente. Il compilatore non includerà nel file binario ciò che non vede mai. E 'NDEBUG' è la base di 'assert'. Le asserzioni vengono rimosse dalle versioni di rilascio. – Joel