appcrawler 什么时候会停止遍历?

你们试试2.7.0版本,我本地运行没这个问题。

我这边试了2.7.0也一样有这个问题,而且点击到了一个按钮就退到桌面了,然后继续遍历桌面其他App,看了日志,appName也是空的,xml文件里面包名也是我oppo手机的。

package="com.oppo.launcher"
  • 命令:java -jar appcrawler-2.7.0-jar-with-dependencies.jar -c demo.yml

找到原因了

默认的规则你设置的是这个

xpathAttributes:
- "name()"
- "name"
- "label"
- "value"
- "resource-id"
- "content-desc"
- "text"
- "id"
- "name"
- "innerText"
- "tag"
- "class"

你的设置是

xpathAttributes:
- "name"
- "label"
- "value"
- "resource-id"
- "content-desc"
- "instance"
- "text"

appcrawler会对每个控件进行分析并计算一个唯一的xpath,如果发现一个控件的xpath为空,就认为是不重要的控件,就会忽略。在判断appName的时候,是取了page source中的 (//*[@package!=''])[1] ,他默认找到的控件是

<hierarchy class="hierarchy" height="2496" index="0" rotation="0" width="1404">  
<android.widget.FrameLayout bounds="[0,0][1404,2496]" checkable="false" checked="false" class="android.widget.FrameLayout" clickable="false" displayed="true" enabled="true" focusable="false" focused="false" index="0" long-clickable="false" package="com.jlpay.merch" password="false" scrollable="false" selected="false" text="">

这个控件在生成唯一xpath的时候,会根据xpathAttributes属性生成一个易读性比较高的xpath,碰巧你的xpathAttributes里的属性,在这个控件里一个都没命中,所以生成的xpath为空,appcrawler认为xpath为空的不重要,就忽略了这个控件,最终导致appName为空。

所以只要简单在xpathAttributes里增加一个 class 就可以了,这个代表控件的class name,所以xpath就不会为空,就可以解决了。

xpathAttributes:
- "class"
- "name"
- "label"
- "value"
- "resource-id"
- "content-desc"
- "instance"
- "text"

测试过可以解决

是的,后来我的AppName显示了我还很奇怪,刚看了一下配置文件,原来是我更换模板换成了完整的xpathAttributes属性参数的问题。

我这边也测试了多次,已解决,退到桌面能重新回到App了。谢谢思寒大佬 :+1: :+1:

打不开页面。没有权限~请问如何下载呢?

https://github.com/seveniruby/AppCrawler/releases