安卓/ios脚本开发按键精灵经验小分享

news/2025/2/8 19:11:01 标签: android, ios, 个人开发

1. 程序的切换


我们经常碰到这样的需求:打开最近的应用列表,选取我们想要的程序。但是每个手机为了自己的风格,样式都有区别,甚至连列表的滑动方向都不一样,我们很难通过模拟操作来识别点击,那么我们做的只能给自己用。没办法了吗?当然不!我们来看看有哪些相关的命令,找啊找,终于,我们在命令大全找到了GetRunningApp()这个函数,命令的用法是:

  1. Dim arr() //定义一个数组变量
  2. arr=GetRunningApp() //获取所有应用程序包名并将它们合并到arr数组中保存
  3. For each n in arr
  4. TracePrint n //遍历arr数组并输出所有获取的包名字符
  5. Next

命令功能易懂,返回的是一个应用包名列表,好了,列表名找到了,那么我们来看看获取的列表名有什么规律,我们尝试打开一个应用并运行一下脚本:

我们可以发现,在获取运行中的应用列表的最下面,含有我们最后一次打开的应用,我们再打开一个应用试验一下:

证明我们的想法完全没错,并且,我们可以发现,倒数第二个就是我们上次打开的应用,根据这个特性,我们就不需要使用Menu键或者长按HOME键(Android 4.4之前)去打开最近的应用列表了。我们只需要这么写:

  1. Dim arr= GetRunningApp()
  2. Function UBound(arr)
  3. Dim i = 0
  4. For Each str In arr
  5. i = i + 1
  6. Next
  7. UBound = i
  8. End Function
  9. RunApp arr(UBound(arr)-2) //打开上次打开的程序,上一个程序是-2而不是-1是因为数组下标从0开始

2. 脚本之间的交互

有的功能,可能一个线程并不能完美实现,这时候需要用到多线程,但是多线程的写法相对来说复杂一些,那么有什么好办法吗?

这边可以尝试着打包两个小精灵,并同时运行,发现这是行得通的,那么就可以以这种另类的方式实现多线程,并且可以很方便的进行组合来实现功能

(例如我有一个脚本是用来做定时重启游戏的,一个是a游戏脚本的,一个是b游戏脚本的,那么只需要在定时重启游戏的脚本里设置不同游戏并运行,就等于开启了一个线程用来检测,这个时候可以自己搭配a游戏脚本或者b游戏脚本),这种方式虽然降低了脚本难度,但是确提高了控制难度,实在算不上多好的方法,但是它有其独特的地方,那就是可以根据同样的原理,来对手机按键(模拟器中)和PC按键之间进行交互。

比如希望手机上运行游戏,电脑端实时反馈游戏情况,相信很多人知道模拟器的图像并不好获取,一缩放就都变样了,因此使用PC按键来写模拟器中的游戏脚本不是好选择。而PC端用PC按键,手机端用手机按键,只要他们之间有桥梁就能够完美协调。


说了那么多,交互方法呢!别急,马上说,知道模拟器是可以共享文件夹的,也就是它可以和硬盘数据共享,那么交互就可以采用文本来交互!至于交互的方法:通过读取修改同一个文件来实现交互。
们来分析一个功能:我们需要在手机端上为XX平台刷数据量,于是我们需要登陆进去,简单的使用一键注册的方式来注册账号,并记录下系统为我们分配的ID号,使用识字命令记录下识别到的ID。然后存储到文本中,这个时候再通过PC端的文本读取来得到ID值进行处理,你可以识别到新的ID就添加到word文档,或者通过QQ发送给某某。
你们也许会说!文本又不需要实时去读取,根本没必要做此交互,以上的例子可能如此,但是这并不代表他就没有独特的地方可以用到,我们知道,现在的模拟器一个个先后支持了多开,如果我开了2个模拟器。有100个号需要他们完成,我们可以人工的一个模拟器设定一次,并分别记下他们处理到的位置,并且由于多开的模拟器处理速度不一致,可能出现有的快有的慢的情况,我们不好协调分配,基于这个情况,我们是否就能用到上述的方式来进行处理呢?

这个较多的是思想而不是代码,毕竟先有想法再实现,所以大家可以发散思维,可能一些另类的方法反而能更好的实现我们需要的功能!


http://www.niftyadmin.cn/n/5845221.html

相关文章

Java 线程池:7参数配置、4拒绝策略与执行流程详解

1. 为什么需要线程池? 在 Java 并发编程中,线程的创建和销毁是一项昂贵的操作。频繁地创建和销毁线程会带来较高的系统开销,甚至可能因线程数过多而导致 OOM(OutOfMemoryError) 或 CPU 过载。 线程池(Thre…

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 进程组 进程组的概念 当我们使用以下命令查与…

C#冒泡排序,选择排序

冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个过程一直进行,直到没有需要交换的元素为止,这时数列就排序完成了。这种算法的名字来源…

kafka消费端之消费者协调器和组协调器

文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段(JOINGROUP)**选举消费组的lcader选举分区分配策略 第三阶段(SYNC GROUP&…

Rust 核心语法总结

一、Rust 核心语法总结 1. 基础语法 变量绑定 let x = 5; // 不可变绑定 let mut y = 10; // 可变绑定数据类型 标量类型:i32, u32, f64, bool, char复合类型:元组 (i32, f64)、数组 [i32; 5]字符串:String(堆分配)、&str(切片)所有权系统 所有权规则…

Day54:eval()函数

在 Python 中,eval() 函数是一个内置函数,用于执行一个字符串表达式,并返回该表达式的计算结果。这个函数将字符串当作 Python 表达式来执行,它可以接受一个字符串作为输入,然后求值并返回结果。 今天我们将学习如何使用 eval() 函数,包括它的基本用法、常见应用以及潜在…

重塑生产制造企业项目管理新范式:项目模板在Tita中的卓越实践

在竞争激烈的生产制造领域,每一个项目的成功执行都是企业稳健前行的重要基石。然而,面对复杂多变的生产流程、严格的交货期限以及不断变化的客户需求,如何确保项目高效、有序地进行,成为了众多企业面临的共同挑战。此时&#xff0…

Java面试题-Java基础

文章目录 1.源码1.ArrayList1.ArrayList的扩容机制2.ArrayList和LinkedList的区别是什么?3.如何实现数组和List之间的转换? 2.HashMap1.HashMap的put方法流程2.HashMap的扩容机制3.HashMap在1.7的情况下多线程死循环的情况4.**jdk7的ConcurrentHashMap实…