从logcat中删除onFlyCompress消息

时间:2017-04-06 01:16:32

标签: android logcat

我正在使用YuvImageandroid.hardware.Camera Feed压缩为jpeg。从那时起,我一直在logcat中看到skia onFlyCompress消息,这完全污染了它。有没有办法禁用此消息?我知道我可以过滤logcat输出,但这意味着一直到处都做,这不是一个修复,而是一个解决方法。我根本不想要打印这些消息

2 个答案:

答案 0 :(得分:1)

您可以(我不确定)继承类YuvImage的子类,它打印日志并覆盖打印日志的类的方法,只需复制该方法的所有代码,但Log.d()Log.v()Log.w(),...已覆盖方法的代码。

请看以下答案:

How do I enable/disable log levels in Android?

答案 1 :(得分:1)

简短回答

尝试使用方法挂钩来实现目标。

您可以使用 XPosed Framework 来挂钩android.util.log方法 在 ROOTed 设备上。

详细方法

  1. 使用XPosed Framework挂钩android.util.Log的方法。
  2. 在挂钩方法中,检查消息是否包含skia onFlyCompress
  3. 如果然后调用setResult(null);以防止它打印出日志消息。
  4. 虽然这些方法只能在root设备上使用,但我希望我的回答可以帮助至少一些可以使用root设备的用户

    (嗯,因为没有客户必须阻止日志消息,因此您只需要只强本地设备 并安装使用XPosed框架的自动过滤应用程序。)

    要查看阻止方法执行其余代码的示例: This answer(especially the last paragraph)包含一些使用Xposed框架的示例。如您所见,代码非常短(不超过40行。)

    如果需要/看到可能有用,我会实现一些代码。

    示例代码段

    当有人支持我的时候,我认为有人喜欢我的建议。所以我发布了一些代码。

    import android.util.*;
    import de.robv.android.xposed.*;
    import de.robv.android.xposed.callbacks.XC_LoadPackage.*;
    
    import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
    
    public class LogFilterApp implements IXposedHookLoadPackage
    {
    
        private String TAG="LogFilter";
         public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable
    {
        XposedBridge.log("Package name: " + lpparam.packageName);
    
                try
                {
                        findAndHookMethod("android.util.Log", lpparam.classLoader, "i", String.class, String.class, new XC_MethodHook()
                        {
                            @Override
                            protected void beforeHookedMethod(MethodHookParam param) throws Throwable
                            {
                                //do something before
                                if(((String)(param.args[1])).indexOf("skia onFlyCompress")>=0)
                                                              { 
                                                              param.setResult(null);
                                                               }
                            }
                        });
                }
                catch (XposedHelpers.ClassNotFoundError e)
                {
                    XposedBridge.log("ClassNotFoundError");
                }
                catch (NoSuchMethodError e)
                {
                    XposedBridge.log("NoSuchMethodError");
                }
            }
         }
       }
    }
    

    代码参考:此XDA thread

    Install XPosed Framework

    XPosed Dev tutorial