AutoJs制作简易自动化脚本(持续更新)

一、环境搭建

代码编程建议使用vscode编写

下载安装autojs(建议还是下载4.1.1版本):​​​​​​Auto.js Pro (autojs.org)

2023-2-18免费版已经无法使用,建议使用 autox.js:Releases · kkevsekk1/AutoX · GitHub

调试建议下载雷电模拟器 :雷电安卓模拟器 (ldmnq.com)

 安装好auto.js之后记得开启以下操作:

1、先在vscode中下载auto.js插件,并且在查看--控制面板 中输入auto.js回车,就会有相应的命令,

 

2、开启auto.js的无障碍服务、悬浮窗、连接电脑

3、查看电脑ip:

二、auto.js官方文档

 Auto.js Pro文档 (autojs.org)

注意!!!!

因为抖音短视频的机制是,当进入页面的时候会有上下视频先进性加载缓存,如下图,所以当我们直接按照控件属性去寻找控件的时候,会一次性找到好多个,一般往往都会取第一个,所以我们一般都要加上visibleToUser()这个属性表示在可视范围内的。

三、开发遇到问题记录

1、当使用截图找相似图的时候,最好不要采用scrcpy的投屏形式进行截屏,直接采用手机截图(因为这样分辨率一样,更好找)

因为有些手机没法永久设置同意截图的权限,导致每次运行都要在截图的时候进行同意权限,那么在刚开始运行脚本的时候就进行设置权限,而这个权限只需要同意一次就可,请求截图只要请求一次,否则会堵塞。

//封装一个截图函数
function imageClick(smallImgpath, saveImgPath, threshold, screen) {
    for (var i=0; i<=5; i++) {
        if (screen) {
            if (sig) {
                if (!requestScreenCapture()) { // 请求截图
                    // console.log("请求截图失败");
                    exit();
                }
                sig = false
            }
            var img = captureScreen();  //截图
            images.saveImage(img, "/sdcard/Download/" + saveImgPath);
        }
        var bg = images.read("/sdcard/Download/" + saveImgPath);
        var smallImg = images.read("/sdcard/Download/" + smallImgpath);
        var p = findImage(bg, smallImg, {
            threshold: threshold
        });
        if (p) {
            click(p.x, p.y)
            return 1
        }
        sleep(1000)
    }
}


//在需要的地方的调用即可
imageClick("send.jpg", "3.png", 0.6, true)   //第一个参数是需要找的小图,第二参数是大图,第三个参数是相似度,第四个参数是是否需要截图

2、安装问题:

2.1  launchApp(‘应用名’);会失效:因为存在同名软件,这时候使用包名;

2.2  无障碍服务经常被停止,导致AutoJs或者Apk不干活了:给软件设置允许【后台弹出界面】权限

2.3  使用图片识别的方法打包成apk,无法正常执行脚本,应该是打包后的图片路径与代码中的路径不一致,所以导致无法正确识别找到,可以换成计算图形位置来进行计算。

2.4  进行http请求,需要把http写在线程中,吧请求写在关闭弹窗--即关闭脚本处时,会产生异步问题,往往会直接先执行关闭脚本再进行请求——这样就是错的请求不出去,所以可以采用settimeout进行异步处理。

3、 控件属性

     3.1 选择框:单选框和多选框都是利用 attr()方法进行塞值

// 修改cb3的checked属性
$ui.cb3.attr("checked", "true");

    3.2 bounds范围使用坐标:可以用bounds这个范围来定位这个控件。尽管用这个方法定位控件对于静态页面十分准确,却无法兼容不同分辨率的设备;同时对于列表页面等动态页面无法达到效果,因此使用不推荐该选择器。 

   3.3 

 4、UI界面

      4.1 列表展示:直接渲染出来一个数组里面的数据

      参考文章: autojs之同一种布局的多种实现方式 - 知乎

 而<list></list>布局只能是垂直布局,不能横向列表遍历

     4.2 在子线程中更改UI的操作

     参考文章:https://www.cnblogs.com/x666-6/p/15006044.html

要在ui.run()中进行操作UI界面的改动 - 增删改

 

     4.3 引用VIew,使用setVisibility属性

参考文章: autojs一个经典的飘浮工具栏界面源码_autojs悬浮窗ui界面   

5、悬浮窗

      5.1 悬浮窗拖动:主要是setOnTouchListener监听事件

   在同一个id控件上,既可以移动也可以进行点击事件,这就是监听移动事件,根据移动的距离足够短,我们就可以认为这是点击事件。 

6、按钮

      6.1 按钮修改状态 

四、打包后运行速度很慢

参考文章: autojs内存处理机制代码,避免经常崩溃_autojs运行久了崩溃_ 

 autojs本身的线程代码threads.start(action)有内存泄露

但是使用 Java 的线程存在问题: thread线程中的代码执行结束就会关闭,但是如果该线程代码未执行完毕,即时主线程关闭,该线程也不会关闭 ,没有一种能够安全关闭线程的方法。

如果线程中有死循环.线程是不会运行完就结束的.

因为未跳出子程序.所以结束不了线程.反之,跳出子程序了就说明自动结束了线程.

死循环子程序的解决方法.可以用强制结束线程 ()或用变量来结束线程

题外话:脱离打包插件,自主打包

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值