Skip to content
鼓励作者:欢迎打赏犒劳

autojs常用api

常见控件的类名

js
android.widget.TextView 文本控件
android.widget.ImageView 图片控件
android.widget.Button 按钮控件
android.widget.EditText 输入框控件
android.widget.AbsListView 列表控件
android.widget.LinearLayout 线性布局
android.widget.FrameLayout 帧布局
android.widget.RelativeLayout 相对布局
android.widget.RelativeLayout 相对布局
android.support.v7.widget.RecyclerView 通常也是列表控件

查找控件

js
className("android.widget.FrameLayout").desc("红包签到").find()

className("android.widget.FrameLayout").desc("红包签到").find().size()

控件属性

js
/**
 * 打印控件信息  可以传递 数组或者对象
 * @param {控件} node
 */
function PrintNodeInfo(ele) {
    log("开始打印控件--------------->");
    if (ele && Array.isArray(ele)) {
        for (let i = 0; i < ele.length; i++) {
            const node = ele[i];
            PrintNodeInfoByNode(node);
            console.log("\r\n");
        }
    } else if (ele) {
        PrintNodeInfoByNode(ele);
    }
    log("控件打印完毕--------------->");
}
function PrintNodeInfoByNode(node) {
    log("元素的类名: " + node.className());
    log("元素的文本: " + node.text());
    log("元素的深度: " + node.depth());
    log("元素的描述: " + node.desc());
    log("元素坐标: " + node.bounds());
    log("元素是否可以被点击: " + node.clickable());
    log("元素是否选中: " + node.checked());
    log("元素是否可滑动: " + node.scrollable());
    log("元素是否可见: " + node.visibleToUser());
}

坐标

js
bounds().left:长方形左边界的x坐标

bounds().right:长方形右边界的x坐标

bounds().top:长方形上边界的y坐标

bounds().bottom:长方形下边界的y坐标

bounds().centerX():长方形中点x坐标

bounds().centerY():长方形中点y坐标

bounds().width():长方形宽度也就是控件宽度

bounds().height():长方形高度也就是控件高度

click(x,y):坐标(x,y)处执行点击操作  //注意:安卓7以下点击需要root权限且函数为Tap(x,y)

事件相关

退出事件

就是调用exit()的时候会触发的回调

js
// 监听退出事件
events.on("exit", function () {
    console.log("脚本即将退出...");
    log("3秒之后关闭程序");
    exit();
});

监听按键

js
//启用按键监听
events.observeKey();
//监听音量上键按下
events.onKeyDown("volume_up", function(event){
    toast("音量上");
});
 
//监听音量下键弹起
events.onKeyDown("volume_down", function(event){
    toast("音量下");
});
 
//监听Home键弹起
events.onKeyDown("home", function(event){
    toast("Home");
});
 
//监听菜单键按下
events.onKeyDown("menu", function(event){
    toast("菜单键被按下了");
});

滑动

swipe上下滑动和翻页

swipe(x1, y1, x2, y2, duration)

  • x1 {number} 滑动的起始坐标的x值
  • y1 {number} 滑动的起始坐标的y值
  • x2 {number} 滑动的结束坐标的x值
  • y2 {number} 滑动的结束坐标的y值
  • duration {number} 滑动时长,单位毫秒
js
const h = device.height // 屏幕高
const w = device.width // 屏幕宽
const x1 = (w / 3) * 2 // 横坐标3分之2处
const x2 = (w / 3) * 1 // 横坐标3分之1处
const h1 = (h / 6) * 3 // 纵坐标6分之3处
const h2 = (h / 6) * 5 // 纵坐标6分之5处
const h3 = h / 6 // 纵坐标6分之1处

swipe(x1, h1, x2, h1, 50) // 向左滑
swipe(x2, h1, x1, h1, 50) // 向右滑
swipe(x1, h1, x1, h2, 50) // 向下滑
swipe(x1, h2, x1, h3, 50) // 向上滑

翻页

js
//向上滑动一页
className("android.support.v7.widget.RecyclerView").findOne().scrollForward();

//向下滑动一页
className("android.support.v7.widget.RecyclerView").findOne().scrollBackward();

系统相关

设备信息

屏幕宽高

js
const h = device.height // 屏幕高
const w = device.width // 屏幕宽

// 有时候获取不到 值为0 可以试试下面的写法
console.log(Packages.android.content.res.Resources.getSystem().getDisplayMetrics().widthPixels);
console.log(Packages.android.content.res.Resources.getSystem().getDisplayMetrics().heightPixels);

息屏

js
var success = runtime.accessibilityBridge.getService().performGlobalAction(android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN)

唤醒屏幕

没有返回值

js
device.wakeUp()

设备长亮

js
// 一直保持屏幕常亮 长亮一个小时,如果时间为null,则一直长亮下去,建议加时间
device.keepScreenOn(3600 * 1000);

//关闭屏幕常亮
device.cancelKeepingAwake()

解锁

device.isScreenOn() 判断设备屏幕是否亮着的。

js
// 如果是滑动解锁
if (device.isScreenOn() == false) {
    device.wakeUp();
    sleep(500); // 等待屏幕亮起
    // 假设滑动解锁需要从底部滑动到顶部
    var x1 = device.width / 2;
    var y1 = (device.height * 3) / 4;
    var y2 = (device.height * 1) / 4;

    swipe(x1, y1, x1, y2, 500); // 滑动操作
    sleep(1000); // 等待解锁反应
}

// 如果是PIN码或密码解锁,可以模拟输入
if (device.isScreenOn() == false) {
    device.wakeUp();
    sleep(500); // 等待屏幕亮起

    // 输入PIN口令, 例如1234
    setText(0, "1");  // 输入1
    setText(1, "2");  // 输入2
    setText(2, "3");  // 输入3
    setText(3, "4");  // 输入4

    // 提交 PIN(根据具体设备,可能需要点击确认按钮)
}

设备信息

js
/*把媒体音量调到最大*/
device.setMusicVolume(device.getMusicMaxVolume());

/*来电,通知铃声设置最大*/
device.setNotificationVolume(device.getNotificationMaxVolume());

打开软件

js
toastLog("脚本开始");
//检查无障碍服务是否启动,若没有则跳转到无障碍服务启动界面,并等待;当服务启动后脚本继续运行
auto.waitFor();
//打开手机App
launchApp("淘宝");
toastLog("执行完了");
exit();

权限相关

请求悬浮窗权限

js
// 请求悬浮窗权限
if (!floaty.checkPermission()) {
  floaty.requestPermission();
}

弹框相关

悬浮框

js
var window = floaty.window(
  <linear>
    <text text="这是一个悬浮窗" />
  </linear>
);
window.setPosition(100, 100); // 设置悬浮窗的位置

如有转载或 CV 的请标注本站原文地址