ProGuard может удалять простые постоянные аргументы (строки, целые числа и т. Д.). Так что в этом случае код и строковая константа должны полностью исчезнуть:
Log.d("This is a debug statement");
Однако, возможно, вы наблюдали проблему с некоторым кодом, подобным этому:
Log.d("The answer is "+answer);
После компиляции это фактически соответствует:
Log.d(new StringBuilder().append("The answer is ").append(answer).toString());
ProGuard версии 4.6 может упростить это до:
new StringBuilder().append("The answer is ").append(answer).toString();
Таким образом, ведение журнала прошло, но шаг оптимизации по-прежнему оставляет некоторые ошибки. На удивление сложно упростить это без каких-либо более глубоких знаний о классе StringBuilder. Что касается ProGuard, он может сказать:
new DatabaseBuilder().setup("MyDatabase").initialize(table).close();
Для человека код StringBuilder, очевидно, может быть удален, но код DatabaseBuilder, вероятно, не может. ProGuard требует анализа побега и нескольких других методов, которых пока нет в этой версии.
Что касается решения: вы можете создать дополнительные методы отладки, которые принимают простые аргументы, и позволить ProGuard удалить их:
MyLog.d("The answer is ", answer);
В качестве альтернативы, вы можете попробовать поставить перед каждым отладочным оператором префикс с условием, которое ProGuard может позже оценить как ложное. Эта опция может быть немного более запутанной, требуя некоторой дополнительной опции -assumenosideeffects для метода инициализации для флага отладки.