Autojs基础-全局函数与变量(globals) 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与getClipsetClip用于设置剪贴板内容需要传递文本一个参数参数类型为字符串。getClip用于获取剪贴板内容返回剪贴板文本返回类型为字符串。setClip(123456); console.log(getClip());5.toast与toastLogtoast函数用于气泡显示消息需要传递消息一个参数参数类型为字符串。这个函数显示消息时间是无法手动控制的根据系统环境自动匹配大约为2秒。toastLog函数既通过气泡显示消息又通过控制台打印相当于同时执行了toast和console.log函数。toast(11111); sleep(2500); toastLog(22222);6.exit通过抛出ScriptInterruptedException异常来实现立即停止脚本。autojs停止脚本不会清理内存我们一般不会手动调用这个函数来停止脚本这种方式停止脚本很容易产生内存积累。7.randomrandom函数在不传参数时返回一个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与requiresAutojsVersionrequiresApi函数用于指定脚本只能在超过指定sdk版本包含当前版本的环境下运行需要传递sdk版本一个参数参数类型为数字。requiresAutojsVersion函数用于指定脚本只能在超过指定autojs版本包含当前版本的环境下运行需要传递autojs版本一个参数参数类型为数字。我在脚本开发时一般不用这两个函数requiresApi函数如果需要可以设置为24对应Android 7requiresAutojsVersion根本没必要进行设置的。requiresApi(24); console.log(testtests);9.runtimeruntime中有很多函数官方文档只介绍了与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与currentActivitycurrentPackage和currentActivity函数均是获取当前应用的包信息。currentPackage函数用于获取当前应用的包名。currentActivity用于获取当前应用的活跃包名。console.log(包名 currentPackage()); console.log(活跃包名 currentActivity());