完全禁用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 ... } }
- 我如何从iPhone应用程序启动Safari?
- Web部署任务失败。 (“Microsoft.Web.Deployment.DeploymentManager”的types初始值设定项引发exception。)
- 结构发布XCode 6.3 codesign xcodeselect
- 在开发者控制台上需要一些关于beta / alphatesting的说明
- NSData和通过POST在iOS上传图片
- 你如何张贴到一个iframe?
- API自动将apk上传到Google Play?
- 如何使用PhantomJS提交表单
- 根据另一个集合中是否存在特定文档,将集合中的文档发布到meteor客户端(publish-with-relations)