系统要求
Headless API 让您无需任何应用界面,即可通过 ADB 或任意自动化工具完全控制 HideMyAndroid。此为 高级版 专属功能。
- 高级账户 — Headless API 仅限高级版使用。
- 应用版本 1.2.8 或更高。
- Root + LSPosed — 与 HideMyAndroid 所需的配置相同。请参阅 安装指南。
- ADB 已连接至设备(
adb devices可列出已连接设备)。 - 设备已联网 — 仅在启用代理时需要(会进行实时检测)。
⚠️ 请确保在使用无界面模式之前,应用已获得 VPN 权限。
身份认证
在应用中打开 设置 → 开发者 → Headless API,然后开启 启用。系统会自动生成一个密钥 — 点击 复制。每个请求都需要将此密钥作为 token 参数传入。
请妥善保管密钥 — 任何拥有该密钥且能访问 ADB 的人都可以控制您的配置文件。重新生成 将生成新密钥(旧密钥立即失效);退出登录将清除密钥。
在本文档中,请将 <your_access_token> 替换为您的密钥,将 <profile_id> 替换为 profile.create 返回的 id。
发起请求
共有两种传输方式,根据值中是否包含冒号 : 来选择
| 传输方式 | 适用场景 | 命令 |
|---|---|---|
content call | 读取操作,以及不含 : 的值(name、gmails、包名) | adb shell content call |
am broadcast | JSON 对象(hookFlags、proxy、deviceMock、sim)— 这些值包含 : | adb shell am broadcast |
content call 会在冒号处分割每个 --extra 参数,因此无法传递 JSON — 这也是 JSON 值需要通过广播发送的原因。
响应说明。 成功时返回 ok=true(content call)或 result=0(广播);失败时会附加 error_code 和 error_message。请参阅 错误代码。每个方法都需要传入 token。点击下方任意操作可展开其参数、请求与响应详情。
状态
READ status 检查 API 是否就绪 content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token> Response ok=true
Bundle[{data={"premium":true,"featureEnabled":true,"freshnessOk":true,"activeProfileId":"a1b2c3d4-...","version":"1.2.8"}, ok=true}] 字段说明:premium(高级版状态)、featureEnabled(功能是否启用)、freshnessOk(近期已在线确认许可证)、activeProfileId(当前激活的配置文件 id,无则为 null)、version(版本号)。
配置文件
READ profile.list 列出所有配置文件 content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.list --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"id":"a1b2...","name":"Demo","isActive":true,"createdAt":1717000000000,"updatedAt":1717000500000}], ok=true}] READ profile.get 获取单个配置文件的完整信息 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","name":"Demo","isActive":false,"hookFlags":{"hook_wifi":true,...},"proxy":{"enabled":false,...},"deviceMock":{"enabled":false,...},"sim":{"enabled":false,"simCards":[]},"gmails":[],"targetApps":["com.whatsapp"]}, ok=true}] CREATE profile.create 创建配置文件(返回其 id) content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | required | 配置文件的标签名称。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo Response ok=true
Bundle[{data={"id":"a1b2c3d4-..."}, ok=true}] 请将此 id 作为 <profile_id> 用于后续调用。
UPDATE profile.update 修改配置文件的设置 content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
name | string | optional | 新的配置文件标签名称(content call)。 |
gmails | string[] | optional | 虚拟 @gmail.com 账号(content call)。 |
hookFlags | object | optional | 伪装功能的开/关开关(broadcast)。 |
proxy | object | optional | 代理配置(broadcast)。 |
deviceMock | object | optional | 设备型号伪装(broadcast)。 |
sim | object | optional | SIM 卡/运营商伪装(broadcast)。 |
Request
content call — 普通值
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra name:s:"My Profile" broadcast — JSON 配置
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e hookFlags '{"hook_wifi":false,"hook_nearby_bluetooth":false}' Response ok=true
两种方式均返回完整的已更新配置文件。每个 JSON 字段的说明请参阅"配置"章节。
⚠️ hookFlags 会替换整个标志集 — 未填写的标志将恢复为默认值(开启)。若只想修改部分标志并保留其余设置,请先执行 profile.get 获取完整映射,编辑后再整体发送。
DELETE profile.delete 永久删除配置文件 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={}, ok=true}] 激活
配置文件只有在激活状态下才会执行伪装。激活操作会强制停止目标应用,使其以新身份重新启动。
ACTION profile.setActive 激活配置文件 — 开始伪装 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}] ACTION profile.deactivate 停用当前激活的配置文件 — 停止伪装 content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token> Response ok=true
Bundle[{data={}, ok=true}] 无需传入 id — 此操作会停用当前处于激活状态的配置文件。
目标应用
目标应用是配置文件将要伪装的应用程序。
READ profile.getApps 列出配置文件的目标应用 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.getApps --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] CREATE profile.addApp 向配置文件添加目标应用 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
packageName | string | required | 应用的包名。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] ⚠️ 重复添加同一包名将返回 BAD_REQUEST。
DELETE profile.removeApp 从配置文件中移除目标应用 content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | 配置文件的 id。 |
packageName | string | required | 要移除的应用。 |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.removeApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[], ok=true}] 配置
以下是通过 profile.update 发送的配置值。创建配置文件时的默认值:
| 设置项 | 默认值 | 启用方式… |
|---|---|---|
| hookFlags (all 20) | ✅ ON | 默认已开启。仅对需要关闭的标志发送 false。 |
| proxy | ❌ OFF | 添加 "enabled":true |
| deviceMock | ❌ OFF | 添加 "enabled":true |
| sim | ❌ OFF | 添加 "enabled":true |
| gmails | empty | 发送邮件地址(虚拟账号默认开启) |
⚠️ 包含
enabled:false的配置将被 保存但不生效 — 值会被保存以便日后启用,但在enabled:true之前不会执行任何伪装。地理位置伪装(hook_geo_*)需要一个已设置enabled:true且通过实时检测的代理。
hookFlags
默认:全部开启。 格式为 "flag": true|false 的映射表。一次更新会 替换整个映射表 — 未填写的标志将恢复为开启状态。
| 标志 | 功能说明 |
|---|---|
hook_hide_dev_opts | 隐藏开发者选项 |
hook_hide_vpn | 隐藏 VPN |
hook_hide_airplane_mode | 隐藏飞行模式 |
hook_hide_proxy | 隐藏系统代理设置 |
hook_hide_root | 隐藏 Root |
hook_hide_lsposed | 隐藏 LSPosed |
hook_spoof_installer | 伪装安装来源 |
hook_package_info | 伪装软件包信息/签名 |
hook_lan_scan_block | 阻止局域网扫描 |
hook_identifiers_partly | 伪装 Android ID(基础) |
hook_identifiers_fully | 伪装全部设备标识符(IMEI、序列号、AAID、MediaDRM、AppSetID、boot_id 等) |
hook_wifi | 伪装 Wi-Fi 名称/地址(SSID/BSSID) |
hook_nearby_wifi | 伪装附近 Wi-Fi 扫描结果 |
hook_nearby_bluetooth | 伪装附近蓝牙设备 |
hook_realistic_sensor | 使用真实传感器数据 |
hook_sensor_accelerometer | 伪装加速度计(需开启 hook_realistic_sensor) |
hook_virtual_accounts | 启用虚拟 Google 账号(gmails 需要此项开启) |
hook_geo_gps | 伪装 GPS 位置(需要带地理信息的代理) |
hook_geo_locale | 伪装语言/地区(需要带地理信息的代理) |
hook_geo_timezone | 伪装时区(需要带地理信息的代理) |
proxy
默认:关闭。 启用 enabled:true 后,应用将通过代理建立真实连接,读取其位置信息,并为 hook_geo_* 标志填充国家/纬度/经度/时区。实时检测最长耗时约 8 秒;检测失败的代理将返回 PROXY_INVALID 且不会被保存。
| 字段 | 类型 | 默认值 | 含义 / 约束 |
|---|---|---|---|
host | string | "" | 代理 IP / 主机名 |
port | int | 0 | 端口 — 有效范围 1–65535 |
protocol | string | HTTP | HTTP、SOCKS4 或 SOCKS5 |
username | string | "" | 认证用户名(可选) |
password | string | "" | 认证密码(可选) |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' deviceMock
默认:关闭。 模拟设备为其他型号。设置 "enabled":true 并填写以下任意字段 — 所有字段均为可选字符串(默认为空),每个字段对应一个 Android Build 属性:
| 字段 | 对应属性 | 示例 |
|---|---|---|
manufacturer | Build.MANUFACTURER | Samsung |
brand | Build.BRAND | samsung |
model | Build.MODEL | SM-S918B |
device | Build.DEVICE (代号) | dm3q |
product | Build.PRODUCT | dm3qxxx |
board | Build.BOARD | kalama |
hardware | Build.HARDWARE | qcom |
buildId | Build.ID | UP1A.231005.007 |
buildIncremental | Build.VERSION.INCREMENTAL | S918BXXU3CWK9 |
buildType | Build.TYPE | user |
buildTags | Build.TAGS | release-keys |
buildFingerprint | Build.FINGERPRINT | samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys |
deviceName | 显示的设备名称 | Galaxy S23 Ultra |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' sim
默认:关闭。 伪装 SIM 卡/运营商信息。设置 "enabled":true 并在 simCards 中提供最多两张 SIM 卡信息。每张 SIM 卡包含以下字段:
| 字段 | 类型 | 默认值 | 含义 / 约束 |
|---|---|---|---|
slotIndex | int | 0 | SIM 卡槽 — 仅支持 0 或 1 |
carrierName | string | "" | 运营商名称(如 AT&T) |
countryIso | string | "" | ISO 国家代码(如 us)— 自动转为小写 |
mcc | string | "" | 移动国家代码(如 310) |
mnc | string | "" | 移动网络代码(如 410) |
operatorCode | string | "" | 运营商代码 = mcc + mnc(如 310410) |
phoneNumber | string | "" | 电话号码 |
iccid | string | "" | SIM 卡序列号(ICCID) |
imsi | string | "" | IMSI |
networkType | string | "" | 网络类型 — 仅支持:LTE、NR 5G、WCDMA、GSM |
networkType 仅接受以下值:
| 值 | 网络制式 |
|---|---|
NR 5G | 5G |
LTE | 4G |
WCDMA | 3G |
GSM | 2G |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G"}]}' gmails
默认:空。 虚拟 Google 账号列表 — 仅接受 @gmail.com 地址。新列表将覆盖旧列表;[] 可清空列表。由于不含 :,可直接使用 content call:
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]' 完整示例
从零开始的完整配置流程:
# 1. create a profile — copy the returned id into <profile_id> below
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# 2. add a target app
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp
# 3. add the virtual Gmail accounts
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]'
# 4. enable + set the device mock
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}'
# 5. enable + set the SIM mock (two cards, full fields)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}'
# 6. enable + set the proxy (tested live, ~8s)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
# 7. activate (restarts the target app)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# 8. verify
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> 错误代码
请求失败时返回 ok=false 并附带以下 error_code 值(广播返回 result=1):
| 代码 | 含义 | 修复方法 |
|---|---|---|
UNAUTHORIZED | Token 缺失或错误 | 使用当前有效的密钥;不确定时请重新生成 |
FEATURE_DISABLED | Headless API 未开启 | 在设置 → 开发者 → Headless API 中启用 |
BAD_REQUEST | 参数或 JSON 格式错误 | 检查必填字段、JSON 格式是否正确、是否仅使用 Gmail 地址、是否有重复应用 |
NOT_FOUND | 该配置文件 id 不存在 | 通过 profile.list 确认 id 是否正确 |
PROXY_INVALID | 代理未通过实时检测 | 检查主机/端口/协议/认证信息及设备网络连接;该代理未被保存 |
LICENSE_EXPIRED | 高级版已过期 | 续订高级版 |
LICENSE_STALE | 许可证近期未在线验证 | 打开应用一次以重新验证(持续使用时至少每 24 小时验证一次) |
INTERNAL | 内部错误(I/O 或 Root 相关) | 重试;检查 Root/LSPosed 是否正常运行 |
提示与常见问题
- 广播命令没有任何效果? 请确认命令中包含了
-p com.wowsoftware.hidemyandroid— Android 会拦截不带此参数的广播。 - 值在
:后被截断? 该值包含冒号,content call会在冒号处截断。请改用HEADLESS_UPDATE广播发送该值。 - JSON 广播未生效(Windows 上常见)? 在桌面 Shell 与设备 Shell 之间传递时,
am broadcast命令中的 JSON 引号(hookFlags、proxy、deviceMock、sim)很容易被转义处理,导致am解析出错(值可能被识别为dat=…数据 URI)从而不生效。可靠的解决方法是避免在命令行中直接传入 JSON — 将整个工作流放入一个.sh文件(单引号可保留所有 JSON 内容完整),然后推送到设备上运行。脚本在 设备上 运行,因此还可以捕获新建的配置文件 id 并在后续步骤中复用:bash然后将文件推送到设备并运行:# setup.sh — the full example as one runnable script (runs on the device) URI=content://com.wowsoftware.hidemyandroid.headless PKG=com.wowsoftware.hidemyandroid K=<your_access_token> # 1. create a profile and capture its id ID=$(content call --uri $URI --method profile.create --extra token:s:$K --extra name:s:Demo | grep -o '"id":"[^"]*"' | head -n1 | sed 's/.*"id":"//;s/"//') echo "profile id: $ID" # 2. add a target app content call --uri $URI --method profile.addApp --extra token:s:$K --extra id:s:$ID --extra packageName:s:com.facebook.katana # 3. add the virtual Gmail accounts content call --uri $URI --method profile.update --extra token:s:$K --extra id:s:$ID --extra 'gmails:s:["[email protected]","[email protected]"]' # 4. enable + set the device mock am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' # 5. enable + set the SIM mock (two cards) am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}' # 6. enable + set the proxy (tested live, ~8s) am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' # 7. activate (restarts the target app) content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID # 8. verify content call --uri $URI --method profile.get --extra token:s:$K --extra id:s:$IDbash不含 JSON 的普通adb push setup.sh /data/local/tmp/setup.sh adb shell sh /data/local/tmp/setup.shcontent call命令可直接在命令行输入,无需脚本。在 Git Bash 中,请在adb命令前加上MSYS_NO_PATHCONV=1,以防止设备路径被重写。 - 修改未生效? 目标应用必须重启 — 激活配置文件时会自动完成此操作。
- 信任的代理仍返回
PROXY_INVALID? 设备需要联网才能完成检测,超时上限约为 8 秒,响应较慢的代理可能会超时。