接口概述
相关的接口操作对象都是通过Android容器实例的IP进行访问.由于创建Android容器实例有2种IP模式,以下所有的的相关接口都会有2个地址,在接入API时请根据自己的网络模式自行选择.
1.获取设备截图
接口地址:http://$ip:$port/task=snap&level=3
请求方式:GET
参数说明:
当Android容器为独立ip模式时 ip为安卓容器实例IP port为9082
当Android共享ip时 ip为当前主机ip port为动态计算得出 计算方法为: 第一个Android容器实例 10005 第二个 10008 第三个 10011 .... 以此类推 公式为 (索引下标-1) *3 + 10005
level=1 为低分辨率 level=2 中等分辨率 level=3 原始分辨率
返回结果:
png格式图片
2.一键新机
(仅支持v16以后的版本)
2.1 随机设备信息
接口地址:http://$ip:$port/modifydev
请求方式:GET
参数说明:
cmd=2
modifymac=true (可选参数 修改mac地址)
random_abroad=true(可选参数 默认为false 随机海外机型)
userip (可选参数 使用给定的ip进行区域匹配随机信息 )
isasync=true (可选参数 使用异步的方式进行请求 使用该参数后 会立刻返回结果 并给一个唯一ID作为查询请求的参数)
isSpecifiedModel=true (可选参数 表示指定机型随机)
modelId=1 (可选参数 机型参数列表 只有当isSpecifiedModel=true 时生效)
//机型字典表
{
"samsung": {
"SM-S901U": 97,
"SM-G986N": 98,
"SM-F926B": 99,
"SM-S9010": 100,
"SM-X906N": 101,
"SM-G998U": 102,
"SM-M536S": 103,
"SM-G990E": 104,
"SM-S906U": 105,
"SM-F707N": 106,
"SM-F9360": 107,
"SM-A536N": 108,
"SM-T976N": 109,
"SM-G998N": 110,
"SM-A336N": 111,
"SM-G988N": 112,
"SM-N970F": 113,
"SM-T875N": 114,
"SM-F926N": 115,
"SM-F916U": 116,
"SM-S906N": 117,
"SM-A325F": 118,
"SM-F916N": 119,
"SM-S908N": 120,
"SM-G991N": 121,
"SM-F711U": 122,
"SM-S908U": 123,
"SM-F711B": 124,
"SM-A326B": 125,
"SM-X906B": 126,
"SM-S906B": 127,
"SM-A5360": 128,
"SM-X806N": 129,
"SM-A536V": 130,
"SM-N981N": 131,
"SM-G996N": 132,
"SM-S901N": 133,
"SM-G781N": 134,
"SM-G981N": 135,
"SM-A125F": 136,
"SM-A346N": 137,
"SM-A336E": 138,
"SM-F926U": 139,
"SM-G9910": 140,
"SM-X706N": 141,
"SM-S908B": 142,
"SM-S901B": 143,
"SM-F936U": 144,
"SM-A325N": 145,
"SM-G991B": 146,
"SM-T875": 147,
"SM-F711N": 148,
"SM-F936B": 149,
"SM-X706B": 150,
"SM-A715F": 166,
"SM-M127F": 167,
"SM-N976N": 168,
"SM-G977N": 169,
"SM-A135N": 170,
"SM-G985F": 171,
"SM-N770F": 172,
"SM-G973F": 173,
"SM-N985F": 174,
"SM-A725F": 175,
"SM-A515F": 176,
"SM-N971N": 177,
"SM-N980F": 178,
"SM-G970F": 179,
"SM-F700F": 180,
"SM-G988B": 181,
"SM-G975F": 182,
"SM-A826S": 183,
"SM-A127F": 184,
"SM-E625F": 185,
"SM-G780F": 186,
"SM-E5260": 188,
"SM-T865": 189,
"SM-F900F": 192,
"SM-A546S": 193,
"SM-A546B": 194,
"SM-A546E": 195,
"SM-A136S": 196,
"SM-A137F": 197,
"SM-A528N": 198,
"SM-A426N": 199,
"SM-A226L": 200,
"SM-A245N": 201,
"SM-A235N": 202,
"SM-A736B": 203,
"SM-A505F": 204,
"SM-A705F": 205,
"SM-A315G": 206,
"SM-S918U": 207,
"SM-S911N": 208,
"SM-G960F": 209,
"SM-F731U": 210,
"SM-F946U": 211,
"SM-F721U": 212,
"SM-M236L": 213,
"SM-E225F": 214,
"SM-M515F": 215,
"SM-N975F": 216,
"SM-N960F": 217,
"SM-X916N": 218,
"SM-X910": 219,
"SM-X810": 220,
"SM-X816N": 221,
"SM-X716N": 222,
"SM-X710": 223,
"SM-T736N": 224,
"SM-T735": 225,
"SM-X800": 226,
"SM-X900": 227,
"SM-T725": 228,
"SM-T970": 229,
"SM-T835": 230,
"SM-S916U": 231,
"SM-G998U1": 232,
"SM-S928U1": 235,
"SM-G988U1": 260,
"SM-N970U1": 261
},
"realme": {
"RMX3370": 163
},
"Xiaomi": {
"MI 8": 7,
"MI 5X": 10,
"MI 9": 11,
"MI CC 9": 44,
"2112123AG": 153,
"2201123G": 154,
"M2101K9G": 155,
"Redmi K30 5G": 247,
"Mi9 Pro 5G": 248,
"Redmi 5 Plus": 249,
"Redmi 7A": 250,
"Redmi K20": 251,
"MIX 3": 252,
"MI 6": 253,
"Redmi Note 4X": 254,
"MI 10": 255,
"Mi Note 3": 256,
"MI MAX": 257,
"2312DRAABC": 258,
"23077RABDC": 259
},
"Meizu": {
"PRO 7 Plus": 12,
"PRO 7-S": 14,
"Meizu S6": 15
},
"Sony": {
"J9110": 187
},
"OPPO": {
"PBAM00": 20,
"PBEM00": 21,
"OPPO A73": 22,
"PACT00": 23,
"PBCM30": 46,
"PCGM00": 47,
"PDCM00": 49,
"PCLM10": 62,
"PDVM00": 65,
"PEFM00": 66,
"PGIM10": 156,
"CPH2145": 157,
"CPH2201": 158,
"CPH2009": 159
},
"Redmi": {
"Redmi 4X": 8,
"Redmi 6": 26,
"Redmi Note 7": 43,
"M2010J19SC": 45,
"M2003J15SC": 59,
"2201116SG": 162
},
"OnePlus": {
"ONEPLUS A3000": 29,
"ONEPLUS A6000": 61,
"PGKM10": 161
},
"vivo": {
"vivo X21A": 30,
"V1936A": 31,
"V2005A": 40,
"V2020A": 41,
"V1986A": 50,
"V2054A": 63,
"V1821A": 76,
"V1836A": 77,
"V1901A": 78,
"V1914A": 79,
"V1921A": 80,
"V1932A": 81,
"V1950A": 82,
"V1962A": 83,
"V1965A": 84,
"V1990A": 86,
"V2001A": 87,
"V2002A": 88,
"V2012A": 89,
"V2031A": 90,
"V2034A": 91,
"V2057A": 92,
"V2061A": 93,
"V2141A": 95
},
"HUAWEI": {
"VTR-AL00": 32,
"EVR-AN00": 33,
"SLA-AL00": 35,
"DVC-AN00": 54,
"PCT-AL10": 64
},
"google": {
"Pixel 3": 67,
"Pixel 3a": 241,
"Pixel 3XL": 242,
"Pixel 4": 243,
"Pixel 4a": 244,
"Pixel 6": 245,
"Pixel 6 Pro": 246,
"Pixel 5": 236,
"Pixel 8": 237,
"Pixel 8 Pro": 238,
"Pixel 7": 239,
"Pixel 7 Pro": 240
},
"HONOR": {
"BND-AL10": 37,
"AKA-AL10": 39,
"KOZ-AL00": 42,
"ALA-AN70": 51,
"AQM-AL10": 52,
"COL-AL10": 53,
"EBG-AN10": 55,
"HJC-AN90": 56,
"HLK-AL10": 57,
"KOZ-AL40": 58,
"TEL-AN00a": 74,
"TNNH-AN00": 75,
"YAL-AL50": 94,
"ELZ-AN00": 151,
"LGE-AN10": 152
},
"TECNO": {
"TECNO-LG8n": 233
},
"INFINIX": {
"X676B-GL": 234
}
}
当Android容器为独立ip模式时 ip为安卓容器实例IP port为9082
当Android共享ip时 ip为当前主机ip port为动态计算得出 计算方法为: 第一个Android容器实例 10005 第二个 10008 第三个 10011 .... 以此类推 公式为 (索引下标-1) *3 + 10005
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.202:9082/modifydev?cmd=2&modifymac=true&userip=8.8.8.8";
$ret = request_by_curl($url, '');
var_dump($ret);
?>
返回结果:
//成功
{
code: 200
}
如果使用isasnyc参数进行请求则返回的结果为:
//异步请求返回 请求ID
{"code":200,"msg":"185b66ab-1031-4c68-8423-345f8f013927"}
然后可以每隔1s 在去查询改任务是否执行成功 由于这里会重置网卡 所以在请求时一定要设置超时处理
//查询异步请求的任务结果
modifydev?cmd=2&query=185b66ab-1031-4c68-8423-345f8f013927
//返回成功
{"code":200,"msg":"OK"}
//任务正在执行中...
{"code":201,"reason":"busy"}
//任务失败超时
{"code":202,"reason":"time out"}
注意: 任务返回成功后就不在被记录 在此请求则返回任务不存在
{"code":202,"reason":"no this task"}
2.2 自定义设备信息
接口地址:http://$ip:$port/modifydev
请求方式:POST
参数说明:
当Android容器为独立ip模式时 ip为安卓容器实例IP port为9082
当Android共享ip时 ip为当前主机ip port为动态计算得出 计算方法为: 第一个Android容器实例 10005 第二个 10008 第三个 10011 .... 以此类推 公式为 (索引下标-1) *3 + 10005
post 内容: 将json字符 base64加密一下为json结构体示例
设备信息完整文件下载地址 dev.json
{
//设备信息 oaid 等
"devinfo": {
"oaid": "12345678901234567890",
"aaid": "",
"vaid": "",
"wifimac": "11:22:33:44:55:66",
"wifiname": "TP-LINK_MYT",
"btaddr": "22:33:44:55:66:77",
"btname": "MYT",
"androidId": "abcdefg123456"
},
//传感器信息
"sensors": [{
"Name": "ACCELEROMETER",
"Vendor": "MTK",
"StringType": "android.sensor.accelerometer",
"Version": -394882624,
"Type": 1,
"MinDelay": 5000,
"FifoReservedEventCount": 3000,
"MaxDelay": 20000,
"Id": 0,
"MaxRange": 78.453605651855,
"Resolution": 0.0012000000569969,
"Power": 0.0010000000474975,
"Flags": 0,
"RequiredPermission": "RequiredPermission",
"FifoMaxEventCount": 300
},
......
],
//模拟已安装应用列表 实际不安装
"fakeapps": [{
"pkg": "com.tencent.mobileqq",
"versionCode": "4030",
"versionName": "8.9.55",
"label": "QQ"
}, {
"pkg": "com.tencent.mm",
"versionCode": "2380",
"versionName": "8.0.37",
"label": "微信"
}, {
"pkg": "com.taobao.taobao",
"versionCode": "441",
"versionName": "10.24.20",
"label": "淘宝"
}],
//sim卡信息 地理位置 时区等信息
"siminfo": {
"mnc": "0",
"mcc": "460",
"lac": "28970",
"cid": "111407362",
"lat": "30.638809204102",
"lon": "114.2928314209",
"opercode": "46000",
"opername": "China Mobile",
"country": "cn",
"timezone": "UTC +8:00",
"zoneid": "Asia\/Shanghai",
"language": "zh",
"phonenumber": "17047949030"
},
//环境变量 可以依据不同品牌自行添加
"props": [{
"key": "gsm.version.baseband",
"val": "MOLY.LR12A.R3.MP.V136.6.P198,MOLY.LR12A.R3.MP.V136.6.P198"
}, {
"key": "net.hostname",
"val": "V2118"
}, {
"key": "ro.actionable_compatible_property.enabled",
"val": "true"
}, {
"key": "ro.allow.mock.location",
"val": "0"
}
...
]
}
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.202:9082/modifydev";
$data = file_get_contents('dev.json');
$post_data = base64_encode($data);
$ret = request_by_curl($url, 'cmd=1&data='.$post_data);
var_dump($ret);
?>
返回结果:
//成功
{
code: 200
}
3.隐藏应用
功能:和桌面上扩展服务->防封保护功能相同 在系统已安装列表中隐藏指定应用
接口地址:http://$ip:$port/modifydev
请求方式:GET
参数说明:cmd=3
data=base64({'com.aa.bb','com.cc.dd'})
当Android容器为独立ip模式时 ip为安卓容器实例IP port为9082
当Android共享ip时 ip为当前主机ip port为动态计算得出 计算方法为: 第一个Android容器实例 10005 第二个 10008 第三个 10011 .... 以此类推 公式为 (索引下标-1) *3 + 10005
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.202:9082/modifydev";
$arr = array('com.aa.bb','com.cc.dd');
$data = json_encode($arr);
$post_data = base64_encode($data);
$ret = request_by_curl($url, 'cmd=3&data='.$post_data);
var_dump($ret);
?>
返回结果:
//成功
{
code: 200
}
4.视频推流
功能:可以将指定的多媒体源投放到Android系统的摄像头 进行播放 设置好推流之后打开相机就可以查看效果了
接口地址:http://$ip:$port/modifydev
请求方式:POST
参数说明:cmd=4
type: video :视频流或者本地视频文件
webrtc :webrtc流媒体
image :本地图片或者网络图片
path = urlencode('rtmp://192.168.100.1/live/') //测试直播流地址 http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8
当Android容器为独立ip模式时 ip为安卓容器实例IP port为9082
当Android共享ip时 ip为当前主机ip port为动态计算得出 计算方法为: 第一个Android容器实例 10005 第二个 10008 第三个 10011 .... 以此类推 公式为 (索引下标-1) *3 + 10005
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$t = 'rtmp://192.168.100.1/live/test2';
$s = urlencode($t);
$ret = request_by_curl($url, 'cmd=4&type=video&path='.$s);
var_dump($ret);
?>
返回结果:
//成功
{
code: 200
}
5.获取当前推流地址
功能:获取当前推流地址和类型
接口地址:http://$ip:$port/modifydev
请求方式:GET
参数说明:cmd=5
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$ret = request_by_curl($url, 'cmd=5');
var_dump($ret);
?>
返回结果:
{"path":"webrtc:\/\/192.168.100.1\/test","type":"webrtc","code":200}
6 执行shell命令
功能:执行shell 命令
接口地址:http://$ip:$port/modifydev
请求方式:POST
参数说明:cmd=6
cmdline
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$cmd = urlencode('ps -a');
$ret = request_by_curl($url, 'cmd=6&cmdline='.$cmd);
var_dump($ret);
?>
7.更新设备信息
功能:更新指定的字段
接口地址:http://$ip:$port/modifydev
请求方式:POST
参数说明:cmd=7
data= json 字符串
json 格式为以下字段 任意一个或多个组合
字段名 | 类型 | 数据说明 |
---|---|---|
lat | string | 经度 (30.638809204102) |
lon | string | 纬度(114.2928314209) |
country | string | 国家码(cn) |
timezone | string | 时区(UTC +8:00) |
language | string | 语言(zh) |
phonenumber | string | 电话号码(17000888888) |
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$data['phonenumber'] = "12345678901";
$data['language'] = 'en';
$str = json_encode($data);
$ret = request_by_curl($url, 'cmd=7&data='.$str);
var_dump($ret);
?>
返回结果:
{"code":200}
8.设置应用的Root权限
功能: 给指定的应用root 权限
接口地址:http://$ip:$port/modifydev
请求方式:GET
参数说明:cmd= 10
pkg=com.tencent.game 应用包名
root=true root 权限 true or false
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$ret = request_by_curl($url, 'cmd=10&pkg=com.tencent.game&root=true');
var_dump($ret);
?>
返回结果:
{"code":200}
9.导出当前设备信息
功能:导出设备当前使用的设备信息 设备信息为加密后的数据
接口地址:http://$ip:$port/modifydev
请求方式:GET
参数说明:cmd=8
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
$ret = request_by_curl($url, 'cmd=8');
var_dump($ret);
?>
返回结果:
{"ret":"x1KeFHgj1XKKKuzjqHajV6Ojki8NDHcs","code":200}
10.导入设备信息
功能: 导入之前导出的设备信息
接口地址:http://$ip:$port/modifydev
请求方式:POST
参数说明:cmd=9
data= 导出的数据
以下给出PHP的调用方法示例:
<?php
/////////////////////////////////////////////////////////////////////
/*
* Curl post 方法
*/
function request_by_curl($remote_server, $post_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = "http://192.168.30.100:9082/modifydev";
//之前导出的数据保存到文件中
$data = file_get_contents('dev.dat');
$ret = request_by_curl($url, 'cmd=9&data='.urlencode($data));
var_dump($ret);
?>
返回结果:
{"code":200}
魔云腾按照不同的开发语言给出了封装示例,
1.PHP Demo (待发布) 版本:1.0 更新日期:
2.Go Demo GitHub地址 https://github.com/Henry0924/myt-androidApi-demo
3.JS Demo (待发布) 版本: 1.0 更新日期:
4 Python Demo (待发布) 版本: 1.0 更新日期: