V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Austin2035
V2EX  ›  程序员

做了款安卓软件,能将对 API 的调用转化为对手机的操作,软件自身提供 restful API

  •  1
     
  •   Austin2035 · 2021-03-06 23:24:42 +08:00 · 2220 次点击
    这是一个创建于 1363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做 APP 爬虫时,我们通常使用 APP 抓包的方法来来获得接口路径,进而请求数据。遇到复杂的签名,可能还需要做安卓逆向来破解。

    当然,我们也可以选择使用 Appium + mitmdump 来进行爬取。mitmdump 没问题,很稳定,挂着即可。但是 Appium 过于笨重,操作缓慢,开发不便,稳定性欠佳。而 Airtest 看起来也是个不错的选择,事实上确实如此。可是,我就爬个 APP,Airtest 是不是太重了?

    那么,有没有一款软件,运行在安卓,通过接收 restful API 请求,进而转化为对设备的操作呢?而且它不依赖 ADB,甚至不需要 root 权限。答案是有的,它就是 Hermit,一切操作均在安卓端完成,对外只提供一个 API 。

    Hermit,是一款用于安卓自动化测试的安卓软件,安装包仅有 2.8MB 。具有一系列的操作能力,譬如,通过无障碍 /root 的方式,点击,滑动、设置与读取剪切板信息(支持中文)等操作,同样,它也自带了一个布局分析器,类似 Android Studio 的 LayoutInspector,可以分析界面层次和范围、获取界面上的控件信息,进而方便点击、滑动等操作。

    https://lookcos.cn/usr/uploads/2021/02/3890288493.png

    由于 Hermit 只提供 API,所以我们可以用喜欢的语言直接调用 API,通过发送 GET 、POST 之类的请求来控制手机。

    我们可以基于 Hermit 的 API 来制作一个 python 模块,导入模块后直接调用函数,即可操作手机。而这个模块我已经做好,并将其取名为 pyhermit,如果您喜欢 Java,您可以封装一个库并叫做 Jermit 等。以此类推,可以有 Germit 、Cermit 等等。

    它有哪些优点?

    1. 开源,体积小,轻量级

    2. 支持通过 root 与无障碍两种方式操控手机。

    3. 支持所有主流语言控制手机,二次开发方便。

    4. 自带界面分析工具,开发自动化测试,轻轻松松。

    5. 能通过次序来点击具有相同属性的一组控件,例如屏幕中出现多个关注按钮的时候。

    基于无障碍的功能

    1. 坐标点击
    2. 坐标滑动
    3. 根据控件 id 的点击(如有多个相同 id,可根据次序点击)
    4. 根据控件 text 的点击(同上,可根据次序点击)
    5. 根据控件 content-desc 的点击
    6. 查看屏幕截图
    7. 模拟输入功能(支持中文)
    8. 九大全局功能(返回、按下 home 键、最近任务、显示通知、快速设置、长按电源键、分屏、锁屏、截屏)
    9. 实时获取界面控件详细信息

    基于 Root 的功能

    1. 坐标点击
    2. 坐标滑动
    3. 屏幕截图
    4. 申请并判断 root 权限
    5. 发送任意 keyevent
    6. 长按坐标
    7. 根据包名启动 APP

    获取设备信息能力

    1. 获取、设置剪切板内容(支持中文)
    2. 设备屏幕长宽
    3. CPU 最大、最小、实时频率
    4. CPU 名
    5. 内存总量、可用量
    6. 存储总量、可用量
    7. 所有安装的包名
    8. 设备语言、系统版本号、手机型号、手机厂商

    之前在社区发过第一版,但是还不太成熟,第二版相较于第一版有了很大的提升,感兴趣的朋友可以玩玩。

    文档地址: https://www.lookcos.cn/docs/hermit
    Github: https://github.com/LookCos/hermit

    14 条回复    2021-11-27 07:32:02 +08:00
    Origami404
        1
    Origami404  
       2021-03-07 09:58:05 +08:00 via Android
    看起来很好用,已 star 。等有空了好好研究一下
    Austin2035
        2
    Austin2035  
    OP
       2021-03-07 10:00:00 +08:00
    @Origami404 感谢支持,可随时联系我,共同交流技术。
    gladuo
        3
    gladuo  
       2021-03-07 11:30:59 +08:00
    很有意思很轻量
    ilotuo
        4
    ilotuo  
       2021-03-07 12:41:34 +08:00
    一直很好奇灰产(薅羊毛之类) 大佬们用的是什么脚本. airtest 应该最容易实现, 但是 airtest 出来之前就有这些灰产, 那他们用啥最快实现?
    Austin2035
        5
    Austin2035  
    OP
       2021-03-07 13:12:18 +08:00
    @gladuo 是的 的确挺轻量
    Austin2035
        6
    Austin2035  
    OP
       2021-03-07 13:12:41 +08:00
    @ilotuo 可能是 auto.js 之类,亦或者是用抓包,提交请求这种方式。
    teawithlife
        7
    teawithlife  
       2021-03-07 14:27:13 +08:00
    试用了一下,挺不错
    /image/screen 接口没测试成功
    返回 Failed resolution of: Landroid/accessibilityservice/AccessibilityService$TakeScreenshotCallback;
    /viewer 调用了上面的接口,所以也没法用

    另外 /action 接口的文档写的不是很清楚, /action/1 这样是不对的,需要 /action/back 才对,我是翻了 python 的代码才找到用法的
    teawithlife
        8
    teawithlife  
       2021-03-07 14:28:47 +08:00
    建议文档中写一些 curl 调用的示例,这样测试起来也方便
    Austin2035
        9
    Austin2035  
    OP
       2021-03-07 17:06:21 +08:00
    @teawithlife 非常感谢你的反馈,我会改进一下的
    devliu1
        10
    devliu1  
       2021-03-07 23:11:58 +08:00
    @lookcos server 里各种 Map.put 建议改进一下
    Austin2035
        11
    Austin2035  
    OP
       2021-03-08 11:12:40 +08:00
    @devliu1 谢谢建议,本人 Java 新手,见谅
    unco020511
        12
    unco020511  
       2021-03-08 11:23:21 +08:00
    看了下文档已 start,作者是个二本在校生,不错不错
    Austin2035
        13
    Austin2035  
    OP
       2021-03-08 11:44:29 +08:00
    @unco020511 哈哈,感谢支持。
    wzw
        14
    wzw  
       2021-11-27 07:32:02 +08:00
    @lookcos 操作 微信 会不会被封
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1663 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:57 · PVG 00:57 · LAX 08:57 · JFK 11:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.