Я считаю, что гораздо более простое решение - забыть обо всех if
проверках повсюду и просто использовать ProGuard, чтобы избавиться от них. любые Log.d()
или Log.v()
вызовы методов, когда мы вызываем нашу цель Ant release
.
Таким образом, у нас всегда есть отладочная информация, выводимая для обычных сборок, и нам не нужно вносить какие-либо изменения в код для сборок выпуска. ProGuard также может выполнять несколько проходов по байт-коду для удаления других нежелательных операторов, пустых блоков и может автоматически встраивать короткие методы, где это необходимо.
Например, вот очень простая конфигурация ProGuard для Android:
-dontskipnonpubliclibraryclasses
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
Таким образом, вы должны сохранить это в файл, а затем вызвать ProGuard из Ant, передав свой только что скомпилированный JAR и JAR-файл платформы Android, который вы используете.
См. Также примеры в руководстве ProGuard.
Обновление (спустя 4,5 года): в настоящее время я использую Timber для ведения журнала Android.
Это не только немного лучше, чем реализация по умолчанию Log
- тег журнала устанавливается автоматически, и в него легко записывать отформатированные строки и исключения - но вы также можете указать другое поведение ведения журнала во время выполнения.
В этом примере операторы ведения журнала будут записаны в logcat только в отладочных сборках моего приложения:
Древесина настраивается моим Application
onCreate()
методом:
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
Тогда где-нибудь еще в моем коде я могу легко войти:
Timber.d("Downloading URL: %s", url);
try {
// ...
} catch (IOException ioe) {
Timber.e(ioe, "Bad things happened!");
}
См. Древесина sample app для более сложного примера, где все операторы журнала отправляются в logcat во время разработки, а в производственной среде операторы отладки не регистрируются, но сообщения об ошибках автоматически передаются в Crashlytics.
person
Christopher Orr
schedule
17.03.2010
sed 's_^\(\s*Log\.\)_;//'`date|tr -s \ -`'\1_g'
. - person yingted   schedule 06.01.2012