如何识别安卓上的非原生控件内容

csu_小王子 2021-02-20 02:24:00

如图,这是巴比智慧园早教app的一个界面,通过adb dump 界面结构ui得到xml如下

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy rotation="1">
<node index="0" text="" resource-id="" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[0,0][1600,900]">
<node index="0" text="" resource-id="com.zhihui:id/cancletask" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[412,201][1188,699]">
<node index="0" text="" resource-id="com.zhihui:id/part1" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[428,217][624,273]" />
<node index="1" text="" resource-id="com.zhihui:id/part2" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[412,306][1143,498]">
<node index="0" text="更新提示: 1.【开放】课本点读,全册免费、无广告; 2.【新增】语文课文全解,哪里不懂点哪里; 3.【新增】语文词语朗读、解释、听写等;" resource-id="com.zhihui:id/update_content" class="android.widget.TextView" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" visible-to-user="true" bounds="[462,306][1143,498]" />
</node>
<node index="2" text="" resource-id="com.zhihui:id/part3" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[462,526][1137,549]">
<node index="0" text="" resource-id="com.zhihui:id/update_progress" class="android.widget.ProgressBar" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[485,526][1114,549]" />
</node>
<node index="3" text="" resource-id="com.zhihui:id/part4" class="android.widget.LinearLayout" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[551,582][1049,658]">
<node NAF="true" index="0" text="" resource-id="com.zhihui:id/bokpc" class="android.widget.Button" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[551,582][753,658]" />
<node NAF="true" index="1" text="" resource-id="com.zhihui:id/bcanclepc" class="android.widget.Button" package="com.zhihui" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" visible-to-user="true" bounds="[847,582][1049,658]" />
</node>
</node>
</node>
</hierarchy>

显然,xml中看不到“现在升级”和“稍后升级”两个按钮的文本,只能看到对应的两个clickable="true"的控件,text属性为空。
想请问,应该用什么框架或者方法可以识别到这种按钮文本?
上述只是举例说明,包括其他类似app也有这种情况,希望有通用性的方法识别,而不是定制化方法,感谢!
...全文
176 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
csu_小王子 2021-02-22
引用 1 楼 Non-satisfied的回复:
看名字好像就是原生的,可能这个是图片资源,设成了背景。
所以只能利用从图像处理的角度去识别了,利用bound属于截取图片后ocr
  • 打赏
  • 举报
回复
csu_小王子 2021-02-22
引用 2 楼 qq_1113502097的回复:
class="android.widget.LinearLayout" 即表示这个控件是一个LLinearLayout; 如果你像找到按钮,那么有class="android.widget.Button",因为按钮控件在android在这个包下面,或者androidX下面,反正是Buttom结尾的控件。 因为xml中可以通过引用资源文件的形式去引用文字资源,因此“现在升级”和“稍后升级”两个按钮的文本,有可能看不到
为什么xml中可以通过引用资源文件的方式引用文本,就使得“现在升级”和“稍后升级”看不到呢
  • 打赏
  • 举报
回复
qq_1113502097 2021-02-20
class="android.widget.LinearLayout" 即表示这个控件是一个LLinearLayout; 如果你像找到按钮,那么有class="android.widget.Button",因为按钮控件在android在这个包下面,或者androidX下面,反正是Buttom结尾的控件。 因为xml中可以通过引用资源文件的形式去引用文字资源,因此“现在升级”和“稍后升级”两个按钮的文本,有可能看不到
  • 打赏
  • 举报
回复
Non-satisfied 2021-02-20
看名字好像就是原生的,可能这个是图片资源,设成了背景。
  • 打赏
  • 举报
回复
相关推荐
发帖
Android

7.9w+

社区成员

移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
帖子事件
创建了帖子
2021-02-20 02:24
社区公告
暂无公告