我正在使用YuvImage
将android.hardware.Camera
的视频流压缩为jpeg。自从那时起,我在logcat中一直看到skia onFlyCompress
消息,这完全污染了它。有没有办法禁用这个消息?我知道我可以过滤logcat输出,但这意味着需要在任何地方始终执行,这不是解决方法,而只是一种解决方法。我根本不希望打印出这些消息。
我正在使用YuvImage
将android.hardware.Camera
的视频流压缩为jpeg。自从那时起,我在logcat中一直看到skia onFlyCompress
消息,这完全污染了它。有没有办法禁用这个消息?我知道我可以过滤logcat输出,但这意味着需要在任何地方始终执行,这不是解决方法,而只是一种解决方法。我根本不希望打印出这些消息。
简短回答
尝试使用方法挂钩来实现您的目标。
您可以使用XPosed Framework在ROOTed设备上挂钩android.util.log
方法。
详细方法
android.util.Log
的方法。skia onFlyCompress
。setResult(null);
以防止打印出日志消息。虽然这些方法只能在ROOTed设备上使用,但我希望我的回答能帮助至少一些可以使用ROOTed设备的用户。
(嗯,因为没有客户需要阻止日志消息,所以您只需要ROOT 您的本地设备并安装使用XPosed框架的自动过滤应用程序即可。)
为了阻止一个方法执行其余代码的示例,请参见:此答案(尤其是最后一段)包含一些使用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主题
YuvImage
类并覆盖打印日志的方法,只需复制该方法的所有代码,但不包括Log.d()
、Log.v()
或Log.w()
等打印日志的代码,将其粘贴到被覆盖的方法中即可。(我不确定是否可行)android.util.Log
是一个 final 类,无法被覆盖。不过,调用的方法是静态的,因此覆盖也没有帮助。 - Robertandroid.util.Log
或其方法。但是,如果YuvImage
的调用方法是静态的,则可以将代码复制到您的类中并根据需要更改它们。您需要以这种方式拥有源代码。 - ygngy