Удалить сообщение onFlyCompress из logcat

Я использую YuvImage для сжатия канала android.hardware.Camera в jpeg. С тех пор я продолжаю видеть сообщения skia onFlyCompress в logcat, что полностью загрязняет его. Есть ли способ отключить это сообщение? Я знаю, что могу отфильтровать вывод logcat, но это означает, что это происходит повсюду все время, что не является исправлением, а обходным путем. Я просто не хочу, чтобы эти сообщения печатались вообще

Ответ 1

Вы можете (я не уверен) YuvImage подкласс класса YuvImage который печатает журнал, и переопределить метод этого класса, который печатает журнал, и просто скопировать весь код этого метода, кроме Log.d() или Log.v() или Log.w() ,... код переопределенного метода.

Посмотрите на следующий ответ тоже:

Как включить/отключить уровни журнала в Android?

Ответ 2

Короткий ответ

Попробуйте достичь своей цели с помощью метода перехвата.

Вы можете подключить методы android.util.log используя XPposed Framework на устройствах ROOTed.

Подробные методы

  1. Используйте XPposed Framework для подключения методов android.util.Log.
  2. В методе перехвата проверьте, содержит ли сообщение skia onFlyCompress.
  3. Если тогда вызовите setResult(null); чтобы он не распечатывал сообщение журнала.

Хотя эти методы можно использовать только на корневых устройствах, но я надеюсь, что мой ответ поможет, по крайней мере, некоторым пользователям, которые могут использовать корневые устройства.

(Хм, потому что никакие клиенты не будут блокировать сообщения журнала, так что все, что вам нужно сделать, это просто корень локального устройства только и установить приложение автоматической фильтрации, которая использует рамки Экспоузд.)

Чтобы увидеть пример блокировки метода от выполнения остальной части его кода: Этот ответ (особенно последний абзац) содержит несколько примеров использования платформы 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

Установите XPposed Framework

Учебник по XPposed Dev