/* * @Author: BATU1579 * @CreateDate: 2022-05-25 00:21:22 * @LastEditor: BATU1579 * @LastTime: 2022-09-11 10:56:19 * @FilePath: \\src\\types\\global.d.ts * @Description: 全局函数和变量 */ declare module 'global' { global { /** * @description: 暂停脚本运行 `n` 毫秒的时间。 * @param {number} n 要暂停的毫秒数。 * @example * ```typescript * // 暂停5秒 * sleep(5000); * ``` */ function sleep(n: number): void; /** * @description: 返回最近一次监测到的正在运行的应用的包名,一般可以认为就是当前正在运行的应用的包名。 * * **注意!:** * * - 此函数有一定延迟,可以通过 `selector()` 创建一个空选择器然后使用 `findOne()` 获取第一个找到的控件,然后直接访问控件的 `packageName` 属性来实时查询 * - 此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动 * * @return {string} 最近一次运行的应用包名。 */ function currentPackage(): string; /** * @description: 返回最近一次监测到的正在运行的 `Activity` 的名称,一般可以认为就是当前正在运行的 `Activity` 的名称。 * * **注意!:** * * - 此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动 * * @return {string} 最近运行的 `Activity` 的名称。 */ function currentActivity(): string; /** * @description: 设置剪贴板内容。此剪贴板即系统剪贴板,在一般应用的输入框中'粘贴'既可使用。 * @param {string} text 剪贴板内容。 */ function setClip(text: string): void; /** * @description: 以气泡显示信息 `message` 几秒。(具体时间取决于安卓系统,一般都是 2 秒)。 * * **注意!:** * * - 信息的显示是'异步'执行的,并且,不会等待信息消失程序才继续执行。如果在循环中执行该命令,可能出现脚本停止运行后仍然有不断的气泡信息出现的情况。 * * @param {string} message 要显示的信息。 */ function toast(message: string): void; /** * @description: 相当于 `toast(message); log(message)` 。显示信息 `message` 并在控制台中输出。 * @param {string} message 要显示的信息。 */ function toastLog(message: string): void; /** * @description: 等待指定的 Activity 出现。 * @param {string} activity Activity 名称。 * @param {number} [period] 轮询等待间隔,单位毫秒(默认为200)。 */ function waitForActivity(activity: string, period?: number): void; /** * @description: 等待指定的应用出现。 * @param {string} package 应用包名。 * @param {number} [period] 轮询等待间隔,单位毫秒(默认为200)。 * @example * ```typescript * // 等待当前界面为微信 * waitForPackage('com.tencent.mm'); * ``` */ function waitForPackage(package: string, period?: number): void; /** * @description: 产生一个指定区间的随机数。 * @param {number} min 随机数产生的区间下界。 * @param {number} max 随机数产生的区间上界。 * @return {number} 返回一个在[min...max]之间的随机整数数。 * @example * ```typescript * // 可能为 0, 1, 2 中的任意一个 * log(random(0, 2)); * ``` */ function random(min: number, max: number): number; /** * @description: 产生一个 0 到 1 之间的随机数。 * @return {number} 返回一个在[0, 1)的随机浮点数。 */ function random(): number; /** * @description: 表示此脚本需要 Android API 版本达到指定版本才能运行。例如 `requiresApi(19)` 表示脚本需要在 Android 4.4 以及以上运行。调用该函数时会判断运行脚本的设备系统的版本号,如果没有达到要求则抛出异常。[API 版本号对照表] 。 * * @param {string} api Android 版本号。 */ function requiresAutojsVersion(version: string | number): void; const runtime: Runtime; /** * @description: 一个 android.content.Context 对象。 * * **注意!:** * * - 该对象为 ApplicationContext,因此不能用于界面、对话框等的创建 * * @return {object} android.content.Context 对象 */ const context: object; } interface Runtime { /** * @description: 动态申请安卓的权限 * * **注意!:** * * - 尽管安卓有很多权限,但必须写入 Manifest 才能动态申请,为了防止权限的滥用,目前 只能额外申请两个权限 * * @param {array} permissions 权限的字符串数组,可选的值为: * * - `access_fine_location` - GPS 权限 * - `record_audio` - 录音权限 * * @example * ```typescript * // 请求 GPS 权限 * runtime.requestPermissions(['access_fine_location']); * ``` */ requestPermissions(permissions: ('access_fine_location' | 'record_audio')[]): void; /** * @description: 动态申请安卓的权限 * * **注意!:** * * - 尽管安卓有很多权限,但必须写入 Manifest 才能动态申请,为了防止权限的滥用,目前 只能额外申请两个权限 * * @param {array} permissions 权限的字符串数组,可选的值为: * * - `access_fine_location` - GPS 权限 * - `record_audio` - 录音权限 * * @example * ```typescript * // 请求 GPS 权限 * runtime.requestPermissions(['access_fine_location']); * ``` */ requestPermissions(permissions: string[]): void; /** * @description: 加载目标 jar 文件,加载成功后将可以使用该 Jar 文件的类。 * @param {string} path jar 文件路径 * @example * ```typescript * // 加载jsoup.jar * runtime.loadJar('./jsoup.jar'); * // 使用jsoup解析html * importClass(org.jsoup.Jsoup); * log(Jsoup.parse(files.read('./test.html'))); * ``` */ loadJar(path: string): void; /** * @description: 加载目标 dex 文件,加载成功后将可以使用该 dex 文件的类。因为加载 jar 实际上是把 jar 转换为 dex 再加载的,因此加载 dex 文件会比 jar 文件快得多。可以使用 Android SDK 的 build tools 的 dx 工具把 jar 转换为 dex。 * @param {string} path dex 文件路径 */ loadDex(path: string): void; } }