手机C辅助工具编写指南
辅助工具本质上是由html编写的网页,但是有本地扩展功能可供调用,扩展功能分两部分:
- 利用js扩展API来增强功能
- 连接本地HTTP服务器实现文件交互
js扩展API
js扩展API测试页: https://www.yzjlb.net/app/opmrcc/assistshop/mapp_test.html
扩展APi说明: javascript通过检测mapp 来实现调用js扩展功能,例如:
const result = mapp.getAppInfo();
console.log('appInfoResult', '✅ 调用成功:\n' + formatJson(result), 'success');
获取当前应用信息
方法名:getAppInfo
返回内容:
{
"appName": "OMRCC", //应用名称
"platform": "Android", //应用平台
"packageName": "com.xl.opmrcc", //应用包名
"versionName": "1.0.0", //应用版本名称
"versionCode": 1, //应用版本号
"minSdkVersion": 21, //应用最低支持的SDK版本
"targetSdkVersion": 30, //应用目标SDK版本
"androidId": "1234567890abcdef", //应用的Android ID
"orientation": "portrait", //应用的屏幕方向
"colorAccent": "#FF4081", //应用的强调颜色
"textColor": "#000000", //应用的文本颜色
"backgroundColor": "#FFFFFF", //应用的背景颜色
"workDir": "/storage/emulated/0/Android/data/com.xl.opmrcc/files/OMRCC", //应用的工作目录
"filesDir": "/storage/emulated/0/Android/data/com.xl.opmrcc/files", //应用的文件目录
"cacheDir": "/storage/emulated/0/Android/data/com.xl.opmrcc/cache", //应用的缓存目录
"signatureMD5": "1234567890abcdef", //应用的签名MD5值
"signatureSHA1": "1234567890abcdef", //应用的签名SHA1值
"colorControlNormal": "#FF4081" //应用的普通控件颜色
}
获取手机信息
方法名:getPhoneInfo
返回内容:
{
"manufacturer": "Samsung", //手机制造商
"model": "Galaxy S21", //手机型号
"brand": "samsung", //手机品牌
"device": "o1s", //设备名称
"product": "o1sxx", //产品名称
"androidVersion": "11", //安卓版本
"sdkInt": 30, //SDK版本号
"cpuAbi": "arm64-v8a", //CPU架构
"screenWidth": 1080, //屏幕宽度(像素)
"screenHeight": 2400, //屏幕高度(像素)
"densityDpi": 420, //屏幕密度(DPI)
"isRooted": false, //是否已Root
"sdCardPath": "/storage/emulated/0", //内存卡地址
}
获取应用列表
方法名:getAppList
返回内容:
[
{
"appName": "OMRCC", //应用名称
"packageName": "com.xl.opmrcc", //应用包名
"versionName": "1.0.0", //应用版本名称
"versionCode": 1, //应用版本号
"minSdkVersion": 21, //应用最低支持的SDK版本
"targetSdkVersion": 30, //应用目标SDK版本
"image": "xxxx", //应用图标, base64编码
},
{
"appName": "Hello World!", //应用名称
"packageName": "com.example.hello", //应用包名
"versionName": "1.0", //应用版本名称
"versionCode": 1, //应用版本号
"minSdkVersion": 21, //应用最低支持的SDK版本
"targetSdkVersion": 30, //应用目标SDK版本
"image": "xxxx", //应用图标, base64编码
}
]
启动一个intent
方法名:startIntent 参数: packageName :应用包名 activityName :活动名称(可选),如果为空则默认启动应用主活动 params :启动参数(可选),如果为空则默认不传递参数 示例:
{
"packageName": "com.example.hello",
"activityName": "com.example.hello.MainActivity",
"params": {
"path": "value1",
"showTitle": "value2"
}
}
获取编辑器信息
方法名:getEditorInfo
返回内容:
{
"projectPath": "/storage/emulated/0/Android/data/com.xl.opmrcc/files/OMRCC", //项目路径
//当前编辑器中活跃的文件
"activeFile": {
"path": "/storage/emulated/0/Android/data/com.xl.opmrcc/files/OMRCC/hello.c", //文件路径
"currentStart": 0, //当前光标位置
"currentEnd": 0, //当前光标结束位置
"content": "int main(){\n return 0;\n}" //文件内容
},
"openFiles": [ //当前编辑器中打开的文件列表
{
"path": "/storage/emulated/0/Android/data/com.xl.opmrcc/files/OMRCC/hello.c", //文件路径
"isActive": true //是否为活跃文件
},
{
"path": "/storage/emulated/0/Android/data/com.xl.opmrcc/files/OMRCC/utils.h", //文件路径
"isActive": false //是否为活跃文件
}
]
}
设置编辑器内容
方法名:setEditorContent 参数: path :文件路径 content :文件内容
返回内容:boolean类型,true表示设置成功,false表示设置失败
启动一个http服务器
方法名:startHttpServer 参数: port :http服务器端口号 data :http数据
data : [{
"type": "POST", // 请求方法
"rote": "/test", // 路由
"content": "这是一条测试 哈哈哈",
"bodycontains": "", // body中包含的内容
"urlcontains": "", // url中包含的内容
"content-type": "application/json; charset=utf-8",
"remark": "测试接口" // 备注
},
{
"type": "GET",
"rote": "/test", // 路由
"content": "这是一条测试",
"bodycontains": "",
"urlcontains": "",
"content-type": "application/json; charset=utf-8",
"remark": "测试接口2"
}]
关闭一个http服务器
方法名:closeHttpServer
参数: port :http服务器端口号
设置当前窗口
方法名:setWindow
参数: data: { "title": "OMRCC", //窗口标题 "backgroundColor": "#FFFFFF", //应用的背景颜色 "titleColor": "#000000", //应用的标题颜色 // 是否显示标题栏 "showTitleBar": true, // 是否显示状态栏 "showStatusBar": true, // 是否显示导航栏 "showNavigationBar": true, // 屏幕方向 "orientation": "landscape", }
显示toast
方法名:showToast
参数: message :toast消息
设置剪切板内容
方法名:setClipboard
参数: text :剪切板内容
获取剪切板内容
方法名:getClipboard
返回内容: text :剪切板内容
保存files目录下文件
方法名:saveFilesFile
参数: filename :文件名 data :文件内容
读取files目录下文件
方法名:readFilesFile
参数: filename :文件名 返回内容: text :文件内容
退出当前Activity
方法名:finish
参数:无 返回内容:无
本地HTTP文件交互
获取文件列表 /api/tree
接收参数: { "path": "string", // 可选,指定目录路径,默认为根目录,可以指定绝对路径和相对路径 "depth" : "number" // 可选,指定目录层级深度,默认为2 }
返回: { "code":200, "files": [ { "type": "file" | "directory", "name": "string", "path": "string", "children": [ ... ] // 仅当type为directory时存在 } ] }
获取文件内容 /api/read
接收参数: { "file_path": "string" // 必需,指定文件的路径,可以是绝对路径或相对路径 } 返回: { "code": 200, // 200表示成功 "content": "Uint8Array" // 文件内容的二进制base64编码 }
下载文件 /api/download?path=string
说明:GET请求,path可以是绝对路径或相对路径
获取盘符列表 /api/drives
说明:GET请求 Windows 响应: { "code": 200, "platform": "windows", "drives": [ { "path": "C:\", "type": "fixed", "name": "系统盘", "total": 512000000000, "free": 256000000000, "used": 256000000000 }, { "path": "D:\", "type": "fixed", "name": "数据盘", "total": 1024000000000, "free": 800000000000, "used": 224000000000 } ] }
Linux/macOS 响应: { "code": 200, "platform": "linux", "drives": [ { "path": "/", "type": "root", "name": "根目录", "total": 1024000000000, "free": 800000000000, "used": 224000000000 }, { "path": "/mnt/data", "type": "mount", "name": "数据挂载点", "total": 1024000000000, "free": 800000000000, "used": 224000000000 }, { "path": "/media/usb", "type": "media", "name": "USB 存储设备", "total": 128000000000, "free": 64000000000, "used": 64000000000 } ] }
写入文件内容 /api/write
接收参数: { "file_path": "string", // 必需,指定文件的路径,可以是绝对路径或相对路径 "content": "string" // 必需,文件内容 "coding": "string" // 可选,文件编码格式,默认为utf-8(可选gbk/utf-8/base64,当设置base64时,content应为base64编码字符串) } 返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
编辑文件内容 /api/edit
接收参数: { "file_path": "string", // 必需,指定文件的路径,可以是绝对路径或相对路径 "old_string": "string", // 必需,要替换的旧字符串或正则表达式 "new_string": "string", // 必需,新的字符串 "replace_all": "boolean" // 可选,是否替换所有匹配项,默认为false }
返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
删除文件或目录 /api/delete
接收参数: { "path": "string", // 必需,指定要删除的文件或目录路径 "recursive": "boolean" // 可选,是否递归删除目录,默认为false } 返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
创建目录 /api/mkdir
接收参数: { "path": "string", // 必需,指定要创建的目录路径 "recursive": "boolean" // 可选,是否递归创建父目录,默认为false } 返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
移动或重命名 /api/move
接收参数: { "source": "string", // 必需,源文件或目录路径 "destination": "string" // 必需,目标路径 } 返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
复制文件或目录 /api/copy
接收参数: { "source": "string", // 必需,源文件或目录路径 "destination": "string", // 必需,目标路径 "recursive": "boolean" // 可选,是否递归复制目录,默认为false } 返回: { "code": 200, // 200表示成功 "message": "string" // 相关信息或错误消息 }
获取文件信息 /api/stat
接收参数: { "path": "string" // 必需,指定文件或目录路径 } 返回: { "code": 200, "info": { "type": "file" | "directory", "name": "string", "path": "string", "size": "number", // 文件大小(字节) "modified": "string", // 最后修改时间 "created": "string", // 创建时间 "isReadable": "boolean", "isWritable": "boolean" } }
检查路径是否存在 /api/exists
接收参数: { "path": "string" // 必需,指定要检查的路径 } 返回: { "code": 200, "exists": "boolean", "type": "file" | "directory" | null // 如果存在,返回类型 }
搜索文件 /api/search
接收参数: { "path": "string", // 可选,搜索的起始目录,默认为根目录 "pattern": "string", // 必需,搜索模式(支持通配符*和?) "content": "string", // 可选,搜索文件内容 "maxResults": "number" // 可选,最大结果数,默认为100 } 返回: { "code": 200, "results": [ { "type": "file" | "directory", "name": "string", "path": "string", "size": "number" } ] }
获取AI提示词 /api/prompts
请求类型:GET 返回: { "code": 200, "content": "" //提示词内容 }
发表评论