android13 app的触摸问题定位分析流程

发布于:2025-06-10 ⋅ 阅读:(57) ⋅ 点赞:(0)

一、知识点
一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。

问题描述:
【操作步骤】
1.在主驾屏状态栏位置处向下滑出负一屏
2.点击副驾屏应用区域
【预期结果】 2.可以打开对应应用
【实际结果】 2.副驾屏区域的所有点击按钮都无效
【问题发生时间】2025/06/06 15:32

二、问题分析

  1. 凡是触摸问题,先在ViewRootImpl.java 里面添加log:
    在这里插入图片描述
    添加log之后,发现deliverInputEvent并没有发送给对应的app window,这就说明input问题出在deliver之前,需要借助dump input命令来分析。

  2. dump命令:
    adb shell dumpsys activity a> activitys.log
    adb shell dumpsys activity > activity.log
    adb shell dumpsys activity -v top > top_activity.log
    adb shell dumpsys window w > ws.log
    adb shell dumpsys SurfaceFlinger > sf.log
    adb shell dumpsys display > display.log
    adb shell dumpsys power > power.log
    adb shell dumpsys input > input.log
    adb shell dumpsys package > package.log
    adb shell screencap /sdcard/1.png
    adb pull /sdcard/1.png

主要是adb shell dumpsys input > input.log进行分析,查看touchableRegion是否正确。
在这里插入图片描述

通过打印堆栈的方式,定位touchableRegion计算逻辑。详细的堆栈信息如下:

06-06 19:33:37.158  1787  1812 W android100: setTouchableRegion, region = SkRegion((-5160,-1600,10200,3200)),mHandle = f9b4570 SystemUIOverlayWindow, frame=[0,0,0,0], touchableRegion=SkRegion((-5160,-1600,10200,3200)), scaleFactor=1.0, transform=null, windowToken=android.os.BinderProxy@d9e02ed, isClone=false,callstack = 
06-06 19:33:37.158  1787  1812 W android100: java.lang.Throwable: xxx
06-06 19:33:37.158  1787  1812 W android100: 	at com.android.server.wm.InputWindowHandleWrapper.setTouchableRegion(InputWindowHandleWrapper.java:142)
06-06 19:33:37.158  1787  1812 W android100

网站公告

今日签到

点亮在社区的每一天
去签到