1.前言
全局函数与变量可以理解为能够直接使用的函数或变量。官方文档中介绍的内容比较少,有很多函数或者变量也加在了全局里面,官方文档中只是将前面没有涉及的全局函数和变量进行了介绍。虽然这部分内容比较少,但是用的屏幕非常多。
2.函数
1.概况
全局函数或变量调用方式有两种,一种是global.函数或变量的方式,另一种是直接使用函数或变量的方式。一般情况下,我们直接使用即可。但是,我为了区分自定义和内置函数或变量,自定义函数或者变量加上“global.”,而内置函数或变量不加“global.”。实际上,加不加都不影响功能,为了更好区分我才这样约定的,也方便在脚本最后手动删除自定义函数和变量。
2.自定义全局函数与变量
除了内置的全局变量以外,我们可以自定义一些全局函数或变量。在多模块频繁使用相同函数或变量时,自定义全局函数或变量优势很大。需要注意的是全局变量在脚本退出或者结束之前,手动删除一下,防止内存积累。
// 自定义全局函数
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用于获取剪贴板内容,返回剪贴板文本,返回类型为字符串。
setClip("123456");
console.log(getClip());
5.toast与toastLog
toast函数用于气泡显示消息,需要传递消息一个参数,参数类型为字符串。这个函数显示消息时间是无法手动控制的,根据系统环境自动匹配,大约为2秒。
toastLog函数既通过气泡显示消息,又通过控制台打印,相当于同时执行了toast和console.log函数。
toast("11111");
sleep(2500);
toastLog("22222");
6.exit
通过抛出ScriptInterruptedException异常来实现立即停止脚本。autojs停止脚本不会清理内存,我们一般不会手动调用这个函数来停止脚本,这种方式停止脚本很容易产生内存积累。
7.random
random函数在不传参数时,返回一个0~1(包含0,不包含1)的随机浮点数。
random函数在传递参数时,产生随机整数,需要传递两个参数,分别为随机整数最小值和随机整数最大值,参数类型均为数字,返回随机整数,返回类型为数字。
// 生成随机整数
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根本没必要进行设置的。
requiresApi(24);
console.log("testtests");
9.runtime
runtime中有很多函数,官方文档只介绍了与Android开发对应的requestPermissions、loadJar和loadDex函数。我平时很少使用这三个函数,就不过多介绍,大家可以参考官方文档中三个函数的介绍,以及Android的内容理解这三个函数。下面我们一起看下,runtime可以调用的函数。
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用于获取当前应用的活跃包名。
console.log("包名:" + currentPackage());
console.log("活跃包名:" + currentActivity());
3.总结
特别注意,只有通过个人主页博客或者个人介绍中方式,才能获取源码