安卓被控端及脚本

# 开发框架 安卓被控端和脚本,采用开源的AutoX免越狱自动化框架开发,本项目开发版本号为AutoX6.3.6 [AutoX开源地址](https://github.com/kkevsekk1/AutoX) [AutoX开发文档-官方版本](http://doc.autoxjs.com/) [AutoX开发文档-飞云版](https://easydoc.net/doc/25791054/uw2FUUiw/3bEzXb4y) > 当然了,你也可以根据业务需求,参考本套被控端的代码,使用其他基于auto.js的开发框架,甚至按键精灵、EasyClick等来进行后台通信和任务管理。 # 开发插件 VSCode插件:Auto.js-Autox.js-VSCodeExt-Wilinz 版本号:v1.111.0 这个插件并不是官方版本。 因为官方版本的插件,不显示二维码,无法和手机端建立连接。 这个插件修复了这一问题。 > 如果安装过程中出现了冲突提示,需先卸载已安装的其他autojs、autoXjs插件。 # 安卓被控端源代码目录结构 ``` shuibao_android └─ MCloud_v5.0 ├─ img # 公共资源目录 ├─ res # 打包资源目录 ├─ code.js # 项目核心逻辑,包含任务管理等逻辑 ├─ common.js # 项目公共模块,包含公用的函数 ├─ main.js # 项目的入口引导文件,包含版本校验、远程更新等逻辑 ├─ project.json # 打包配置文件 ``` # 设计思想 安卓客户端主要由main.js、code.js、commoon.js、project.json等文件构成。 ## main.js功能说明 - 检测联网:判断手机是否有网络 - api获取应用配置(后台——管理——其他设置——安卓APP配置) - 通过MD5比对更新code.js文件、commoon.js文件 **应用的版本号,就是main.js的版本号** 打包以后,main.js是不变的。 如果要更改脚本的功能,可以通过远程更新code.js的代码来实现。 通过这种热更新设计,客户端可以无感更新。 ## code.js功能说明 - 跟后台通信,提交设备信息/请求任务 - 执行任务脚本 - 显示设备信息 - 显示脚本运行日志 - 请求应用权限(获取手机识别码、悬浮窗、后台弹出界面、无障碍) > 如有其他功能更新,只需要更新code.js,将代码加密后上传到git仓库 客户端重启后会自动更新此文件 # 被控端调试与开发 由于被控端内部调用了common公共模块,因此调试和开发必须以项目的形式来进行。 但是autoX的项目管理,并不是很完善,因此在Mac中我们需要进行如下操作(Windows中大同小异): 1. 在VSCode中,新建一个空项目。 ![image.png](https://cos.easydoc.net/52287695/files/lgp7wlkh.png) 2. 设置项目的上级目录,以及项目名称 ![image.png](https://cos.easydoc.net/52287695/files/lgp7yypx.png) 3. 新建到这里 ![image.png](https://cos.easydoc.net/52287695/files/lgp7zsrx.png) 4. 在项目文件中,右键——在资源管理器中显示 ![image.png](https://cos.easydoc.net/52287695/files/lgp81muo.png) 5. 删除项目内的两个文件,然后将MCloud_v5.0目录中的文件,粘贴进来 ![image.png](https://cos.easydoc.net/52287695/files/lgp84ssk.png) 6. 进行[安卓端配置](doc:Q6S3h7Tj) 修改main.js 中的host地址。 将该地址,改为实际运行的api接口地址,注意尾部没有斜杠 例如: ```javascript var host = 'http://api.xxx.com.cn'; ``` 7. 开启服务 ![image.png](https://cos.easydoc.net/52287695/files/lgp8cob9.png) 8. 显示二维码 ![image.png](https://cos.easydoc.net/52287695/files/lgp8d4x3.png) 9. 确保电脑和手机在同一个局域网。 打开手机上的autoXjs 6.3.6,菜单——连接电脑——扫码连接 连接成功以后,右下角会弹出提示 ![image.png](https://cos.easydoc.net/52287695/files/lgp8fou7.png) 10. 运行项目 ![image.png](https://cos.easydoc.net/52287695/files/lgp8aeob.png) # 错误处理 ## 后台未配置js文件地址 ```javascript 23:17:48.372/V: 开始运行[/data/user/0/org.autojs.autoxjs.v6/cache/remote_project/1ffd68e0b4d0e845e4a8152f9108a8ba/main.js] 23:17:48.491/D: 开始联网检测... 23:17:48.516/D: 获取远程配置信息... 23:17:48.627/D: 请求结果 http://api.xxx.cn {"ret":200,"data":{"app_enable_swicth":"on","app_disable_tips":"\u6682\u505c\u4f7f\u7528","app_tip_type":"2","app_update_type":"1","app_code_js_download":"http:\/\/gitlab.xxx.com.cn:8099\/shuibao\/shuibao_android_pack\/raw\/master\/MCloud_v5.0\/code.js","app_common_js_download":"http:\/\/gitlab.xxx.com.cn:8099\/shuibao\/shuibao_android_pack\/raw\/master\/MCloud_v5.0\/common.js","frequency_device_info_update":"300","task_sell_method":"0","frequency_get_task":"10","device_bind_duration":"0","frequency_print_log":"on","frequency_record_log":"on","frequency_record_path":"\/sdcard\/log.txt","app_api_verify_switch":"on","app_timestemp_verify_scope":"280","app_api_aes_switch":"on","app_code_js_md5":"","app_common_js_md5":""},"msg":""} 23:17:48.768/E: Error:未取到云端文件名 ``` ```javascript 23:00:00.321/D: 开始联网检测... 23:00:00.360/D: 获取远程配置信息... 23:00:01.026/D: { JavaException: java.net.UnknownHostException: Unable to resolve host "gitlab.xxx.com.cn": No address associated with hostname at file:///android_asset/modules/__http__.js:49 at /data/user/0/org.autojs.autoxjs.v6/cache/remote_project/a86f746f23b3fde7a0ec067f463ab368/main.js:150 fileName: 'file:///android_asset/modules/__http__.js', lineNumber: 49 } 23:00:01.039/E: Error:未取到云端文件名 ``` 进入云系统后台,设置js文件的服务器地址。 详见:[安卓端配置](doc:Q6S3h7Tj)