Autojs基础-全局函数与变量(globals)

1.前言

全局函数与变量可以理解为能够直接使用的函数或变量。官方文档中介绍的内容比较少,有很多函数或者变量也加在了全局里面,官方文档中只是将前面没有涉及的全局函数和变量进行了介绍。虽然这部分内容比较少,但是用的屏幕非常多。

2.函数

1.概况

全局函数或变量调用方式有两种,一种是global.函数或变量的方式,另一种是直接使用函数或变量的方式。一般情况下,我们直接使用即可。但是,我为了区分自定义和内置函数或变量,自定义函数或者变量加上"global.",而内置函数或变量不加"global."。实际上,加不加都不影响功能,为了更好区分我才这样约定的,也方便在脚本最后手动删除自定义函数和变量。

2.自定义全局函数与变量

除了内置的全局变量以外,我们可以自定义一些全局函数或变量。在多模块频繁使用相同函数或变量时,自定义全局函数或变量优势很大。需要注意的是全局变量在脚本退出或者结束之前,手动删除一下,防止内存积累。

javascript 复制代码
// 自定义全局函数
global.testLog = function(message) {
    console.log(message);
}

// 自定义全局变量
global.testObj = {
    a: 1,
    b: 2
}

global.testLog("123");
// 相当于
// testLog("123");

console.log(global.testObj);
// 相当于
// console.log(testObj);

// 删除挂载
delete global.testLog;
delete global.testObj;

3.sleep

脚本等待一定时间再运行,需要传递时间一个参数,参数类型为数字,单位为毫秒。这个函数在每个脚本中都会存在,并且使用频率会非常多。sleep属于阻塞函数,在autojs中需要特别注意,阻塞函数不能在ui主线程中使用,否则会报错。这里大家先记住即可,到了ui部分会详细介绍。

4.setClip与getClip

setClip用于设置剪贴板内容,需要传递文本一个参数,参数类型为字符串。

getClip用于获取剪贴板内容,返回剪贴板文本,返回类型为字符串。

scss 复制代码
setClip("123456");
console.log(getClip());

5.toast与toastLog

toast函数用于气泡显示消息,需要传递消息一个参数,参数类型为字符串。这个函数显示消息时间是无法手动控制的,根据系统环境自动匹配,大约为2秒。

toastLog函数既通过气泡显示消息,又通过控制台打印,相当于同时执行了toast和console.log函数。

scss 复制代码
toast("11111");
sleep(2500);
toastLog("22222");

6.exit

通过抛出ScriptInterruptedException异常来实现立即停止脚本。autojs停止脚本不会清理内存,我们一般不会手动调用这个函数来停止脚本,这种方式停止脚本很容易产生内存积累。

7.random

random函数在不传参数时,返回一个0~1(包含0,不包含1)的随机浮点数。

random函数在传递参数时,产生随机整数,需要传递两个参数,分别为随机整数最小值和随机整数最大值,参数类型均为数字,返回随机整数,返回类型为数字。

ini 复制代码
// 生成随机整数
for (let index = 0; index < 10; index++) {
    console.log(random(1, 10));
}
console.log("--------------");

// 生成随机小数
for (let index = 0; index < 10; index++) {
    // 保留两位小数
    console.log(random().toFixed(2));
}

8.requiresApi与requiresAutojsVersion

requiresApi函数用于指定脚本只能在超过指定sdk版本(包含当前版本)的环境下运行,需要传递sdk版本一个参数,参数类型为数字。

requiresAutojsVersion函数用于指定脚本只能在超过指定autojs版本(包含当前版本)的环境下运行,需要传递autojs版本一个参数,参数类型为数字。

我在脚本开发时一般不用这两个函数,requiresApi函数如果需要可以设置为24(对应Android 7),requiresAutojsVersion根本没必要进行设置的。

scss 复制代码
requiresApi(24);
console.log("testtests");

9.runtime

runtime中有很多函数,官方文档只介绍了与Android开发对应的requestPermissions、loadJar和loadDex函数。我平时很少使用这三个函数,就不过多介绍,大家可以参考官方文档中三个函数的介绍,以及Android的内容理解这三个函数。下面我们一起看下,runtime可以调用的函数。

ini 复制代码
getJavaObjectFunctions(runtime);

// 获取Java对象的所有函数
function getJavaObjectFunctions(javaObject) {
    // 1. 获取对象的类 (jclass)
    let jclass = javaObject.getClass();

    // 2. 获取类中声明的所有方法
    let methods = jclass.getDeclaredMethods();

    // 3. 遍历并打印方法名
    for (let i = 0; i < methods.length; i++) {
        // 使用方法名 getName 和参数类型 getParameterTypes 来区分重载方法
        let method = methods[i];
        let methodName = method.getName();
        let parameterTypes = method.getParameterTypes();
        // 将参数类型数组转换为可读字符串
        let params = [];
        for (let j = 0; j < parameterTypes.length; j++) {
            params.push(parameterTypes[j].getSimpleName());
        }
        console.log("函数名: " + methodName + ", 参数类型: (" + params.join(", ") + ")");
    }
}

10.context

上下文,代码开发中一般都有这个对象,功能非常强大。context对应Android的android.content.Context对象,很多功能都会使用这个对象,可以参考下Android的context使用方式,后面用到再具体介绍。

11.currentPackage与currentActivity

currentPackage和currentActivity函数均是获取当前应用的包信息。

currentPackage函数用于获取当前应用的包名。

currentActivity用于获取当前应用的活跃包名。

arduino 复制代码
console.log("包名:" + currentPackage());
console.log("活跃包名:" + currentActivity());

3.总结

特别注意,只有通过个人主页博客或者个人介绍中方式,才能获取源码

相关推荐
SuperEugene2 小时前
弹窗与抽屉组件封装:如何做一个全局可控的 Dialog 服务
前端·javascript·vue.js
青青家的小灰灰2 小时前
透视 React 内核:Diff 算法、合成事件与并发特性的深度解析
前端·javascript·react.js
SuperEugene2 小时前
组合式函数 、 Hooks(Vue2 mixin 、 Vue3 composables)的实战封装
前端·javascript·vue.js
wuhen_n2 小时前
模板编译三阶段:parse-transform-generate
前端·javascript·vue.js
滕青山2 小时前
正则表达式测试 在线工具核心JS实现
前端·javascript·vue.js
不可能的是2 小时前
前端图片懒加载方案全解析
前端·javascript
wuhen_n2 小时前
Fragment 与 Portal 的特殊处理
前端·javascript·vue.js
用户5757303346242 小时前
🚀 JS事件机制大揭秘:从“橘子”报警到“列表”瘦身,前端老鸟都在偷笑的秘密!
javascript
用户5757303346242 小时前
💎 JS 中的“隐形人”:Symbol 数据类型深度解密!从命名冲突到隐私保护
javascript