AList 一个支持多种存储，支持网页浏览和 WebDAV 的文件列表程序，由 gin 和 Solidjs 驱动。简单说，就是网盘聚合存储管理程序。1. 创建站点配置域名即可，PHP 版本选择“纯静态”2. 下载 AList 程序2.1 查看服务器 CPU 架构cat /proc/version输出结果：Linux version 3.10.0-1160.92.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 20 11:48:01 UTC 2023我的服务器是 AMDx64 的，关于 x86_64 说明可以看：X86和X86_64和AMD64的由来_amd64 x86_642.2 下载对应服务器架构的源码2.2.1 打开 AList 文档中提供的 Releases · alist-org/alist (github.com) 连接，下载服务器 CPU 架构对应版本的源码文件。我理所当然的选择了 alist-linux-amd64.tar.gz，然后上传到了第一步建立的站点目录中。2.2.2 参照文档对压缩文件进行解压cd /www/wwwroot/xxx # 这里先进入到你的站点目录 tar -zxvf alist-linux-amd64.tar.gz # 解压2.2.3 启动服务./alist server输出结果：./alist: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./alist)不出意外的话，还是出意外了，启动失败，提示我 GLIBC_2.28 版本过低查文档，不出意外的应该我不是第一个遇到这个问题的。按照文档建议重下载源码 alist-linux-musl-amd64.tar.gz2.2.4 重新下载源码后，重复上文 2.2.2 - 2.2.3 步骤操作一遍，然后应该就会启动成功了理论来讲这时候访问 ip:5244 已经可以打开了，因为我是某云服务器，需要配置安全组，懒得搞了，直接配置域名3. 配置 Nginx 反代找到对应站点，设置反向代理信息4.删除默认配置- location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md - location ~ .\*\.(gif|jpg|jpeg|png|bmp|swf)$ - location ~ .\*\.(js|css)?$因为我新建站点的时候，PHP 版本选择的是纯静态，所以只需要删除一个配置就行了5. 守护进程因为宝塔有 Supervisor，可以直接在面板配置，方便一点Supervisor 安装步骤：软件商店 → 搜索 “sup” → 安装“进程守护” → 设置 → 添加守护进程注意！注意！注意！命令最后面多打一个空格，否则可能启动不了进程哦/www/wwwroot/xxx/alist server进程守护启动成功，一定要显示 运行中 才算启动成功哦，不然访问不了6. 解析域名访问最后就可以解析上域名，直接访问啦！7. 忘记密码怎么办？只有在首次启动的时候才会输出密码，我开始也没注意，索性重新生产密码吧./alist admin randomusername: 用户名password: 新密码8. 其他配置参照文档操作即可AList文档
有时候脚本需要读文件数据，手写路径比较麻烦，写死又不太灵活，可以通过如下方式实现自定义选择文件首先在 ui 线程创建一个简单的按钮用于触发选择文件事件ui.layout( <text w="*" id="path" text="请选择文件！" /> );创建选择文件按钮点击事件, 在这之前需要导入所需要的 Class，建议放置顶部，即 "ui"; 下方importClass(android.content.Intent) importClass(android.graphics.BitmapFactory) importClass(android.provider.MediaStore) importClass(android.webkit.MimeTypeMap)下面是选择文件按钮监听事件，我这里是通过 intent.setType("text/plain") 限制了文件类型为 txt，如果不限制类型将 text/plain 设置为 * 即可ui.selectFile.click(() => { let intent = new Intent() intent.setType("text/plain") intent.setAction(Intent.ACTION_GET_CONTENT) intent.addCategory(Intent.CATEGORY_OPENABLE) activity.startActivityForResult(intent, 1) })监听选择文件后事件ui.emitter.on("activity_result", (requestCode, resultCode, data) => { if (resultCode !== -1) { toastLog("没有选择文件！") return false } let uri = data.getData() let path = uri.getPath() if (!path.endsWith(".txt")) { toastLog("该文件不可用或文件类型错误！") return false } // 适配路径 let resultPath = replacePath(path) if(!files.exists(resultPath)) { toastLog(`当前路径未兼容，请联系开发人员处理！（${path}）`) return false } console.log(`已选择文件：${resultPath}`) // 将路径展示到ui界面 ui.path.setText(resultPath) })我这里获取到的文件路径直接用过 files.exists() 无法识别到，所以做了一个适配处理，如下函数function replacePath(path) { let rules = [ {prefix: "/document/primary:", length: 18}, {prefix: "/external_files/", length: 16}, {prefix: "/sdcard/", length: 8} ] // 获取外部存储器的根目录路径 // let rootDir = Environment.getExternalStorageDirectory().getAbsolutePath() let resultPath = "/sdcard/" // 直接拼接并判断是否存在 if(files.exists(resultPath + path)) { return resultPath + path } // 否则按规则替换拼接 for (let i = 0; i < rules.length; i++) { let rule = rules[i]; if(path.startsWith(rule.prefix)) { resultPath += path.substring(rule.length) break; } } return resultPath; } 原作者的 AutoJS Pro 目前对于无障碍这块没有什么可玩性了，推荐 AutoJS6 由 SuperMonster003 维护，基于原 AutoJS.v4.1 仓库版本，无任何限制！