<div id="content_views" class="htmledit_views" deep="6">
<p></p>
官网文档:http://doc.autoxjs.com/#/documentation
autojs 教程、demo 集合:https://github.com/wiatingpub/autojs
autojs app 自带的教程,看完就差不多了
关键字:安卓自动化、手游辅助
1、官网文档
Auto.js 简介
Auto.js 本身是一个 app,但是可以用来开发脚本,开发的脚本还可以打包成 apk 进行安装。
autojs 有什么优点?为什么推荐?
- 无需 root 而是基于无障碍服务。为啥强调无需 root,因为 root 刷机本身是存在风险的,无需 root 就代表着远离风险。剩下的就是需要一台安卓手机,然后懂点 js 就可以了。
- 上手简单,通过学习 Auto.js 内置的教程,就能写出很多有趣的脚本。这是因为 Auto.js 虽然依托于 JS 语言,却做了很多封装。
- 支持打包,可以将脚本打包成 apk 文件,这一点对不爱折腾的小伙伴来说,简直是福音。
Auto.js 由 hyb1996 于 2017/01/27 初次发布,于 2020/03/13 停止维护,最终版本名称为 4.1.1 Alpha2,构建版本号为 461。autojs 这么屌为什么会被下线,因为 Auto.js 被大面积的用于灰产,被某些资本警告,导致该工具无法对某些应用进行操作 ( 例如:微信、支付宝、抖音 等 )。4.1 版本是免费版的最后一个版本,可以在所有 app 上进行操作。后来作者推出收费版的 Auto.js Pro,虽说增加了一些功能,但是屏蔽了很多主流应用,属于阉割版。
- 4.1版本 功能与 pro 几乎无差别,下载地址:https://www.wuyunai.com/docs/
- Autox.js 是在原 4.1版本 基础上 fork 而来,可操作所有软件,并拥有大量 autojs pro 的功能:https://github.com/kkevsekk1/AutoX
基于 Auto.js 二次开发的开源项目 (仅部分列举):
项目名称 | 应用名称 | 开发者 | 开发时间 |
---|---|---|---|
Auto.js | Auto.js M | TonyJiangWJ | 2019/11/21 |
AutoX | Autox.js / Autox.js v6 | kkevsekk1 | 2020/07/24 |
AutoJs6 | AutoJs6 | SuperMonster003 | 2021/12/01 |
其他类似软件
- 一触即发:http://www.yicuba.com/index.html
蓝奏网盘:https://bgg.lanzoui.com/b02bsrsah - 点击助手Pro:https://www.ghxi.com/djzs.html
- Hamibot:类似 autojs 的自动化工具,可以通过浏览器远程控制。适用于安卓系统的自动化工具,能全自动操控任意 APP。hamibot 需要注册账号:https://hamibot.com/
Hamibot 连接手机:https://www.i3zh.com/22556.html - 冰狐智能辅助 (类似 Autojs,比 autojs 简单,需要注册账号):https://aznfz.com/
- Ctrl.js 开发文档:https://ctrljs.ikaiwei.com/ctrljsapi/#/
Ctrl.js ( 类似auto.js ):http://www.feiyunjs.com/2266.html - EasyClick 和Auto.js区别:http://www.feiyunjs.com/2456.html
EasyClick 开发文档:http://ecdoc.laoleng.vip/docs/
AutoX.js 的功能
- AutoX.js 项目工程化:结合 webpack vscode 插件,开发、编译、打包、部署、混淆、加密一体化 文档资料
- vscode 插件右键,自动提示操作等 下载地址
- vscode 自动补全、方法注释等 文档资料
- 修复众多 bug,升级到 5.0.1 ,合并打包插件,升级配置文件等功能
- 建设论坛, 提供 交流社区
- 支持 WebSocket
安装 AutoX.js
- 手机安装 AutoX.js 应用
- 开启手机无障碍服务,目的是为了让脚本能执行。
- 开启悬浮框(为了查看控件信息)
配置 开发 环境
AutoX.js 使用 JavaScript 作为脚本语言,目前使用 Rhino 1.7.13 作为脚本引擎,支持 ES5 与部分 ES6 特性。
- 学习 AutoX.js 的 API 之前,建议先学习 JavaScript 的基本语法。
- 如果想要在电脑上开发 AutoX.js,可以使用 VSCode 以及 AutoX.js 插件。
- 如果想要使用 TypeScript 来开发,目前有开发者公布了一个 相关工具。
IDEA
在安卓手机上安装 Auto.js app
在 IDEA 安装插件 autojsx.WIFI。地址:https://github.com/zimoyin/Autojsx.WIFI
在 Pycharm 连接到 Auto.js app 的插件服务器,确保设备和 IDEA 之间的双向通信
使用 IDEA 推荐使用专业版,在 IDEA 的插件中心找到,搜索名称为 Autojsx.WIFI
创建项目,有两种方式,分别为 SDK项目 和 项目组
- 在 Autojsx 项目内右键项目可以创建子项目。它会创建一个 autojs 原生编写方式项目。在 SDK和项目组都可以使用。
子项目的文件结构:
resources:插件的资源
lib:存放开发时的sdk用于api提示,其他js也可以放在这里,但是不要放进sdk文件夹
src: 存储js代码
他们在运行和上传项目时会打包到一起,如果你在src想引起其他两个文件夹的资源,请指定路径为根路径(./test.text)而不是带着文件夹名称路径(./resources/test.text) - 关于控制台,位置在 IDEA 新UI的左侧,旧 UI 的下侧。
- 如何运行项目。
点击右上角运行按钮(新UI在run菜单下) 或者 右键你打开的脚本 或者 在Autojs菜单里面找运行项目 或者 控制台中单击运行项目。运行项目前你需要打开服务器,如果没有打开当你点击运行的时候会默认打开,默认端口为 9317 是Autojsx 的默认端口,如果你没填那么就是这个
通过 Tool -> Autojs -> 修改端口/修改IP 可以更改 - 如何上传运行: 右键文件夹、右键你打开的脚本、在Autojs菜单里面找保存
VSCode
Auto.js-Autox.js-VSCodeExt:https://marketplace.visualstudio.com/items?itemName=aaroncheng.auto-js-vsce-fixed
这里直接使用 VSCode 和 AutoX.js 插件进行开发。安装好 VSCode 和 AutoX.js 插件后,VSCode 打开 命令面板 ( Ctrl + shift + p ),输入 autoxjs 即可看到 插件支持的命令
找到 start server 点击即可启动服务。然后手机上打开悬浮窗并连接电脑。至此环境配置成功,现在就可以在 vscode 上编写并运行,手机就会相应执行脚本。也可以直接在手机的 Auto.js 应用中直接码代码,不过那酸爽谁用谁知道。。。
示例脚本:
示例:
-
// 购物车按钮的id
-
const carId =
id(
'com.yaya.zone:id/rl_car_layout');
-
-
// 控制台与手机弹窗输出 toastLog autox.js 全局函数,请查看官方文档
-
//控件是否存在
-
toastLog(
'控件是否存在:'+carId.
exists())
-
-
//搜索到唯一元素并点击
-
carId.
findOnce().
click()
使用如下代码可以直接跳转到APP内的某个页面
-
// 这样启动没有广告,有点android开发经验,贼爽
-
app.
startActivity({
-
action:
"android.intent.action.VIEW",
-
className:
"com.yaya.zone.home.HomeActivity",
-
packageName:
"com.yaya.zone",
-
});
className 与 packageName 查看方法:MT管理器 -> 左上角菜单->Activity记录
Node.js(第二代API)对比 Rhino(第一代API)的优势是:
- Node.js引擎的JavaScript执行性能是Rhino的100倍以上
- 使用Node.js引擎的代码加密强度高,目前不能被还原
- Node.js支持ES2021以上语言标准,Rhino仅支持ES5和部分ES6特性
- Node.js引擎本身的Bug基本很少,而Rhino引擎的模块系统、语言实现本身有不少Bug
- Node.js对应的第二代API设计较好、更加标准
- 可以使用第三方npm包
- Node.js的网络资料较多
Node.js(第二代API)对比 Rhino(第一代API)的劣势是:
- Node.js对应的第二代API上手门槛较高,需要对Promise、异步有一定了解,尤其对新手来说
- 第二代API的文档阅读较难,并且目前正在完善中
- Rhino和第一代API的社区的源码、资料、示例较多
- 第一代API使用上比较方便
如何 选择 引擎
- 如果你是没有编程基础的新手,并且不想深入学习编程,代码能跑就行,不追求可维护性、可读性,不追求最新语言标准,能容忍引擎、API设计本身有不符合标准的地方和bug,那么可以使用Rhino引擎和第一代API,上手较快。无需特别配置,代码默认都以该引擎执行。
- 如果追求性能和深入了解,则使用 Node.js 引擎和第二代API,对Rhino引擎和第一代API了解即可。
引擎的选择并非绝对,可以一边使用Rhino引擎一边使用Node.js引擎,或者在学习一段时间后再看另一个引擎/API。
打包成 apk
使用 autox.js 打包成 app,打包的软件报毒,这个问题是因为打包后的app用了 autojs 作为包名,需要用MT管理器把apk 的xml中的autojs字符串换成任意其他值就可以了。
autojs 打包的软件报毒:https://zhuanlan.zhihu.com/p/425140138
权限 设置
示例:申请截图代码
-
if (!
requestScreenCapture()) {
-
toastLog(
"请求截图权限 失败");
-
}
else {
-
toastLog(
"请求截图权限 成功");
-
}
'
运行
运行
执行以上代码后, 正常应该弹出一个框, 让用户选择是否允许截图。但是有的时候, 不会弹出这个界面,这个时候就要去 设置-->应用管理-->AutoJsPro-->权限管理-->后台弹出界面-->允许
悬浮窗权限。
判断是否有悬浮窗权限的代码
floaty.checkPermission();
返回一个布尔值, true就是有权限, false就是没有权限
如果app没有悬浮窗权限,提示用户,然后跳转悬浮窗权限设置界面, 方便用户勾选
跳转悬浮窗权限设置界面代码
-
app.
startActivity({
-
packageName:
"com.android.settings",
-
className:
"com.android.settings.Settings$AppDrawOverlaySettingsActivity",
-
data:
"package:" + context.
getPackageName(),
-
});
后台自启权限,跳转启动管理页面的代码
-
let intent =
new
Intent();
-
intent.
addFlags(
Intent.
FLAG_ACTIVITY_NEW_TASK);
-
let pkg =
"com.huawei.systemmanager";
-
let cls =
"com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity";
-
let componentName =
new android.
content.
ComponentName(pkg, cls);
-
intent.
setComponent(componentName);
-
context.
startActivity(intent);
常见问题
如何定时运行脚本
- 点击脚本右边的菜单按钮->更多->定时任务即可定时运行脚本,但是必须保持Auto.js后台运行(自启动白名单、电源管理白名单等)。同时,可以在脚本的开头使用
device.wakeUp()
来唤醒屏幕;但是,Auto.js没有解锁屏幕的功能,因此难以在有锁屏密码的设备上达到效果。
定时任务如何获取外部参数
- 如果一个脚本是用intent"启动"的,比如定时任务中的特定事件(网络状态变化等)触发而启动的,则可以通过
engines.myEngine().execArgv.intent
获取启动的intent,从而获取外部参数。
如何把图片和脚本一起打包,或者打包多个脚本
- 如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目功能。
点击Auto.js的"+"号,选择项目,填写项目名称、包名等信息以后,点击"√"即可新建一个项目。可以在项目中放多个脚本、模块、资源文件,点击项目工具栏的apk打包图标即可打包一个项目,点击工具栏可以重新配置项目。
例如,主脚本要读取同一文件夹下的图片1.png,再执行找图,则可以通过images.read("./1.png")来读取,其中"./1.png"表示同一目录1.png图片;ui中的图片控件要引用同一文件夹的2.png图片则为<img src="file://2.png"/>。Auto.js内置的函数和模块都支持相对路径,但是,其他情况则需要使用files.path()函数来把相对路径转换为绝对路径。
如何使打包的应用不显示主界面
- 需要使用项目功能。新建项目后,修改项目下的project.json文件,增加以下条目:
"launchConfig": {
"hideLogs": true
}
例如:
{
"name": "项目名称",
"versionName": "1.0.0",
"versionCode": 1,
"packageName": "org.autojs.example",
"main": "main.js",
"launchConfig": {
"hideLogs": true
}
}
"launchConfig"表示启动配置,"hideLogs"表示隐藏日志。
参见项目与项目配置。
Auto.js自带的模块和函数中没有的功能如何实现
由于Auto.js支持直接调用Android的API,对于Auto.js没有内置的函数,可以直接通过修改Android代码为JavaScript代码实现。调用 Android 和 Java 的 API 参见 Work with Java。
例如:旋转图片的Android代码为:
-
import android.graphics.Bitmap;
-
import android.graphics.Matrix;
-
-
public
static Bitmap
rotate
(final Bitmap src,
-
final
int degrees,
-
final
float px,
-
final
float py) {
-
if (degrees ==
0)
return src;
-
Matrix
matrix
=
new
Matrix();
-
matrix.setRotate(degrees, px, py);
-
Bitmap
ret
= Bitmap.createBitmap(src,
0,
0, src.getWidth(), src.getHeight(), matrix,
true);
-
return ret;
-
}
转换为JavaScript的代码后为:
-
importClass(android.
graphics.
Bitmap);
-
importClass(android.
graphics.
Matrix);
-
-
function
rotate(
src, degrees, px, py){
-
if (degrees ==
0)
return src;
-
var matrix =
new
Matrix();
-
matrix.
setRotate(degrees, px, py);
-
var ret =
Bitmap.
createBitmap(src,
0,
0, src.
getWidth(), src.
getHeight(), matrix,
true);
-
return ret;
-
}
autojs 常用功能整理
:https://github.com/snailuncle/autojsCommonFunctions/blob/master/autojsCommonFunctions.js
-
// //导入模块
-
// function 导入常用函数模块(){
-
// var url='https://raw.githubusercontent.com/snailuncle/autojsCommonFunctions/master/autojsCommonFunctions.js'
-
// var r = http.get(url)
-
// log("code = " + r.statusCode);
-
// var html=r.body.bytes()
-
// files.write('./autojsCommonFunctions.js','')
-
// files.writeBytes('./autojsCommonFunctions.js',html)
-
// var common=require('./autojsCommonFunctions.js')
-
// return common
-
// }
-
// var common=导入常用函数模块()
-
// log(common)
-
// for(let i=0;i<33;i++){
-
// common.闪光弹('fire in the hole')
-
// }
-
-
let func_list = [
-
'点击控件',
-
'铃声',
-
'启动app',
-
'停止app',
-
'卸载app',
-
'卸载app没root',
-
'清除app数据',
-
'启动最新安装的app',
-
'停止最新安装的app',
-
'卸载最新安装的app',
-
'清除最新安装的app数据',
-
'静默安装app',
-
'获取app图标',
-
'控制app联网',
-
'获取手机上所有的app名字',
-
'点击输入框弹出输入法',
-
'使所有输入框点击时都能弹出输入法',
-
'失去焦点',
-
'是否root',
-
'获取指定应用的版本号',
-
'打开qq群名片',
-
'打开qq名片',
-
'qq强制聊天',
-
'字节变为gbk中文',
-
'最新安装的app',
-
'文件修改时间',
-
'文件大小',
-
'字符串变字节',
-
'日期加N天',
-
'md5',
-
'是横屏还是竖屏',
-
'截图',
-
'随机字符',
-
'获取时间',
-
'调整手机音量',
-
'微信扫一扫',
-
'公共字符串',
-
'网络',
-
'安卓intent源码',
-
'获取手机ip地理位置',
-
'替换系统文件',
-
'编辑距离',
-
'数组交集',
-
'提取包含关键字的app',
-
'获取页面所有文字',
-
'悬浮控制',
-
'闪光弹',
-
'打开开发者选项',
-
'气泡',
-
'随机字符串',
-
'wifi状态',
-
'开关飞行模式',
-
'上滑',
-
'获取deflate网页内容',
-
'获取gzip网页内容',
-
'发送通知',
-
'去除通知',
-
'clickAttr',
-
'pressAttr',
-
'获取拼音',
-
'画出控件区域',
-
'获取多开分身右侧字母区域控件',
-
'画矩形',
-
'画点',
-
'strip',
// 去除头尾空格
-
'大数组包含小数组',
-
'getObjType',
-
'deepCopy',
// 深拷贝
-
'反色',
-
'bmob上传文件',
-
'bmob下载文件',
-
'过微信QQ滑块',
-
'确保有jar文件',
-
'获取QQ收藏内容',
-
'获取多开分身右侧字母区域指定字母的位置',
-
'模拟真人滑动',
-
'画手势',
-
]
示例:领取淘宝喵币
打开淘宝 ---> 点击领喵币按钮
为了编写脚本简单,淘宝预先打开喵铺主页
-
auto.
waitFor()
-
let app_name =
"微信";
-
launchApp(app_name);
-
sleep(
10000);
-
// 根据 "文字信息" 寻找按钮, 并点击
-
let btn_1 =
text(
"用短信验证码登录").
findOnce();
-
相关文章
- JavaScript 自动化软件:AutoX.js
- Puppeteer自动化:使用JavaScript定制PDF下载
- 如何做软件自动化测试?
- 针对工业自动化控制软件SCADA连接数据库ODBC配置备忘
- Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
- Golang实现一个批量自动化执行树莓派指令的软件(2)指令
- Google的工程师质量文化(code-review)(思考)-第二步: 定义期望的做事方法 开发团队编写自动化测试。 主动运行自动化测试用例。 做代码评审。
第三步: 提供相应的培训在公司范围内组织代码设计与自动化测试培训。(思考二:以前端代码为例 eslint 的规范是由培训者定义还是由团队成员老决定?) 为每个团队指派自动化测试教练,帮助团队提高自动化测试技能。
第四步: 做些必需的事情来强化那些行为建立团队测试认证机制(test certified mechanism),共分3个大级别,12个子级,用于评估每个软件产品团队的测试成熟度。 通过每个季度统计各级别上的团队数量分布,来评估自动化测试文化在公司内部的进展程度。 建立自动化测试组(test group)和测试教练组(test mentor),帮助团队提升自动化测试能力。 建立代码评审资质证书。(思考三:评审资质需要怎样的考核?) 代码合入版本仓库之前强制做代码评审。 代码评审之前,必须运行自动化测试用例,并提交报告给代码评审者。(思考四:评审者来code自动化测试吗脚本?)
- 【软件测试自动化-QTP系列讲座 41】== 强制获取文本相对坐标 ==
- 自动化时代,软件工程师会被取代吗
- python+selenium自动化软件测试(第6章):selenium phantomjs页面解析使用