auto.js 入门学习(参考GitHub文档)

GitHub开发文档

input([i, ]text)
i {number} 表示要输入的为第i + 1个输入框
text {string} 要输入的文本
App
app模块提供一系列函数,用于使用其他应用、与其他应用交互。例如发送意图、打开文件、发送邮件等。

app.launchApp(appName)
appName {string} 应用名称
通过应用名称启动应用。如果该名称对应的应用不存在,则返回false; 否则返回true。如果该名称对应多个应用,则只启动其中某一个。

该函数也可以作为全局函数使用。

app.getPackageName(appName)
appName {string} 应用名称
获取应用名称对应的已安装的应用的包名。如果该找不到该应用,返回null;如果该名称对应多个应用,则只返回其中某一个的包名。

该函数也可以作为全局函数使用。
app.launch(packageName)
packageName {string} 应用包名
通过应用包名启动应用。如果该包名对应的应用不存在,则返回false;否则返回true。

该函数也可以作为全局函数使用

app.getAppName(packageName)
packageName {string} 应用包名
获取应用包名对应的已安装的应用的名称。如果该找不到该应用,返回null。

该函数也可以作为全局函数使用。

app.openAppSetting(packageName)
packageName {string} 应用包名
打开应用的详情页(设置页)。如果找不到该应用,返回false; 否则返回true。

该函数也可以作为全局函数使用。
app.uninstall(packageName)
packageName {string} 应用包名
卸载应用。执行后会会弹出卸载应用的提示框。如果该包名的应用未安装,由应用卸载程序处理,可能弹出"未找到应用"的提示。

不是全局变量不能直接使用,需要使用app.unistall(packageName)

app.openUrl(url)
url {string} 网站的Url,如果不以"http://""https://"开头则默认是"http://"。
用浏览器打开网站url。

如果没有安装浏览器应用,则抛出ActivityNotException。

app.sendEmail(options)
options {Object} 发送邮件的参数。包括:
email {string} | {Array} 收件人的邮件地址。如果有多个收件人,则用字符串数组表示
cc {string} | {Array} 抄送收件人的邮件地址。如果有多个抄送收件人,则用字符串数组表示
bcc {string} | {Array} 密送收件人的邮件地址。如果有多个密送收件人,则用字符串数组表示
subject {string} 邮件主题(标题)
text {string} 邮件正文
attachment {string} 附件的路径。
根据选项options调用邮箱应用发送邮件。这些选项均是可选的。

如果没有安装邮箱应用,则抛出ActivityNotException。

//发送邮件给[email protected][email protected]
app.sendEmail({
    email: ["[email protected]", "[email protected]"],
    subject: "这是一个邮件标题",
    text: "这是邮件正文"
});

app.startActivity(name)
name {string} 活动名称,可选的值为:
console 日志界面
settings 设置界面
启动Auto.js的特定界面。该函数在Auto.js内运行则会打开Auto.js内的界面,在打包应用中运行则会打开打包应用的相应界面。

进阶: 意图Intent
Intent(意图) 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

启动活动(Activity): Activity 表示应用中的一个"屏幕"。例如应用主入口都是一个Activity,应用的功能通常也以Activity的形式独立,例如微信的主界面、朋友圈、聊天窗口都是不同的Activity。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。

启动服务(Service): Service 是一个不使用用户界面而在后台执行操作的组件。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。

传递广播: 广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast(),您可以将广播传递给其他应用。

本模块提供了构建Intent的函数(app.intent()), 启动Activity的函数app.startActivity(), 发送广播的函数app.sendBroadcast()。

使用这些方法可以用来方便的调用其他应用。例如直接打开某个QQ号的个人卡片页,打开某个QQ号的聊天窗口等。

var qq = "2732014414";
app.startActivity({ 
    action: "android.intent.action.VIEW", 
    data:"mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin=" + qq, 
    packageName: "com.tencent.mobileqq", 
});

全局变量与函数

全局变量和函数在所有模块中均可使用。 但以下变量的作用域只在模块内,详见 module:

exports
module
require() 以下的对象是特定于 Auto.js 的。 有些内置对象是 JavaScript 语言本身的一部分,它们也是全局的。
一些模块中的函数为了使用方便也可以直接全局使用,这些函数在此不再赘述。例如timers模块的setInterval, setTimeout等函数


sleep(n)
n {number} 毫秒数
暂停运行n毫秒的时间。1秒等于1000毫秒。

currentPackage()
返回 {string}
返回最近一次监测到的正在运行的应用的包名,一般可以认为就是当前正在运行的应用的包名。

此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。

currentActivity()
返回 {string}
返回最近一次监测到的正在运行的Activity的名称,一般可以认为就是当前正在运行的Activity的名称。

此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。

setClip(text)
text {string} 文本
设置剪贴板内容。此剪贴板即系统剪贴板,在一般应用的输入框中"粘贴"既可使用。

getClip()
返回 {string}
返回系统剪贴板的内容。

toast(message)
message {string} 要显示的信息
以气泡显示信息message几秒。(具体时间取决于安卓系统,一般都是2)

注意,信息的显示是"异步"执行的,并且,不会等待信息消失程序才继续执行。如果在循环中执行该命令,可能出现脚本停止运行后仍然有不断的气泡信息出现的情况。

toastLog(message)
message {string} 要显示的信息
相当于toast(message);log(message)。显示信息message并在控制台中输出。参见console.log。


Type to search
Auto.js文档
首页
Q&A
如何阅读本文档 - Documentation
应用 - App
一般全局函数 - Globals
sleep(n)
currentPackage()
currentActivity()
setClip(text)
getClip()
toast(message)
toastLog(message)
waitForActivity(activity[, period = 200])
waitForPackage(package[, period = 200])
exit()
random(min, max)
random()
requiresApi(api)
requiresAutojsVersion(version)
runtime.requestPermissions(permissions)
runtime.loadJar(path)
runtime.loadDex(path)
context
控制台 - Console
基于坐标的操作 - CoordinatesBasedAutomation
设备 - Device
对话框 - Dialogs
脚本引擎 - Engines
事件与监听 - Events
悬浮窗 - Floaty
文件系统 - Files
HTTP - Http
图片与颜色 - Images
画布 - Canvas
按键模拟 - Keys
多媒体 - Media
模块 - Modules
基于控件的操作 - WidgetsBaseAutomation
传感器 - Sensor
Shell - Shell
本地储存 - Storages
多线程 - Threads
定时器 - Timers
用户界面 - UI
调用Java - Work with Java
全局变量与函数
全局变量和函数在所有模块中均可使用。 但以下变量的作用域只在模块内,详见 module:

exports
module
require() 以下的对象是特定于 Auto.js 的。 有些内置对象是 JavaScript 语言本身的一部分,它们也是全局的。
一些模块中的函数为了使用方便也可以直接全局使用,这些函数在此不再赘述。例如timers模块的setInterval, setTimeout等函数。

sleep(n)
n {number} 毫秒数
暂停运行n毫秒的时间。1秒等于1000毫秒。

//暂停5毫秒
sleep(5000);
currentPackage()
返回 {string}
返回最近一次监测到的正在运行的应用的包名,一般可以认为就是当前正在运行的应用的包名。

此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。

currentActivity()
返回 {string}
返回最近一次监测到的正在运行的Activity的名称,一般可以认为就是当前正在运行的Activity的名称。

此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。

setClip(text)
text {string} 文本
设置剪贴板内容。此剪贴板即系统剪贴板,在一般应用的输入框中"粘贴"既可使用。

setClip("剪贴板文本");
getClip()
返回 {string}
返回系统剪贴板的内容。

toast("剪贴板内容为:" + getClip());
toast(message)
message {string} 要显示的信息
以气泡显示信息message几秒。(具体时间取决于安卓系统,一般都是2)

注意,信息的显示是"异步"执行的,并且,不会等待信息消失程序才继续执行。如果在循环中执行该命令,可能出现脚本停止运行后仍然有不断的气泡信息出现的情况。 例如:

for(var i = 0; i < 100; i++){
  toast(i);
}
运行这段程序以后,会很快执行完成,且不断弹出消息,在任务管理中关闭所有脚本也无法停止。 要保证气泡消息才继续执行可以用:

for(var i = 0; i < 100; i++){
  toast(i);
  sleep(2000);
}
或者修改toast函数:

var _toast_ = toast;
toast = function(message){
  _toast_(message);
  sleep(2000);
}
for(var i = 0; i < 100; i++){
  toast(i);
}
toastLog(message)
message {string} 要显示的信息
相当于toast(message);log(message)。显示信息message并在控制台中输出。参见console.log。

waitForActivity(activity[, period = 200])
activity Activity名称
period 轮询等待间隔(毫秒)
等待指定的Activity出现,period为检查Activity的间隔。

waitForPackage(package[, period = 200])
package 包名
period 轮询等待间隔(毫秒)
等待指定的应用出现。例如waitForPackage("com.tencent.mm")为等待当前界面为微信。

exit()
立即停止脚本运行。

立即停止是通过抛出ScriptInterrupttedException来实现的,因此如果用try...catchexit()函数的异常捕捉,则脚本不会立即停止,仍会运行几行后再停止。

random(min, max)
min {number} 随机数产生的区间下界
max {number} 随机数产生的区间上界
返回 {number}
返回一个在[min...max]之间的随机数。例如random(0, 2)可能产生0, 1, 2random()
返回 {number}
返回在[0, 1)的随机浮点数。
requiresApi(api)
api Android版本号
表示此脚本需要Android API版本达到指定版本才能运行。例如requiresApi(19)表示脚本需要在Android 4.4以及以上运行。

调用该函数时会判断运行脚本的设备系统的版本号,如果没有达到要求则抛出异常。

可以参考以下Android API和版本的对照表:

平台版本: API级别

Android 7.024

Android 6.023

Android 5.122

Android 5.021

Android 4.4W: 20

Android 4.419

Android 4.318

runtime.requestPermissions(permissions)
permissions {Array} 权限的字符串数组
动态申请安卓的权限。例如:

//请求GPS权限
runtime.requestPermissions(["access_fine_location"]);
尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:

access_fine_location GPS权限
record_audio 录音权限

context
全局变量。一个android.content.Context对象。

注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。

Console

控制台模块提供了一个和Web浏览器中相似的用于调试的控制台。用于输出一些调试信息、中间结果等。 console模块中的一些函数也可以直接作为全局函数使用,例如log, print等。

console.show()
显示控制台。这会显示一个控制台的悬浮窗(需要悬浮窗权限)。

console.hide()
隐藏控制台悬浮窗。

console.clear()
清空控制台。

console.log([data][, ...args])
data {any}
...args {any}
打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。

const count = 5;
console.log('count: %d', count);
// 打印: count: 5 到 stdout
console.log('count:', count);
// 打印: count: 5 到 stdout
详见 util.format()。

该函数也可以作为全局函数使用。

console.verbose([data][, ...args])
data {any}
...args {any}
与console.log类似,但输出结果以灰色字体显示。输出优先级低于log,用于输出观察性质的信息。

console.info([data][, ...args])
data {any}
...args {any}
与console.log类似,但输出结果以绿色字体显示。输出优先级高于log, 用于输出重要信息。

console.warn([data][, ...args])
data {any}
...args {any}
与console.log类似,但输出结果以蓝色字体显示。输出优先级高于info, 用于输出警告信息。

console.error([data][, ...args])
data {any}
...args {any}
与console.log类似,但输出结果以红色字体显示。输出优先级高于warn, 用于输出错误信息。

console.assert(value, message)
value {any} 要断言的布尔值
message {string} value为false时要输出的信息
断言。如果value为false则输出错误信息message并停止脚本运行。

var a = 1 + 1;
console.assert(a == 2, "加法出错啦");
console.time([label])
[v4.1.0新增]

label {String} 计时器标签,可省略
启动一个定时器,用以计算一个操作的持续时间。 定时器由一个唯一的 label 标识。 当调用 console.timeEnd() 时,可以使用相同的 label 来停止定时器,并以毫秒为单位将持续时间输出到控制台。 重复启动同一个标签的定时器会覆盖之前启动同一标签的定时器。

console.timeEnd(label)
[v4.1.0新增]

label {String} 计时器标签
停止之前通过调用 console.time() 启动的定时器,并打印结果到控制台。 调用 console.timeEnd() 后定时器会被删除。如果不存在标签指定的定时器则会打印 NaNms。

console.time('求和');
var sum = 0;
for(let i = 0; i < 100000; i++){
    sum += i;
}
console.timeEnd('求和');
// 打印 求和: xxx ms
console.trace([data][, ...args])
[v4.1.0新增]

data {any}
...args {any}
与console.log类似,同时会打印出调用这个函数所在的调用栈信息(即当前运行的文件、行数等信息)。

console.trace('Show me');
// 打印: (堆栈跟踪会根据被调用的跟踪的位置而变化)
// Show me
//  at :7
console.input(data[, ...args])
data {any}
...args {any}
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串用eval计算后返回。

部分机型可能会有控制台不显示输入框的情况,属于bug。

例如:

var n = console.input("请输入一个数字:"); 
//输入123之后:
toast(n + 1);
//显示124
console.rawInput(data[, ...args])
data {any}
...args {any}
与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串直接返回。

部分机型可能会有控制台不显示输入框的情况,属于bug。

例如:

var n = console.rawInput("请输入一个数字:"); 
//输入123之后:
toast(n + 1);
//显示1231
console.setSize(w, h)
w {number} 宽度
h {number} 高度
设置控制台的大小,单位像素。

console.show();
//设置控制台大小为屏幕的四分之一
console.setSize(device.width / 2, device.height / 2);
console.setPosition(x, y)
x {number} 横坐标
y {number} 纵坐标
设置控制台的位置,单位像素。

console.show();
console.setPosition(100, 100);
console.setGlobalLogConfig(config)
[v4.1.0新增]

config {Object} 日志配置,可选的项有:
file {string} 日志文件路径,将会把日志写入该文件中
maxFileSize {number} 最大文件大小,单位字节,默认为512 * 1024 (512KB)
rootLevel {string} 写入的日志级别,默认为"ALL"(所有日志),可以为"OFF"(关闭), "DEBUG", "INFO", "WARN", "ERROR", "FATAL"等。
maxBackupSize {number} 日志备份文件最大数量,默认为5
filePattern {string} 日志写入格式,参见PatternLayout
设置日志保存的路径和配置。例如把日志保存到"/sdcard/1.txt":

console.setGlobalLogConfig({
    "file": "/sdcard/1.txt"
});
注意该函数会影响所有脚本的日志记录。

print(text)
text {string} | {Object} 要打印到控制台的信息
相当于log(text)

基于坐标的触摸模拟

本章节介绍了一些使用坐标进行点击、滑动的函数。这些函数有的需要安卓7.0以上,有的需要root权限。

要获取要点击的位置的坐标,可以在开发者选项中开启"指针位置"。

基于坐标的脚本通常会有分辨率的问题,这时可以通过setScreenMetrics()函数来进行自动坐标放缩。这个函数会影响本章节的所有点击、长按、滑动等函数。通过设定脚本设计时的分辨率,使得脚本在其他分辨率下自动放缩坐标。

控件和坐标也可以相互结合。一些控件是无法点击的(clickable为false), 无法通过.click()函数来点击,这时如果安卓版本在7.0以上或者有root权限,就可以通过以下方式来点击

setScreenMetrics(width, height)
width {number} 屏幕宽度,单位像素
height {number} 屏幕高度,单位像素
设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。

click(x, y)
x {number} 要点击的坐标的x值
y {number} 要点击的坐标的y值
模拟点击坐标(x, y),并返回是否点击成功。只有在点击执行完成后脚本才继续执行。

一般而言,只有点击过程(大约150毫秒)中被其他事件中断(例如用户自行点击)才会点击失败。

使用该函数模拟连续点击时可能有点击速度过慢的问题,这时可以用press()函数代替。

longClick(x, y)
x {number} 要长按的坐标的x值
y {number} 要长按的坐标的y值
模拟长按坐标(x, y), 并返回是否成功。只有在长按执行完成(大约600毫秒)时脚本才会继续执行。

一般而言,只有长按过程中被其他事件中断(例如用户自行点击)才会长按失败。

longClick(x, y)
x {number} 要长按的坐标的x值
y {number} 要长按的坐标的y值
模拟长按坐标(x, y), 并返回是否成功。只有在长按执行完成(大约600毫秒)时脚本才会继续执行。

一般而言,只有长按过程中被其他事件中断(例如用户自行点击)才会长按失败。

swipe(x1, y1, x2, y2, duration)
x1 {number} 滑动的起始坐标的x值
y1 {number} 滑动的起始坐标的y值
x2 {number} 滑动的结束坐标的x值
y2 {number} 滑动的结束坐标的y值
duration {number} 滑动时长,单位毫秒
模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。只有滑动操作执行完成时脚本才会继续执行。

一般而言,只有滑动过程中被其他事件中断才会滑动失败。

gesture(duration, [x1, y1], [x2, y2], ...)
duration {number} 手势的时长
[x, y] ... 手势滑动路径的一系列坐标
模拟手势操作。例如gesture(1000, [0, 0], [500, 500], [500, 1000])为模拟一个从(0, 0)(500, 500)(500, 100)的手势操作,时长为2秒。

Tap(x, y)
x, y {number} 要点击的坐标。
点击位置(x, y), 您可以通过"开发者选项"开启指针位置来确定点击坐标。

Swipe(x1, y1, x2, y2, [duration])
x1, y1 {number} 滑动起点的坐标
x2, y2 {number} 滑动终点的坐标
duration {number} 滑动动作所用的时间
滑动。从(x1, y1)位置滑动到(x2, y2)位置。

你可能感兴趣的:(脚本语言)