快速上手

# 阅读须知 <!-- type=misc --> 本文档为Auto.js (Pro) 的文档,解释了Auto.js各个模块的API的使用方法、作用和例子。 文档借助Node.js的文档构建工具生成,并在github上开源(https://github.com/hyb1996/AutoJs-Docs ),目前由开发者维护。 # API稳定性 由于Auto.js处于活跃的更新和开发状态,API可能随时有变动,我们用Stability来标记模块、函数的稳定性。这些标记包括: ```txt Stability: 0 - Deprecated 弃用的函数、模块或特性,在未来的更新中将很快会被移除或更改。应该在脚本中移除对这些函数的使用,以免后续出现意料之外的问题。 ``` ```txt Stability: 1 - Experimental 实验性的函数、模块或特性,在未来的更新中可能会更改或移除。应该谨慎使用这些函数或模块,或者仅用作临时或试验用途。 ``` ```txt Stability: 2 - Stable 稳定的函数、模块或特性,在未来的更新中这些模块已有的函数一般不会被更改,会保证后向兼容性。 ``` # 如何阅读本文档 # 打包为应用 当我们完成代码后,可以将代码打包为独立apk。打包可以分为单文件打包、项目打包,其中单文件打包只能打包一个js文件,如果这个js文件依赖了其他的资源、代码文件,无法被打包进apk中,此时需要用项目打包。有关项目的功能请参考下一节“项目与打包”,这里我们重点介绍打包功能。 在文件列表中,点击需要打包的文件右边的更多图标(三个点),选择“打包单文件”。 ![1.png](https://cos.easydoc.net/84678576/files/lg06hpo1.png) 进入打包界面。打包界面包含多个配置,你可以自定义权限、包名、应用名称等。调整后这些配置后,点击右下角的完成(√)图标,即可进行打包。 这里我们依次介绍关键的打包配置。 ## 应用配置 - 应用名称:打包后应用安装后显示在桌面的名称 - 包名:应用的唯一标识符,相同包名和签名的安装包可以覆盖安装。包名只能包含字母、数字、下划线、英文点等,并且至少包含一个英文点,比如"com.example"。不合法的包名打包后无法安装,可能提示“安装包解析失败”。 - 版本名称:显示给用户的版本名称,比如"1.10.2"。 - 版本号:一个整数,代表内部版本号。每次更新版本时,需要增加这个整数。 - 图标:应用安装后显示在桌面的图标 - 权限:配置应用权限清单中的权限,默认为126个权限。你可以按需要配置权限,不同功能需要不同的权限: 1. 读写文件:需要READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE权限 1. 前台服务:需要FOREGROUND_SERVICE权限 1. 访问网络:需要INTERNET权限 1. 任务:需要WAKE_LOCK权限 1. 开机启动:需要RECEIVE_BOOT_COMPLETED权限 1. 悬浮窗:需要SYSTEM_ALERT_WINDOW权限 1. adb权限运行shell命令:需要moe.shizuku.manager.permission.API_V23权限 如果使用shizuku授权后,进行滑动,需要使用shell命令,只要把true改成{adb:true} 例如:shell("input swipe 300 500 300 800", { adb: true }); 如果用到某些功能,但没有配置相应的权限,运行时可能报错。比如使用到前台服务,但是没有配置FOREGROUND_SERVICE权限,使用到相应功能时会崩溃。 权限还可配置为启动时自动申请,比如自动申请WRITE_EXTERNAL_STORAGE权限,则打包后应用启动后会弹出权限申请框。一些权限不可申请,只能在权限清单中配置。 ## 特性 - 内置图标包:使用到内置图标,比如ic_add_black_48dp等,需要勾选此特性。 - 处理外部文件:使用到任务中的IntentTask(打开、编辑文件等),需要勾选此特性。勾选后,在文件管理器中打开一些文件,会提示使用打包的应用打开。 - Node.js引擎:是否使用Node.js引擎(第二代API)。Node.js引擎的体积较大,单架构达到十几MB。 1. 自动:自动根据打包的文件、项目中是否使用第二代API而决定 1. 禁用:一律禁用Node.js引擎 1. 启用:一律启用Node.js引擎 - 插件:当使用到MLKit OCR、FFMpeg等插件时,需要在这里勾选使用到的插件,插件才能被打包到apk中。内置OCR模块则无需在这里勾选插件。 ## 构建配置 - 加密:选择加密等级。参考加密与级别说明。 - CPU架构:默认为当前设备的架构。CPU架构将影响软件的体积、兼容性、占用内存、允许速度,arm64-v8a架构速度更快、占用内存更高、且仅适用支持64位的机器,通常来说模拟器不支持arm64-v8a。如果要让软件兼容性更好,可以选择armeabi-v7a或者双架构。 - 混淆组件名称:是否将内置的组件(比如广播、Activity、服务)等名称随机化。勾选此选项后,打包时间将变得很长,并且务必打包时保持在前台,以保持较高的调度优先级。 ## 运行配置 - 隐藏日志:打包后应用是否显示日志界面,当脚本有UI界面时此选项不生效。一般来说,建议脚本不要没有任何界面,否则一些依赖界面的功能会出现错误,或者是容易被系统杀死。 - 显示启动界面:是否显示启动界面,默认是软件图标的界面。即使设置为关闭,在首次启动时由于需要初始化,仍然会显示一次。 - 启动界面文本:默认为Powered by Auto.js Pro,可自定义文本内容。 - 启动界面图标:默认为软件图标。此图标不能铺满屏幕,如果你需要自定义,请使用自定义启动图功能。(参见应用内示例 -> 项目与打包 -> 自定义启动图) ## 签名 只有包名相同且签名相同的应用才能覆盖安装和升级。如果你需要持续更新某个应用,建议你使用自定义签名。因为默认签名是每次安装Auto.js Pro时随机生成的,一旦你卸载Auto.js Pro或者清除数据,默认签名将会丢失并且不能找回。签名丢失后,你更新应用重新打包后需要让用户卸载旧版本才能安装新版本。 要创建自定义签名,在签名管理中创建签名,输入密码、别名和别名密码即可创建。一个签名可以用于多个软件,每个软件用不同的别名和别名密码,但是Auto.js Pro自带的签名管理只支持创建一个别名。 签名文件、密码、别名、别名密码需要保存好,一旦丢失或忘记,没有任何途径可以找回。 # 项目与资源 当我们的代码越来越复杂时,我们可能需要编写多个js文件,文件之间互相调用;一些js文件也可能需要读取图片、音乐等资源文件。项目就是用来组织多个文件的文件夹,项目的文件夹中包含一个project.json文件,描述项目的配置,这个配置文件可以让你在打包时无需每次重新填写打包的信息。 通过Auto.js Pro的文件管理界面右下角的菜单,选择项目即可新建项目。创建时可选择不同的项目模板或者自定义模板,首次使用时选择空项目即可。 新建项目后将自动创建一个项目名称的文件夹,在该文件夹下可看到至少两个文件: main.js:项目的主入口文件,运行项目时将执行该文件 project.json:项目的配置文件,配置项目的名称、包名、打包配置等 在项目中,我们所有使用的资源文件、模块文件都要放在项目的文件夹下,并用相对路径引用,才可以在打包时被打包进apk并正确运行。 例如我们写了一个模块文件sum.js: ```language // sum.js function sum(n) { let result = 0; for (let i = 0; i < n; i++) { result += i; } return result; } module.exports = sum; ``` 那么在main.js中,需要用相对路径引用: ``` // main.js let sum = require('./sum.js'); console.log(sum(100)); ``` 同样地,资源文件也需要使用相对路径引用。比如我们的项目文件夹下有以下文件: ``` main.js sum.js apple.txt project.json ``` 在读取apple文本时,需要使用相对路径,比如let apple = $files.read('./apple.txt')。 ## 项目管理与打包 打开项目的文件夹,可以看到上方工具栏有一个圆规图标: 项目管理 点击后弹出的菜单可编辑项目、打包项目、发布项目等。项目的打包和上一节的打包基本一样,这里不再阐述;发布项目将会上传项目到商店中,审核通过后,所有人都可以下载该项目。 # 项目配置文件 在Auto.js Pro中,我们有时不仅需要运行单文件,还有运行项目的需求。所谓项目,就是一个包含配置、代码文件、资源文件(图片等)的文件夹。 在Auto.js Pro中可以在主页新建项目,有多种项目模块可供选择(Pro 8.7以上)。 ## project.json project.json文件用于配置项目的相关参数,比如主文件、启动图、包名等信息。 |参数名称|意义|类型| | ----------------- | ------ | ---------------------------------------- | |androidResources|安卓资源,参见androidResources|Object|{"resDir": "res","manifest":"AndroidManifest.xml"}| |build|自动生成的构建信息,无需修改,参见build|Object| |assets|保留字段,暂时没有作用|string[]|[]| |encryptLevel|加密级别 0-不加密, 1-本地加密, 2-在线加密(仅在8.7以上版本支持)|number|0| |icon|桌面图标|string|"icons/icon.png"| |ignore|从VSCode中同步项目时的忽略文件,在Pro9.3以上版本被.autojs.sync.ignore文件代替|string[]|["build"]| |launchConfig|启动配置,参见launchConfig|Object| |main|入口文件|string|"main.js"| |name|app名字|string|""| |optimization|优化配置,参见optimization|Object| |packageName|包名,必须符合Android包名规范,另外上传商店时包名必须唯一|string|""| |permissionConfig|权限配置,参见permissionConfig|Object|{"manifestPermissions": [],"requestListOnStartup": []}| |publish|发布/上传商店配置,参见publish|Object| |scripts|构建等时机自动触发运行的脚本配置,参见scripts|Object| |useFeatures|特性 continuation - 是否使用协程特性,参见示例->协程|string[]|[]| |versionCode|版本号|number|1| |versionName|给用户看的版本名称|string|"1.0.0"| 完整配置实例: ``` { "androidResources": { "resDir": "res", "manifest": "AndroidManifest.xml" }, "assets": [], "build": { "build_id": "6F47F367-1", "build_number": 1, "build_time": 1615553004812, "release": true }, "encryptLevel": 0, "useFeatures": [], "icon": "res/icon.png", "ignore": ["build"], "launchConfig": { "displaySplash": true, "hideLogs": false, "splashIcon": "res/splashIcon.png", "splashLayoutXml": "splash.xml", "splashText": "Powered by Auto.js Pro", "stableMode": false }, "main": "main.js", "name": "Shape3.0", "optimization": { "removeOpenCv": true, "unusedResources": true }, "packageName": "com.suzy.rippledrawable", "permissionConfig": { "manifestPermissions": ["android.permission.WRITE_EXTERNAL_STORAGE"], "requestListOnStartup": ["android.permission.WRITE_EXTERNAL_STORAGE"] }, "publish": { "category": "其他", "details": "控件描边、渐变、水波纹、文字渐变", "maxAutoJsVersion": -1, "minAutoJsVersion": -1, "maxProVersion": 8059999, "minProVersion": 8050000, "minSdkVersion": 2, "permissions": [], "summary": "控件描边、渐变、水波纹、文字渐变", "tags": [] }, "scripts": {}, "versionCode": 1, "versionName": "1.0.0" } ``` 最小配置实例: ``` { "name": "新建项目", "main": "main.js", "ignore": [ "build" ], "packageName": "com.example", "versionName": "1.0.0", "versionCode": 1 } ``` ## androidResources 用于配置Android原生界面的参数,参见示例->复杂界面->Android 原生界面。 |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |resDir |Android资源文件夹 |string |"res"| |manifest |AndroidManifest.xml的文件路径 |string |"AndroidManifest.xml"| ## build 自动生成的构建信息,包含构建时间、构建号等,请勿修改。 打包软件中,将根据这里的信息判断是否需要解压覆盖安装包的文件到数据路径。(每次打包后这里的信心会更新,因此安装后可以自动更新本地数据中的项目文件) |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |build_id |自动生成的构建id| string| ""| |build_number |构建号,每次构建自增1| number| 1| |build_time| 上次构建时间 |number| 当前13位时间戳| |release |是否为打包后项目,为自动生成的字段,不需要修改| boolean |false| ## launchConfig 打包后的相关启动配置。 |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |displaySplash| 打包后是否显示启动图(即使设置为false,打包后第一次也仍然会显示启动图) |boolean |true| |hideLogs |打包后是否隐藏日志界面 |boolean |false| |splashIcon| 打包后启动界面图标 |string |"icons/splashIcon.png"| |splashLayoutXml| 启动图xml,用于打包后自定义启动图,参见示例->项目与打包->自定义启动图 (8.5以上版本) |string| "splash.xml"| |splashText |打包后启动界面文本 |string |"Powered by Auto.js Pro"| |stableMode |打包后是否以稳定模式运行| boolean| false| ## permissionConfig Pro 8.8.1新增 自定义权限配置,包括应用打包后声明的权限列表和启动时自动申请的权限列表。 也可以在打包界面中使用权限配置修改。 |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |manifestPermissions| 打包后应用声明的权限列表。为了兼容旧版本配置,如果该字段为null则默认为122个自带权限。| string[] |null| |requestListOnStartup |应用启动时自动申请的权限列表,权限务必包含在manifestPermissions中,否则会无法申请 |string[] |["android.permission.WRITE_EXTERNAL_STORAGE"]| 全部权限列表参见Android官方文档:Manifest.permissionopen in new window ## publish 上传商店发布项目的相关配置。 |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |maxAutoJsVersion |支持的最大autojs版本号| number| 0| |maxProVersion |支持的最大autojspro版本号| number |0| |minAutoJsVersion| 支持的最小autojs版本号| number |0| |minProVersion| 支持的最大autojspro版本号| number| 0| |minSdkVersion| 支持的最小安卓版本 |number |0| |category |项目类别,用于发布在商店时作为分类 |string |"其他"| |details |项目详细描述,用于发布在商店时作为项目详情 |string |""| |permissions |权限列表,比如"root",暂时没有作用 |string[] |[]| |summary |脚本功能简介 |string| ""| |tags |脚本标签,由于商店还没有标签过滤功能,暂时没有作用| string[]| []| ## optimization 优化配置。目前用于打包时缩小体积。 |参数名称 |意义| 类型| | ----------------- | ------ | ---------------------------------------- | |removeOpenCv| 不需要图色模块| boolean |false| |unusedResources| 不需要内置图标| boolean |false| ## ignore配置 Pro 8.7.6新增 ignore配置文件类似于.gitignore,用于配置Auto.js Pro处理打包、加密等忽略的文件。 ignore文件的规则和.gitignore相同,比如: ``` # / 表示 当前文件所在的目录 # 忽略public下的所有目录及文件 /public/ #不忽略/public/assets,就是特例的意思,assets文件不忽略 !/public/assets # 忽略具体的文件 index.js # 忽略所有的js文件 *.js # 忽略 a.js b.js [ab].js # 匹配规则和linux文件匹配一样 # 以斜杠“/”开头表示目录 # 以星号“*”通配多个字符 # 以问号“?”通配单个字符 # 以方括号“[]”包含单个字符的匹配列表 # 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录 ``` # .autojs.source.ignore 文件路径:项目文件夹下.autojs.source.ignore文件。 该文件配置的规则所匹配的文件,将不视为Auto.js Pro的JavaScript源码文件,不参与加密过程。 例如有些js文件是用于Web中加载的,不希望在打包时将其加密,可以配置该文件来忽略。 # .autojs.build.ignore 文件路径:项目文件夹下.autojs.build.ignore文件。 该文件配置的规则所匹配的文件,将不参与Auto.js Pro的打包apk过程,最终生成的apk中,将不包含指定的文件。 例如有时node_modules仅在开发时使用,最终打包时已经通过webpack等工具打包为单文件,则可以配置忽略node_modules文件夹。 # .autojs.sync.ignore 文件路径:项目文件夹下.autojs.sync.ignore文件。 该文件配置的规则所匹配的文件,在VSCode插件运行、同步、保存电脑上的文件时,将被忽略。仅适用于Pro 9.3以上版本。 # scripts scripts字段用于配置构建等时机自动执行的shell命令。例如: ``` { // ... "scripts": { "build-apk-pre-prepare": "sh build.sh" }, // ... } ``` 以上配置将在打包apk前自动运行build.sh脚本,从而可以在打包前进行自定义的文件替换、混淆等。在这些shell命令中,你可以用node build.js来执行js文件(纯Node.js环境);目前暂不支持执行Auto.js环境的js脚本。 目前支持以下时机: # 构建apk时触发 Auto.js Pro构建apk分为几个阶段: - 准备阶段:拷贝项目文件、apk文件,处理源文件等 - 构建阶段:执行aapt编译,添加内置图标包,修改并写入Manifest文件、处理插件等 - 优化阶段:移除无用资源、模块、混淆组件等 - 打包阶段:签名、压缩、清理工作空间等 可以在不同阶段自定义要执行的sh脚本。在这些脚本中,可以通过以下环境变量获取信息: - BUILD_APK_WORKSPACE: 构建的临时工作区,也就是解压apk的临时项目 - BUILD_APK_WORKSPACE_PROJECT: 工作区下的项目文件夹,项目将会被复制到这里 - BUILD_APK_OUTPUT:apk的目标输出路径 可以通过pwd等命令获取当前项目路径。 每个阶段对应的名称有: - build-apk-pre-prepare: 准备阶段前触发 - build-apk-post-prepare: 准确阶段后触发 - build-apk-pre-build: 构建阶段前触发 - build-apk-post-build: 构建阶段后触发 - build-apk-pre-optimize: 优化阶段前触发 - build-apk-post-optimize: 优化阶段后触发 - build-apk-pre-package: 打包阶段前触发 - build-apk-post-package: 打包阶段后触发