Отключить вывод LogCat ПОЛНОСТЬЮ в версии Android-приложения?

Отключение вывода LogCat моего собственного приложения до выпуска приложения на рынок является простым. Я также знаю, как выборочно фильтровать сообщение LogCat по тегу и / или идентификатору для удобства моего отладки.

Но теперь меня интересует то, что может быть намного сложнее (возможно, невозможно?): Отключить все выходные данные LogCat, в том числе, особенно те, которые поступают от сторонних сервисов, таких как TtsService, GoogleLoginService и т. Д.

Это возможно?

Чтобы уточнить: я не заинтересован в фильтрации сообщений для себя. Я заинтересован в отключении сторонних сообщений для тех, кто загружает мое приложение с Android Market. Это возможно?

Solutions Collecting From Web of "Отключить вывод LogCat ПОЛНОСТЬЮ в версии Android-приложения?"

Вы можете использовать ProGuard для полного удаления любых строк, где возвращаемое значение не используется, сообщая ProGuard о том, что проблем не будет.

Следующий фрагмент proguard.cfg дает указание удалить вызовы Log.d, Log.v и Log.i.

-assumenosideeffects class android.util.Log { public static *** d(...); public static *** w(...); public static *** v(...); public static *** i(...); } 

Конечным результатом является то, что эти строки журнала не находятся в вашем apk release, поэтому любой пользователь с logcat не будет видеть журналы d / v / i.

Если вы не используете proguard, вам нужно самому управлять журналом, а в файле манифеста сделать dubuggable false

 <application android:name="MyApplication" android:icon="@drawable/gift" android:label="@string/app_name" android:debuggable="@bool/build_log"> 

Здесь мой пользовательский класс журнала

 public class Lol { public static final boolean ENABLE_LOG = true & MyApplication.sDebug; private static final boolean DEBUG = true & ENABLE_LOG; private static final boolean VERBOSE = true & ENABLE_LOG; private static final boolean TEMP = true & ENABLE_LOG; private static final boolean WARNING = true & ENABLE_LOG; private static final boolean INFO = true & ENABLE_LOG; private static final boolean ERROR = true & ENABLE_LOG; public static void obvious(String tag, String msg) { if (DEBUG) { msg = "*********************************\n" + msg + "\n*********************************"; Log.d(tag, msg); } } public static void d(String tag, String msg) { if (DEBUG) Log.d(tag, msg); } public static void d(boolean bool, String tag, String msg) { if (TEMP&bool) Log.d(tag, msg); } public static void i(String tag, String msg) { if (INFO) Log.i(tag, msg); } public static void e(String tag, String msg) { if (ERROR) Log.e(tag, msg); } public static void e(boolean bool, String tag, String msg) { if (TEMP&bool) Log.e(tag, msg); } public static void v(String tag, String msg) { if (VERBOSE) Log.v(tag, msg); } public static void w(String tag, String msg) { if (WARNING) Log.w(tag, msg); } public static String getStackTraceString(Exception e) { return Log.getStackTraceString(e); } public static void w(String tag, String msg, Exception e) { if (WARNING) Log.w(tag, msg,e); } } 

Великий ответ Дэвида Каунта , похоже, не работает для правил, определенных в proguard-android-optimize.txt .

Вместо использования шаблона *** текущие версии ProGuard, похоже, ожидают определения типа возвращаемого параметра:

 -assumenosideeffects class android.util.Log { public static int d(...); public static int w(...); public static int v(...); public static int i(...); public static int wtf(...); }