InputDispatcher的调试日志isLoggable动态开放logcat实战使用

Android Log和Slog类详解--Android 12 Log类的路径在/frameworks/base/core/java/android/util/Log.javaSlog类的路径在/frameworks/base/core/java/android/util/Slog.java。 阅读详情

背景:

在学习input专题课程后,那么就可以正常对所有和input相关的问题进行分析,经常分析的类就是InputDispatcher,平时如果看正常的logcat输出,发现InputDispatcher相关的日志非常少,基本上没办法进行有价值的分析。
但是针对Input相关的日志,其实android自身是带了很多的日志埋点,只是没有默认开放这些日志,具体情况以前讲解anr相关问题分析时候,有讲解过一种暴力的方法:

在这里插入图片描述
即直接写死为true,然后重新编译,但是这样确实可以打印调试日志,但是发布正式版本肯定关闭,而且无法在正式版本放开打印,所以这个方法还是不够动态智能,但是明显从日志注释可以看出实际上是可以进行动态开发,根本不需要修改代码重新编译。

/**
 * Log debug messages about the dispatch cycle.
 * Enable this via "adb shell setprop log.tag.InputDispatcherDispatchCycle DEBUG" (requires restart)
 */

确实有告诉我们这个命令adb shell setprop log.tag.InputDispatcherDispatchCycle DEBUG命令可以放开,下面来剖析出为啥可以动态控制日志打印。

isLoggable方法

下面来看看DEBUG_DISPATCH_CYCLE的值是由谁控制的

/**
 * Log debug messages about the dispatch cycle.
 * Enable this via "adb shell setprop log.tag.InputDispatcherDispatchCycle DEBUG" (requires restart)
 */
const bool DEBUG_DISPATCH_CYCLE =
__android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "DispatchCycle", ANDROID_LOG_INFO);

可以看到__android_log_is_loggable这个方法,它来负责控制DEBUG_DISPATCH_CYCLE值。这里__android_log_is_loggable在java层面其实也有个一一对应的方法isLoggable。
frameworks/base/core/java/android/util/Log.java

  /**
     * Checks to see whether or not a log for the specified tag is loggable at the specified level.
     *
     *  The default level of any tag is set to INFO. This means that any level above and including
     *  INFO will be logged. Before you make any calls to a logging method you should check to see
     *  if your tag should be logged. You can change the default level by setting a system property:
     *      'setprop log.tag.<YOUR_LOG_TAG> <LEVEL>'
     *  Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, or ASSERT.
     *  You can also create a local.prop file that with the following in it:
     *      'log.tag.<YOUR_LOG_TAG>=<LEVEL>'
     *  and place that in /data/local.prop.
     *
     * @param tag The tag to check.
     * @param level The level to check.
     * @return Whether or not that this is allowed to be logged.
     * @throws IllegalArgumentException is thrown if the tag.length() > 23
     *         for Nougat (7.0) and prior releases (API <= 25), there is no
     *         tag limit of concern after this API level.
     */
    @FastNative
    public static native boolean isLoggable(@Nullable String tag, @Level int level);

注释其实很详细了,简单说这个方法检测指定的tag是可以在这个level进行打印,默认等级是INFO,而且是可以通过setprop来进行控制的这个tag的输出level。
java方法对应到native就是__android_log_is_loggable
在这里插入图片描述

综上可以看得出
__android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG “DispatchCycle”, ANDROID_LOG_INFO);
就是检测一下log.tag.InputDispatcherDispatchCycle这个属性设置的log输出级别,如果没有设置默认就是有INFO,那么__android_log_is_loggable就会返回false,如果log.tag.InputDispatcherDispatchCycle有设置为DEBUG,则返回true。
这样有了这个判断既可以精细的控制打印日志情况。

实战开放Input相关日志:

下面来实战开放一下InputDispatcher相关的日志,这里主要介绍2种方法:

1、直接shell命令操作setprop设置方法,这里就是使用如下命令:
adb shell setprop log.tag.InputDispatcherDispatchCycle DEBUG
但是这里注意啦,虽然设置了,但是DEBUG_DISPATCH_CYCLE是在系统启动时候就已经设置了,所以这个时候设置后肯定不会立即有效,这里需要考虑让进程进行重启,注意这里不是系统直接重启,模拟器上测试重新进行模拟器启动,发现上次设置的属性prop并没有保存,所以只能对进程进行kill,改进后命令如下:

adb shell setprop log.tag.InputDispatcherDispatchCycle DEBUG
adb shell killall system_server

2、永久保存法,这样就不需要每次重启模拟器来进行prop设置

在data/local.prop文件中加入如下属性:

在这里插入图片描述
上面完成后可以来检验一下日志是否可以输出:
在这里插入图片描述
设置属性获取添加prop后就可以看到触摸屏幕就有如下输出:
在这里插入图片描述
更多framework技术干货,请关注下面“千里马学框架”

高通平台user版本debug 一、user开启root 一些平台可以通过单刷eng版本的boot.imag来root user版本,如果无法通过单刷bootimage来root,可以通过修改代码,使默认开启root。 1.1system/core/adb/ Android.mk修改如下: //LOCAL_CFLAGS +=-DALLOW_ADBD_ROOT=$(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)),1,0) LOCAL_CFLAGS += -DALLOW... 阅读详情

相关推荐

android10.0(Q) root QCOM-SM6125 user版本打开root权限

修改方案 总共修改 12 个文件 modified:device/qcom/qssi/BoardConfig.mk modified:device/qcom/trinket/BoardConfig.mk modified:system/core/init/Android.bp modified:system/core/init/Android.mk modified:system/core/init/selinux.cpp modified:system/core/fs_mgr/Android.bp m

纸上得来终觉浅,绝知此事要躬行 5906

Android源码中Log.isLoggable的用法

在android源码中,经常会看到这种代码(MediaActivity.java): 要想让上面的log打印出来,需要进行如下操作: 1、找到TAG的定义: 2、进入串口设置 setprop log.tag. MediaActivity V 同样还有其他文件的log也可以用这种方法,例如: setprop log.tag.MediaPlayback V setprop log.tag.MediaPlaybackModel V setprop log.tag.GH.MediaManag

sui1005316018的博客 1263

具身机器人内部PCB板分类与系统架构详解

本文系统梳理了机器人内部PCB板的功能架构,将其划分为5大模块:1)核心主板(含主控计算机板、实时控制板等);2)感知类PCB(视觉、听觉、触觉等);3)运动控制类PCB(伺服驱动、编码器等);4)电源与安全类PCB(电源管理、BMS等);5)通信类PCB(EtherCAT背板等)。通过人体器官类比(如大脑对应主控板、小脑对应实时控制板),详解了各模块的芯片选型、位置分布及协同关系,并给出信号/能量/指令的三流闭环示意图和典型系统参数(48V供电、1ms通信周期)。整体呈现了机器人"神经系统&qu

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 330

Android系统10 RK3399 init进程启动(十八) isLoggable日志级别输出控制

配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 在编写代码时, 有不同的级别的日志, 有些日志需要在调试阶段看, 在运行时就不能出现, 此时就可以通过android提供的接口来进行控制日志的输出。 一, 编译控制 #define LOG_INFO 5 #define LOG_DEBUG 6 #definecurrent_d...

ldswfun的专栏 3050

腾讯云CodeBuddy+微信小程序:5分钟开发番茄小闹钟

番茄钟是一种简单的时间管理方法。这个方法很简单:你专注工作25分钟,然后休息5分钟。这样可以让你更专心,不容易分心,还能防止过度疲劳。 很多人用番茄钟来提高工作效率,因为它能帮助你更好地管理时间。不过,市面上的一些免费番茄钟应用常常会有广告弹出来,影响使用体验。这就是为什么我们要开发一个没有广告的番茄钟小程序,让用户可以专心工作,不被打扰。

2201_75366661的博客 1690

Linux安装Oracle sqlplus客户端工具

Linux安装Oracle sqlplus客户端工具

优快云_Nan_Jiang_Li的博客 2777

root(Magisk )环境下增加 adb root 功能

修改 ro.debuggable 为 1杀掉 adbd,让 __android_log_is_debuggable 返回为 1调用 adb root 用于配置 service.adb.root = 1adbd 正常是 root 用户启动,然后通过降权到 shell 用户,我们是通过修改属性来达到不降权;

键盘的起始页 5105

告别130MB/s瓶颈!用Zynq+NVMe实现1.2GB/s高速存储的PL数据分流实战

本文详细介绍了如何通过Zynq+NVMe实现1.2GB/s高速存储的PL数据分流方案,突破传统Zynq架构130MB/s的瓶颈。文章分享了PL直连NVMe的硬件架构设计、软件栈优化及性能调优实战技巧,帮助开发者实现高速数据流的稳定存储。

weixin_42653691的博客 372

Logcat不是日志查看器,是Android开发的底层呼吸阀

Logcat是Android系统级日志机制的核心接口,其本质是连接Linux内核环形缓冲区、Logger子系统、logd守护进程与Java/NDK日志API的七层穿透通道。它不单用于输出调试信息,而是实时反映进程状态、Binder通信、生命周期事件和系统资源调度的关键观测点。理解日志级别语义(如ERROR与WARN的处理差异)、标签(Tag)工程规范、PID精准过滤及真机/模拟器行为鸿沟,是构建稳定Android应用的基础能力。尤其在农业物联网等嵌入式场景中,Logcat常成为定位传感器异常、网络冻结、低电

weixin_34150830的博客 271

深度学习——VGG16模型详解

1、网络结构 VGG16模型很好的适用于分类和定位任务,其名称来自牛津大学几何组(Visual Geometry Group)的缩写。 根据卷积核的大小核卷积层数,VGG共有6种配置,分别为A、A-LRN、B、C、D、E,其中D和E两种是最为常用的VGG16和VGG19。 介绍结构图: conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为

橙子的博客 12万+

基于 Simulink 的双向 DC/AC 逆变器中 IGBT/MOSFET 寄生参数影响分析实战教程

摘要:本教程详细解析了Simulink中IGBT/MOSFET寄生参数对双向DC/AC逆变器的影响。通过对比理想模型与含寄生参数(如20nH内部电感、50nH回路电感)的仿真,揭示了电压尖峰、高频振荡等实际问题。建模步骤包括搭建基准电路、引入寄生参数、配置高精度求解器(步长10ns),并给出抑制措施:添加RC缓冲电路、调整驱动电阻。关键发现:寄生参数会显著增加开关损耗和EMI噪声,需通过参数扫描优化设计。教程还提供了代数环报错、仿真速度优化等实战技巧,帮助工程师从理想仿真过渡到高保真分析。

xiaoheshang_123的博客 69

Android adb root代码分析(user版本adb开启root)

ro.secure ro.debuggable should_drop_privileges() system/adb/core AID_SHELL

weixin_43485707的博客 1655

手把手教你学Simulink--基于新能源并网与协调控制的场景实例:双馈异步风力发电机并网运行仿真

随着“双碳”目标的推进,风力发电已成为新能源并网的核心组成部分。其中,双馈异步风力发电机(Doubly-Fed Induction Generator, DFIG)因其变频器容量小(仅处理转差功率)、可实现有功/无功独立调节、运行效率高等优势,广泛应用于现代兆瓦级风电机组。DFIG系统通过转子侧变流器(Rotor-Side Converter, RSC)和网侧变流器(Grid-Side Converter, GSC)实现对发电机转矩与电网无功的精确控制,支持最大功率点跟踪(MPPT)和。

MHD0815的博客 283

关于android Log的isLoggable定义

什么是isLoggable? isLoggable是android.util.Log提供的方法,用于检查指定Log的TAG的level是否满足打印条件,如满足则返回true反之则返回false。 源码中关于isLoggable的注释 isLoggable在源码中的注释如下: /** * Checks to see whether or not a log for the specified tag is loggable at the specified level. * *

BishZzz的博客 965

华为OD机试 - 统计文本数量(Java 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1438

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[高通MSM8953_64][Android10]user版本默认获取root权限

文章目录开发平台基本信息问题描述解决方法 开发平台基本信息 芯片: MSM8953_64 版本: Android 10 kernel: msm-4.9 问题描述 user版本默认是不允许root以及remount的,但是,作为硬件定制厂商,客户往往需要root权限去执行一些系统级别的权限,所以,需要将user版本的root权限开放出来。 解决方法 diff --git a/build/make/core/main.mk b/build/make/core/main.mk index c7df0f7..f0

小小码农 4298

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

高通平台user版本怎么root

_android_log_is_debuggable函数。首先声明是小白,只是记录一下遇到过的一些问题,欢迎指正。should_drop_privileges函数。restart_root_service函数。

qq_46185391的博客 925

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

InputDispatcher调试日志开关

需要注意的是,"adb shell setprop log.tag.InputDispatcherOutboundEvent DEBUG" (requires restart)命令后面的requires restart表示需要重启进程(不是重启设备,重启之后设置的这些值会失效)。我们平时分析logcat日志时几乎没有InputDispatcher相关的日志,如果遇到事件分发相关的问题,就很难定位问题的原因。实际上是通过设置日志等级来打开对应的log的,其他模块,依次类推。

今天也是星期五的博客 698

Android Log.isLoggable 妙用

近来发现源码里面好多地方用到了 Log.isLoggable , 一查一看,是个东西,适合系统层以及root 主板设备上使用,能实现动态开关 android.util.Log.isLoggable(TAG, android.util.Log.DEBUG) 如上面代码以及文档说明,setprop log.tag.YOUR_LOG_TAG LEVEL 开启指定级别的日志开关属性,VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS

Extra Lazy的博客 2123

Android14 Log.isLoggable判断的分析

Android系统代码或者系统应用代码中经常有一些Dug打印,是可以在调试模式中查看的;比如:if(Log.isLoggable(TAG, Log.DEBUG)) {XXX}或者定义 boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);后面有些打印使用这个DEBUG属性来决定是否打印某些日志。之前我不太懂,也有看过源码,但是看到了native再后面就追不下去了,就没管了。后面各种搜索和研究后又有了新的发现。

wenzhi的博客 1399

Android应用调试之修改debuggable的一系列姿势

文章目录前言一、应用无签名/完整性校验1.借助apktool2.借助xml2axml3.自定义axml二、应用有签名/完整性校验总结 前言 我们想调试一个Android应用时,往往需要保证该应用的apk文件是debuggable,或者当前手机是debuggable模式的,下面就介绍一下修改调试模式的几种常用方法 一、应用无签名/完整性校验 1.借助apktool (1) java -jar apktool_2.4.0.jar d target.apk -o out #将目标apk反编译到out目录下 (

qq_33530663的博客 6620

Android修改ro.debuggable 的第五种方法

硬软件情况: NEXUS 5X 32G Android7.1 + SuperSU+ Xposed Install(XDebuggable) 问题:开启DDMS时发现进程无法访问,经过一番搜索发现是ro.debuggable值为0导致。 # adb shell "/data/local/tmp/mprop" Usage: propmod [pr

zwlww1的博客 4237

Android Log isLoggable 使用

方法官方注释: Checks to see whether or not a log for the specified tag is loggable at the specified level. The default level of any tag is set to INFO. This means that any level above and including INFO will be logged. Before you make any calls to a logging m

男儿不展风云志,空有天生八尺躯 1623

MarkDown入门-上篇

MarkDown入门-上篇

Java是世界上最好的语言.c 857

Android isLoggable定制属于自己的log

Android原生自带的。需要打开日志开关的时候。

dzning123的专栏 870
上一篇: aosp14上SystemUI相关的调试堆栈乱码无法对应行号,logcat无法输出
下一篇: android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值