AIGamePro新一代安卓自动化测试平台
官方文档: https://aigame-pro.netlify.app/
强大的功能
- 支持Shizuku、Root、无障碍、HID等自动化策略
- 支持安卓端代码编辑器、开发
- 支持电脑端IDE、VSCode、IDEA开发
- 拥有最全面的UI界面设计能力
- 支持打包成apk
图形与视觉
- 支持Yolo全系列:yolov5-yolov13全部支持,并且官方文档提供详细的自主搭建训练yolo的全套视频、文档教学。
- 支持主流OCR:GoogleMlkit、NcnnOcr、PaddleOcrV5
精美的界面
支持全套Material Design3的组件开发,并且开发极其容易上手,直接让UI界面设计简洁到小白都能学会,这么漂亮简约的界面,对于国内其他的自动化测试平台而言,简直就是一种降维打击。
只需要简单的几行xml代码即可完成对UI的开发,例如写一个简单的按钮:
<ui>
<button text="我是文本" />
</ui>
无法被破解
妈妈再也不担心我的源码会被掏了!!!在打包成apk的过程中,代码会经历如下阶段:
- js代码简化(这一步去除注释、规范化js代码)
- js代码混淆(这一步改变代码结构、缩减变量名称)
- js转为VMP混淆码
打包后的apk只能执行VMP混淆码,即使被HOOK也只能拿到混淆码!完美解决自己的js代码会被掏的问题!
并且:打包的apk本身dex就是处于高度混淆的状态,直接让逆向难度成倍增长!
应用截屏
开发诱因
我最开始一直使用的都是免费开源的auto.js作为我的自动化工具,但是随着这个工具的普及,不断的灰产、违法情况出现,一系列的原因导致官方不得不下架这款安卓神器。
当这款安卓自动化神奇跌落以后,我就开始在市面上寻找替代方案,但是市面上的自动化工具都有普遍的缺点:
- 并发编程支持度不够
- 界面UI太阿格里了(太丑了)
- 收费、价格不菲
于是在2024年11月的某一天,我安装了AndroidStudio开始研究谷歌的Material Design3组件库。
最开始开发非常吃力、因为我从来没用过AndroidStudio,原因是家庭条件有限,我上大学使用的电脑是2k买的小电脑。最早我接触编程是在初中,初2的时候才拥有人生的第一部安卓手机,那个时候天天刷网页找编程资源进行学习,高中就经常去网吧通宵学习编程,作为学生的我,真正实际操练编程是在安卓手机上安装的AIDE这款app。
甚至到了大学,我写安卓app一直都是用的AIDE,电脑端就用的Eclipse。
后来我慢慢学习使用IDEA和AndroidStudio,直到渐渐顺手。
解决“遗传病”
由于我觉得Auto.js用起来很顺手,于是我想保留我自己的使用习惯来开发AIGamePro!!
于是我不得不解决一些“遗传病”:
由于auto.js曾经是开源的软件,导致只要是使用该平台写的脚本代码,都能被秒破。代码无论被加密的多么花里胡哨,到了脚本引擎面前,就是明文!!
于是我在开发AIGamePro的时候全程使用高强度的逆向思维:
- http请求必须要高仿https双端签名校验
- 敏感字符串必须非对称加密
- json的字段必须混淆
- 脚本引擎必须自己重构
引擎选择
为什么不用node.js?
安卓自动化的很多功能,例如截屏、无障碍、节点分析、无障碍手势等等功能本身是Java端的内容,而nodejs是C/C++端开发的工具,当我们传入一段js代码交给nodejs处理,之后还要nodejs大量的使用jni调用安卓的功能,最后还是回调到java层的功能,有点脱裤子放屁了。
我的要求是,解析到一段简单的js代码,会直接调用java端的功能,而不是通过jni传给c之后、c再调用java中的功能,这导致不必要的大量jni调用,严重影响性能。
我先说一下,我本人并不是盲目跟风的人,很多人说nodejs性能很强,但是它有它适用的领域,并且对于脚本而言,脚本引擎的责任无非就是解析一段字符串,所以所谓的性能强,简单的理解就是:nodejs处理字符串的速度快!
不过nodejs内置的很多库和对象本身是c/c++实现的,这一些不会调用java端的功能确实性能强。
可是大部分自动化场景,我们都在调用java(安卓)的功能,所以我直接pass掉nodejs。
为什么使用rhino?
要知道我写自动化的目的就是解决一些重复的动作,我都这么懒了,我当然需要一种只需要编写很简单的JS代码就能执行的引擎。
目的很明确:使用尽可能少的JS代码,来实现自动化。并且rhino本身是java开发的,于是如果我想定制一些功能,我只需要大量的继承其中的类就能完成高度定制。