侠客助手与侠客分身系统SDK 开发指南
SDK 简介
智控系统SDK 针对 智控与远控开发者提供了一套完整的解决方案,可以方便快捷的为目标 APP 开发出不同的脚本功能,使用智控系统的全部服务与功能。支持C#/Python/JavaScript三种开发语言的调用,系统提供有固定的10多种输入窗口,并支持开发者自定义窗口的开发(需要有一定XAML开发基础)。
公共参数
- 手机屏幕的宽度
private int Width;
- 手机屏幕的高度
private int Height;
- UI文本框控件名
public string EditText = "android.widget.EditText";
- 手机序列号
private string key;
- 是否是分身系统
private bool IsFS;
智控 API 参考
常规API
- 打开APP
public void OpenApp()
需要在编辑器的设置中设置好包名/首页标识/APP入口标识
- 显示脚本状态
public void ShowStatus(string status)
参数 类型 说明 status string 需要显示的状态信息 C#示例
ShowStatus("已完成");
Python / JavaScript示例
xObj.ShowStatus("已完成");
- 获取手机最上层页面标识
public string GetPhonePageTag()
参数 类型 说明 返回 string 包名|页面标识 C#示例
if(GetPhonePageTag().Contains(".lineage.LineageLauncher")) { ShowStatus("已返回到桌面"); }
Python / JavaScript示例
if(xObj.GetPhonePageTag().Contains(".lineage.LineageLauncher")) { xObj.ShowStatus("已返回到桌面"); }
- 查找对象获取所有坐标
public List<System.Drawing.Point> FindObjPoints(string text)
参数 类型 说明 text string 页面元素,{T}加图片编号为找图 返回 List<System.Drawing.Point> 坐标列表 C#示例
List<System.Drawing.Point> list = FindObjPoints("关注");// 找元素 List<System.Drawing.Point> list = FindObjPoints("{T}638044684466069584");// 找图
Python / JavaScript示例
var list = xObj.FindObjPoints("关注");// 找元素 var list = xObj.FindObjPoints("{T}638044684466069584");// 找图
- 精确查找元素
public string FindObj(string text)
参数 类型 说明 text string 页面元素 返回 string 结果 C#示例
if(FindObj("关注").Contains("成功")) { ShowStatus("页面包含关注"); }
Python / JavaScript示例
if(xObj.FindObj("关注").Contains("成功")) { xObj.ShowStatus("页面包含关注"); }
- 精确查找并点击元素
public string FindAndClickObj(string text, int index, bool isex = false)
参数 类型 说明 text string 页面元素 index int 序号(包含多个时,选择排列的序号) isex bool 如果不成功是否加强,最多连点3次 返回 string 结果 C#示例
if(FindAndClickObj("关注", 0, true).Contains("true")) { ShowStatus("关注成功"); }
Python / JavaScript示例
if(xObj.FindAndClickObj("关注", 0, true).Contains("true")) { xObj.ShowStatus("关注成功"); }
- 基于正则查找元素(模糊查找)
public string FindObjByRegex(string regex)
参数 类型 说明 regex string 页面元素 返回 string 结果 C#示例
if(FindObjByRegex("(关注|回关)").Contains("成功")) { ShowStatus("页面包含关注"); }
Python / JavaScript示例
if(xObj.FindObjByRegex("(关注|回关)").Contains("成功")) { xObj.ShowStatus("页面包含关注"); }
- 查找并点击元素(基于正则表达式)
public string FindAndClickObjByRegex(string regex, int index = 0, bool isex = false)
参数 类型 说明 regex string 页面元素 index int 序号(包含多个时,选择排列的序号) isex bool 如果不成功是否加强,最多连点3次 返回 string 结果 C#示例
if(FindAndClickObjByRegex("(关注|回关)", 0, true).Contains("true")) { ShowStatus("关注成功"); }
Python / JavaScript示例
if(xObj.FindAndClickObjByRegex("(关注|回关)", 0, true).Contains("true")) { xObj.ShowStatus("关注成功"); }
- 基于图片查找元素
public bool FindObjByImage(string name)
参数 类型 说明 name string 图片的名称 返回 bool 结果 C#示例
if(FindObjByImage("638044684466069584")) { ShowStatus("页面包含关注"); }
Python / JavaScript示例
if(xObj.FindObjByImage("638044684466069584")) { xObj.ShowStatus("页面包含关注"); }
- 基于图片查找并点击元素
public bool FindAndClickObjByImage(string name, int offerX = 0, int offerY = 0)
参数 类型 说明 name string 图片的名称 offerX int x的偏移像素 offerY int y的偏移像素 返回 bool 结果 C#示例
if(FindAndClickObjByImage("638044684466069584", 10, 10)) { ShowStatus("关注成功"); }
Python / JavaScript示例
if(xObj.FindAndClickObjByImage("638044684466069584", 10, 10)) { xObj.ShowStatus("关注成功"); }
- 点击坐标
public void Click(int x, int y, bool selfadaption)
参数 类型 说明 x int x坐标 y int y坐标 selfadaption bool 是否自适应不同分辨率 C#示例
Click(220, 100, true);// 自适应 Click(720, 1800, false);// 点击绝对坐标
Python / JavaScript示例
xObj.Click(220, 100, true);// 自适应 xObj.Click(720, 1800, false);// 点击绝对坐标
- 长按对象元素
public void HoldObj(string text, int index)
参数 类型 说明 text string 页面元素 index int 序号(包含多个时,选择排列的序号) C#示例
HoldObj("订阅号消息", 0);
Python / JavaScript示例
xObj.HoldObj("订阅号消息", 0);
- 长按坐标(自适应)
public void HoldPoint(int x, int y)
参数 类型 说明 x int x坐标 y int y坐标 C#示例
HoldPoint(220, 100);
Python / JavaScript示例
xObj.HoldPoint(220, 100);
- 获取一个随机数字
public int GetRandomNum(int min, int max)
参数 类型 说明 min int 最小值(必须为正数) max int 最大值(最大值必须大于最小值) 返回 int 结果 C#示例
int rand = GetRandomNum(10, 100);
Python / JavaScript示例
var rand = xObj.GetRandomNum(10, 100);
- 查找并赋值(一般用于文本框)
public string FindAndInutText(string name, string text, int index = 0)
参数 类型 说明 name string 元素名称 text string 文字内容 index int 序号(包含多个时,选择排列的序号) 返回 string 结果 C#示例
if(FindAndInutText("android.widget.EditText", "拨打电话", 0).Contains("true")) { ShowStatus("输入成功"); }
Python / JavaScript示例
if(xObj.FindAndInutText("android.widget.EditText", "拨打电话", 0).Contains("true")) { ShowStatus("输入成功"); }
- 通过X输入法输入文本
public void InputText(string text)
参数 类型 说明 text string 文字内容 C#示例
InputText("拨打电话");
Python / JavaScript示例
xObj.InputText("拨打电话");
- 发送安卓按键代码
public string PressKeyCode(int keycode)
参数 类型 说明 keycode int 键值 返回 string 结果 C#示例
if(PressKeyCode(3).Contains("true")) { ShowStatus("发送成功"); }
Python / JavaScript示例
if(xObj.PressKeyCode(3).Contains("true")) { ShowStatus("发送成功"); }
- 获取手机UI所有内容
public string GetUiConent()
参数 类型 说明 返回 string 结果 C#示例
string ui = GetUiConent();
Python / JavaScript示例
var ui = xObj.GetUiConent();
- 手机截图
public byte[] CaptureImage()
参数 类型 说明 返回 byte[] 二进制数组 C#示例
byte[] data = CaptureImage();
Python / JavaScript示例
var data = xObj.CaptureImage();
- 返回上一页
public void GotoBack()
- 返回Home
public void GotoPhoneHome()
- 向上滑动屏幕
public void DragUpper()
- 向下滑动屏幕
public void DragDown()
- 向左滑动屏幕
public void DragLeft()
- 向右滑动屏幕
public void DragRigh()
- 拖拽屏幕
public string Drag(int startx, int starty, int endx, int endy)
参数 类型 说明 startx int 开始时的X坐标 starty int 开始时的Y坐标 endx int 结束时的X坐标 endy int 结束时的Y坐标 C#示例
Drag(200, 900, 200, 300);// 上滑动作
Python / JavaScript示例
xObj.Drag(200, 900, 200, 300);// 上滑动作
- 转换输入法为手机默认输入法(分身系统不支持)
public void SetPhoneIME()
- 转换输入法为X输入法(分身系统不支持)
public void SetXIME()
- 退出运行的脚本
public void EixtScript()
- 执行Adb Shell指令
public string RunAdb(string cmd)
参数 类型 说明 cmd string 指令内容,如果要指定分身,请在--user userid的地方使用[USER]代替 返回 string 结果 C#示例
RunAdb("pm list pages[USER]");
Python / JavaScript示例
xObj.RunAdb("pm list pages[USER]");
- 执行Root Adb Shell指令(C#不支持)(仅支持分身智控)
public string RunRootAdb(string cmd)
参数 类型 说明 cmd string 指令内容,如果要指定分身,请在--user userid的地方使用[USER]代替 返回 string 结果 Python / JavaScript示例
xObj.RunRootAdb("pm list pages[USER]");
- 关闭APP
public void CloseApp(string packname)
参数 类型 说明 packname string App包名 C#示例
CloseApp("com.tencent.mm");
Python / JavaScript示例
xObj.CloseApp("com.tencent.mm");
- 保存文本到数据临时库
public void SaveTextToLibrary(string regex)
参数 类型 说明 regex string 元素,直接输入内容添加{加},修改手机名称添加{名} C#示例
SaveTextToLibrary("android.widget.TextView|android.view.View");// 多元素查找入库 SaveTextToLibrary("{加}文字一|文字二|文字三|文字N");// 直接输入内容入库 SaveTextToLibrary("{名}新的手机名");// 修改手机名称
Python / JavaScript示例
xObj.SaveTextToLibrary("android.widget.TextView|android.view.View");// 多元素查找入库 xObj.SaveTextToLibrary("{加}文字一|文字二|文字三|文字N");// 直接输入内容入库 xObj.SaveTextToLibrary("{名}新的手机名");// 修改手机名称
- 自动回复
public string AutoChat(string lastmessage, string user)
参数 类型 说明 lastmessage string 收到的消息 user string 用户名 返回 string 结果 C#示例
string msg = AutoChat("你好呀", "东厂");
Python / JavaScript示例
var msg = xObj.AutoChat("你好呀", "东厂");
- 图片滑动验证(测试)
public void ImageDragAuth(string leftImage, string reghtImage)
参数 类型 说明 leftImage string 左侧图片名称 reghtImage string 右侧图片名称 C#示例
ImageDragAuth("638045011665964870", "638045012071624680");
Python / JavaScript示例
xObj.ImageDragAuth("638045011665964870", "638045012071624680");
- 设置定位
public void SetLoction(string loction)
参数 类型 说明 loction string 新的GPS位置 C#示例
SetLoction("23.150955,113.324854");
Python / JavaScript示例
xObj.SetLoction("23.150955,113.324854");
- 获取手机里的文件内容
public string GetPhoneFile(string filepath)
参数 类型 说明 filepath string 手机文件路径 返回 string 文件内容 C#示例
string content = GetPhoneFile("/sdcard/test.txt");
Python / JavaScript示例
var content = xObj.GetPhoneFile("/sdcard/test.txt");
- 运行用户脚本
public void RunUserScript(string modulename, string sciptname)
参数 类型 说明 modulename string 引用的模块名称 sciptname string 脚本名称 C#示例
RunUserScript("用户定制", "关键词养号");
Python / JavaScript示例
xObj.RunUserScript("用户定制", "关键词养号");
- 从文本文件到列表(C#不支持)
public List<string> TextFileToList(string txtPath)
参数 类型 说明 txtPath string 本地文件地址 返回 List<string> 结果 Python / JavaScript示例
var list = xObj.TextFileToList("e:\\test\\test.txt");
- 转换成UI对象列表(C#不支持)
public List<UiObject> ConvertToUiList(string str)
参数 类型 说明 str string 内容 返回 List<UiObject> 结果 Python / JavaScript示例
var list = xObj.ConvertToUiList(FindObj("关注"));
- 上传文件到手机图片库(C#不支持)(仅支持分身智控)
public bool UploadFileToPictures(string str)
参数 类型 说明 str string 图片路径 返回 bool 结果 Python / JavaScript示例
xObj.UploadFileToPictures("e:\\test\\text.jpg");
- 上传文件到手机媒体库(C#不支持)(仅支持分身智控)
public bool UploadFileToMovies(string str)
参数 类型 说明 str string 视频路径 返回 bool 结果 Python / JavaScript示例
xObj.UploadFileToMovies("e:\\test\\text.mp4");
- 上传文件到手机SD(C#不支持)(仅支持分身智控)
public bool UploadFileToDownload(string str)
参数 类型 说明 str string 文件路径 返回 bool 结果 Python / JavaScript示例
xObj.UploadFileToMovies("e:\\test\\text.txt");
- 上传文件到手机媒体库(C#不支持)(不支持分身智控)
public bool UploadFileToDCIM(string str)
参数 类型 说明 str string 文件路径 返回 bool 结果 Python / JavaScript示例
xObj.UploadFileToDCIM("e:\\test\\text.png");
- 上传文件到手机SD(C#不支持)(不支持分身智控)
public bool UploadFileToSD(string str)
参数 类型 说明 str string 文件路径 返回 bool 结果 Python / JavaScript示例
xObj.UploadFileToSD("e:\\test\\text.txt");
- HTTP Get(C#不支持)
public string GetAsync(string url)
参数 类型 说明 url string url地址 返回 string 结果 Python / JavaScript示例
var data = xObj.GetAsync("http://www.website.com/");
- HTTP Post(C#不支持)
public string PostAsync(string url, JObject obj)
参数 类型 说明 url string url地址 obj JObject post内容 返回 string 结果 Python / JavaScript示例
var data = xObj.GetAsync("http://www.website.com/api", {"id":1001});
- 获取新的通知(C#不支持)(仅支持分身智控)
public JObject GetNewMessage()
参数 类型 说明 返回 JObject 结果 Python / JavaScript示例
var data = xObj.GetNewMessage(); if(data.code == 0) { var code = data.code;// 操作代码 成功为0,失败为-1 var message = data.message;// 返回消息 成功为ok var key = data.key;// 通知KEY var package_name = data.package_name;// APP包名 var index = data.index;// 分身序列号 var title = data.title;// 通知标题 var content = data.content;// 通知内容 }
- 打开新的通知(C#不支持)(仅支持分身智控)
public bool OpenNewMessage(string notification_key)
参数 类型 说明 notification_key string 通知KEY 返回 string 结果 Python / JavaScript示例
xObj.OpenNewMessage(data.key);
- 初始数据面板(C#不支持)
public string InitDataPanel(string summaryName, string summaryValue, string detailName, string detailValue)
参数 类型 说明 summaryName string 概述的显示名称,为空时显示默认名称 summaryValue string 概述的项,多个项用‘|’分隔,为空时不显示概述 detailName string 明细的显示名称,为空时显示默认名称 detailValue string 明细的项,多个项用‘|’分隔,为空时不显示明细 返回 string 结果,OK为成功 Python / JavaScript示例
xObj.InitDataPanel("实时报表", "总关注人数|总粉丝人数|总点赞人数|总评论人数", "详细数据", "账号|关注|点赞|粉丝|评论");
- 添加内容到数据面板(C#不支持)
public string AddDataPanel(JArray args)
参数 类型 说明 args JArray 添加的内容项,第一项格式:1为概述,2为明细 返回 string 结果,OK为成功 Python / JavaScript示例
var data = xObj.InitDataPanel("实时报表", "总关注人数|总粉丝人数|总点赞人数|总评论人数", "详细数据", "账号|关注|点赞|粉丝|评论"); if(data.Contains("OK")) { // 添加实时报表内容(添加的数量会与指定项中的总数进行自动累加) xObj.AddDataPanel({1, "总关注人数", 4}); xObj.AddDataPanel({1, "总粉丝人数", 5}); xObj.AddDataPanel({1, "总点赞人数", 6}); xObj.AddDataPanel({1, "总评论人数", 7}); // 添加详细数据内容(最多可添加10项内容,输入的内容项与初始化的内容项一致) xObj.AddDataPanel({2, "app账号", "4", "6", "5", "7"}); }
扩展API(仅支持C#)
- 组件请求 - API扩展
public JObject CallParts(string action, JArray args)
参数 类型 说明 action string 扩展名称 args JArray 参数组 返回 JObject 结果 PostAsync
JObject json = CallParts("PostAsync", new JArray{"http://www.website.com/api", new JObject{["id"] = 1001}}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); string data = json.Value<string>("result"); }
GetAsync
JObject json = CallParts("GetAsync", new JArray{"http://www.website.com/"}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); string data = json.Value<string>("result"); }
GetPhoneFile
JObject json = CallParts("GetPhoneFile", new JArray{"/sdcard/test.txt"}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); string data = json.Value<string>("result"); }
GetNewMessage (仅分身智控支持)
JObject json = CallParts("GetNewMessage", new JArray{}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); JObject data = JsonConvert.DeserializeObject<JObject>(json.Value<string>("result")); string key = data.Value<string>("key");// 通知KEY string package_name = data.Value<string>("package_name");// APP包名 int index = data.Value<int>("index");// 分身序列号 string title = data.Value<string>("title");// 通知标题 string content = data.Value<string>("content");// 通知内容 }
OpenNewMessage (仅分身智控支持)
JObject json = CallParts("OpenNewMessage", new JArray{data.Value<string>("key")}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); bool isok = json.Value<bool>("result"); }
RunRootAdb (仅分身智控支持)
JObject json = CallParts("RunRootAdb", new JArray{"pm list pages[USER]"}); if(json.Value<int>("code") == 0) { string msg = json.Value<string>("msg"); string result = json.Value<string>("result"); }
InitDataPanel 与 AddDataPanel
// InitDataPanel(初始化数据面板)与AddDataPanel(添加内容到数据面板)配合使用 JObject json = CallParts("InitDataPanel", new JArray{"实时报表", "总关注人数|总粉丝人数|总点赞人数|总评论人数", "详细数据", "账号|关注|点赞|粉丝|评论"}); if(json.Value<int>("code") == 0) { // 添加实时报表内容(添加的数量会与指定项中的总数进行自动累加) CallParts("AddDataPanel", new JArray{1, "总关注人数", 4}); CallParts("AddDataPanel", new JArray{1, "总粉丝人数", 5}); CallParts("AddDataPanel", new JArray{1, "总点赞人数", 6}); CallParts("AddDataPanel", new JArray{1, "总评论人数", 7}); // 添加详细数据内容(最多可添加10项内容,输入的内容项与初始化的内容项一致) CallParts("AddDataPanel", new JArray{2, "app账号", "4", "6", "5", "7"}); }
结束