AZ TUTORIALS · 接口参考
361 · API 文档
361 一键新机支持 HTTP 和 OpenURL 两种方式,推荐用 Lua 通过 HTTP 调用。
| 项目 | 值 |
|---|---|
| HTTP 基址 | http://127.0.0.1:361 |
| OpenURL | 把 http://127.0.0.1:361/ 换成 361:// |
| 请求方式 | GET |
| 指令格式 | /cmd?fun=指令名&参数 |
| 异步状态文件 | /var/mobile/script_status |
OpenURL 写法示例:
lua
-- HTTP
http.request("http://127.0.0.1:361/cmd?fun=newDevice&bid=com.apple.weather")
-- 等价的 OpenURL
openURL("361://cmd?fun=newDevice&bid=com.apple.weather")返回值
HTTP 响应
接口返回 JSON,用 status 判断是否调用成功,失败原因在 errMsg 中:
json
{"status": 1}
{"status": 0, "errMsg": "失败原因"}异步状态文件
newDevice、newBackup、restoreBackup 是异步接口,HTTP 返回成功只代表任务已开始。最终结果要看 /var/mobile/script_status:
| 状态 | 含义 |
|---|---|
| 文件不存在 | 尚未结束,继续等待 |
1 | 成功 |
0 | 失败 |
-1 | 无权限 |
通用参数
| 参数 | 说明 |
|---|---|
bid | 目标 App 的 Bundle ID。newDevice 支持多个,用英文逗号分隔,如 com.xxx.a,cn.yyy.b |
index | 备份行号,从 0 开始 |
接口一览
| 功能 | 指令 | 类型 |
|---|---|---|
| 一键新机 | newDevice | 异步 |
| 生成备份 | newBackup | 异步 |
| 获取备份列表 | getBackups | 同步 |
| 重命名备份 | renameBackup | 同步 |
| 删除备份 | deleteBackup | 同步 |
| 还原备份 | restoreBackup | 异步 |
| 获取虚拟设备信息 | getCurrentVDInfo | 同步 |
| 设置 IDFA | setCurrentVDInfo | 同步 |
| 机器码与授权 | license | 同步 |
| 自动开关 | autoBackup · autoAppLaunch · autoIP | 同步 |
| 卸载 App | uninstallApp | 同步 |
| 跳转 App | goToApp | 同步 |
接口详情
一键新机 异步
GET http://127.0.0.1:361/cmd?fun=newDevice&bid=com.xxx.a,cn.yyy.b| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App,多个用逗号分隔 |
为指定 App 生成新的虚拟设备环境。调用后轮询 script_status。
生成备份 异步
GET http://127.0.0.1:361/cmd?fun=newBackup&bid=com.xxx.a| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
为当前环境创建一条备份。
获取备份列表
GET http://127.0.0.1:361/cmd?fun=getBackups&bid=com.xxx.a| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
返回 JSON,包含该 App 的备份列表、每条备份的时间,以及当前关联的备份 ID。返回的顺序即 index 行号。
重命名备份
GET http://127.0.0.1:361/cmd?fun=renameBackup&bid=com.xxx&index=0&name=NewName| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
name | 是 | 新名称 |
index | 三选一 | 备份行号 |
indexup | 三选一 | 相对当前备份的偏移:1 上一条,0 下一条 |
backname | 三选一 | 按原备份名定位 |
删除备份
GET http://127.0.0.1:361/cmd?fun=deleteBackup&bid=com.xxx&index=0| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
index | 是 | 备份行号;-1 删除该 App 的全部备份 |
还原备份 异步
GET http://127.0.0.1:361/cmd?fun=restoreBackup&bid=com.xxx&index=0| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
index | 是 | 要还原的备份行号 |
把 App 环境还原到指定备份。调用后轮询 script_status。
获取虚拟设备信息
GET http://127.0.0.1:361/cmd?fun=getCurrentVDInfo&bid=com.xxx| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
返回当前虚拟设备参数,包括 IDFA、IDFV、iOS 版本、SSID、IMEI、UDID 等。
设置 IDFA
GET http://127.0.0.1:361/cmd?fun=setCurrentVDInfo&bid=com.xxx&idfa=89B0...EB2| 参数 | 必填 | 说明 |
|---|---|---|
bid | 是 | 目标 App |
idfa | 是 | 新的 IDFA 值 |
机器码与授权
GET http://127.0.0.1:361/cmd?fun=license返回设备机器码 deviceId 和授权截止时间 endDate。可在脚本启动时检查授权是否过期。
自动开关
GET http://127.0.0.1:361/cmd?fun=autoBackup&open=1fun 取值 | 说明 |
|---|---|
autoBackup | 自动备份 |
autoAppLaunch | 自动启动 App |
autoIP | 自动换 IP |
| 参数 | 必填 | 说明 |
|---|---|---|
open | 是 | 1 打开,0 关闭 |
卸载 App
GET http://127.0.0.1:361/cmd?fun=uninstallApp&bid=com.xxx按 Bundle ID 卸载指定应用。
跳转 App
GET http://127.0.0.1:361/cmd?fun=goToApp&bid=com.xxx启动并跳转到指定应用。
Lua 示例(触动精灵)
lua
local sz = require("sz")
local http = require("szocket.http")
local BASE = "http://127.0.0.1:361/cmd?fun="
local STATUS_FILE = "/var/mobile/script_status"
-- 同步调用,返回解析后的 JSON
function R361(query)
local res, code = http.request(BASE .. query)
if code == 200 then
return sz.json.decode(res)
end
end
-- 等待异步任务结束:返回 1 成功 / 0 失败 / -1 无权限 / nil 超时
function Wait361(timeout)
timeout = timeout or 120
for i = 1, timeout do
mSleep(1000)
if isFileExist(STATUS_FILE) then
return tonumber(readFileString(STATUS_FILE))
end
end
end
-- 异步调用 = 发起 + 等待
function R361Async(query)
-- 建议:先删掉上一次留下的状态文件,避免读到旧结果
if isFileExist(STATUS_FILE) then delFile(STATUS_FILE) end
local json = R361(query)
if not json then return nil end
if json.status ~= 1 then
toast("调用失败:" .. tostring(json.errMsg), 2)
return 0
end
return Wait361()
end
-- 打开 361
runApp("cn.tinyapps.RST")
mSleep(5000)
-- 查看授权
local lic = R361("license")
if lic then toast("到期时间:" .. tostring(lic.endDate), 2) end
-- 一键新机(多个 App 用逗号分隔)
local r = R361Async("newDevice&bid=com.apple.weather")
if r == 1 then
toast("新机成功", 2)
elseif r == -1 then
toast("无权限", 2)
else
toast("新机失败", 2)
end
-- 还原第 0 条备份
R361Async("restoreBackup&bid=com.apple.weather&index=0")
-- 删除某个 App 的全部备份
R361("deleteBackup&bid=com.apple.weather&index=-1")TIP
示例里「调用前删除旧状态文件」是为了防止读到上一次的结果。如果实测 361 会自动清理该文件,可以去掉这一步。
使用教程见 361 使用教程。
提示
软件界面和支持范围可能随版本更新。执行清理、重置或删除操作前,请先备份重要数据。
