安卓被控端及脚本
# 开发框架
安卓被控端和脚本,采用开源的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中,新建一个空项目。

2. 设置项目的上级目录,以及项目名称

3. 新建到这里

4. 在项目文件中,右键——在资源管理器中显示

5. 删除项目内的两个文件,然后将MCloud_v5.0目录中的文件,粘贴进来

6. 进行[安卓端配置](doc:Q6S3h7Tj)
修改main.js 中的host地址。
将该地址,改为实际运行的api接口地址,注意尾部没有斜杠
例如:
```javascript
var host = 'http://api.xxx.com.cn';
```
7. 开启服务

8. 显示二维码

9. 确保电脑和手机在同一个局域网。
打开手机上的autoXjs 6.3.6,菜单——连接电脑——扫码连接
连接成功以后,右下角会弹出提示

10. 运行项目

# 错误处理
## 后台未配置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)