完全禁用Android应用程序中的LogCat输出?

在将应用程序发布到市场之前,closures我自己的应用程序的LogCat输出非常简单。 我也知道如何select性地过滤LogCat消息的标签和/或ID为我自己的debugging方便。

但是现在我对可能更困难的事情感兴趣(也许是不可能的):禁用所有的LogCat输出,包括来自第三方服务(如TtsService,GoogleLoginService等)的输出。

这可能吗?

为了进一步澄清:我对自己过滤掉消息感兴趣。 对于从Android Market下载我的应用的用户,我非常感兴趣的是禁用第三方消息。 这可能吗?

通过告诉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中,因此任何有logcat的用户都不会看到d / v / i日志。

如果您不使用proguard,则必须自己pipe理日志,并在manifest文件中将可配制文件假设为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); } } 

David Caunt提供的很好的答案似乎不适用于在proguard-android-optimize.txt定义的规则。

而不是使用通配符*** ,目前版本的ProGuard似乎期望返回参数的types限定符:

 -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(...); } 

您可以在buildTypes版本上放置可debugging的错误

 buildTypes { release { debuggable false ... } }