首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否在发布安卓应用程序中完全禁用LogCat输出?

是否在发布安卓应用程序中完全禁用LogCat输出?
EN

Stack Overflow用户
提问于 2011-04-05 22:04:11
回答 6查看 42K关注 0票数 55

在将应用程序发布到市场之前,关闭我自己的应用程序的LogCat输出是很简单的。我还知道如何根据标记和/或id有选择地过滤LogCat消息,以方便自己调试。

但是现在我感兴趣的事情可能要困难得多(也许是不可能的?):禁用所有LogCat输出,包括&尤其是来自TtsService、GoogleLoginService等第三方服务的输出。

这个是可能的吗?

进一步澄清:我对为自己过滤消息不感兴趣。我对从Android Market下载我的应用程序的人禁用第三方消息很感兴趣。这个是可能的吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-05 22:14:05

您可以使用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日志。

票数 195
EN

Stack Overflow用户

发布于 2012-03-17 05:17:09

如果不使用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);
    }
}
票数 9
EN

Stack Overflow用户

发布于 2017-08-01 20:08:22

对于proguard-android-optimize.txt中定义的规则,David Caunt提供的伟大答案似乎并不适用。

当前版本的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(...);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5553146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档