Android apk物理按键焦点事件失效原因分析
老年机,低端机没有触摸屏的,屏幕操作需要物理按键来控制,有时候安装了一个第三方apk,发现控制不了apk里面的一些按钮,调出鼠标光标发现又是可以点击的,据此可以推测是该按钮没有获取相应的焦点,导致物理按键的事件到达不到。本篇文章主要就讲解如何分析第三方apk的某一个按钮是否设置了焦点。
一、几个涉及到的ADB模拟事件
1、平时测试没有触摸屏的机器,但是又想验证屏幕的点击事件,就可以使用屏幕模拟的点击事件
adb shell input touchscreen tap 80 120 //其中80,是屏幕的x坐标,120是屏幕的y坐标,基于屏幕的分辨率大小
2、模拟输入框输入
adb shell input text "hehe"
3、模拟物理按键事件点击
//模拟按下数字0键
adb shell input keyevent "KEYCODE_PTT"
//模拟按下返回键
adb shell input keyevent 4
二、焦点分析步骤
1、通过adb dump 当前页面的信息
adb shell uiautomator dump --compressed /data/local/tmp/uidump.xml
2、打开uidump.xml文件,可以看到如下内容:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="1">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][160,128]">
<node index="0" text="****" resource-id="com.test.hpe:id/commonui_basic_title" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[53,13][107,43]" />
<node index="1" text="网络连接超时" resource-id="com.test.hpe:id/main_login_status" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[26,44][134,105]" />
<node index="2" text="重新登录" resource-id="com.test.hpe:id/main_login_again" class="android.widget.TextView" package="com.test.hpe" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,105][160,128]" />
</node>
</hierarchy>
通过分析子节点index=2的节点,重点关注focusable和focused两个属性,如果都为false的话说明就没有设置焦点,物理按键就无法控制该控件。定位到相应的控件了,设置focused 和focusable为true就可以了
至此,分析完毕。
上一篇: python 连接mysql数据库