按应用走代理
管理器 0.4.0 起,可以让实例里指定的应用(按包名)经这台电脑上的代理软件联网,别的应用照旧直连。比如只让海外服的游戏走代理,国服游戏和系统照常。
- 不用 VPN:实例里有一个以 root 运行的小程序(
modavd-proxyd,随modavd.exe带着,开机时放进实例),按应用接走名单里应用的 TCP、UDP 和 DNS,应用和系统都看不到 VPN。 - 代理软件(Clash 系之类)还是要你自己在电脑上开着,ModAVD 只负责把名单里应用的流量送过去。
代理断了就断网
代理软件关了或连不上时,名单里的应用断网,不会悄悄改走直连。
要准备什么
- 电脑上开着代理软件,最好用它的 SOCKS5 端口或混合端口(Clash 系常见的 7890、7897),TCP、UDP、DNS 都能走。
- 只有 HTTP 代理也能用,但只转 TCP 和 DNS:名单里应用的 UDP 不通,游戏里的语音、实时对战这类可能用不了。
- 实例里的
10.0.2.2就是这台电脑的127.0.0.1。代理软件只听本机也行,不用打开「允许局域网连接」。 - 实例要用管理器或命令行
modavd开机才会挂上代理。不经过 modavd、由别的程序直接拉起的模拟器不会挂上。
在管理器里设
- 实例卡片右下角的「⋯」→「按应用走代理…」。卡片上已经有「代理」标记时,点标记也能打开。
- 打开「名单里的应用走代理」。
- 代理地址:
- 点「从系统代理读取」,取这台电脑的代理设置(环境变量
ALL_PROXY、HTTPS_PROXY、HTTP_PROXY,或 Windows「Internet 选项」里手动设的代理); - 或者手填
socks5://127.0.0.1:7890这样的地址,不写协议也行,点「检测」看它是什么协议、UDP 能不能用。 127.0.0.1、localhost会记成实例里看到的10.0.2.2;混合端口写成了http://时会换成socks5://。换了什么都写在检测结果下面。
- 点「从系统代理读取」,取这台电脑的代理设置(环境变量
- 应用名单:
- 实例开着时,列出装了的第三方应用和 Google Play 服务,打勾就行;认得的游戏写中文名。
- 实例没开时,在下面手填包名(比如
com.example.game),回车添加。 - 名单里有、但实例里还没装的应用标「没装」,装上就生效。名单最多 64 个。
- 点「保存」。实例开着就马上生效;没开就下次用管理器或
modavd开机时生效。
对话框底下的「现在」一栏写的是保存了的设置现在怎样,和卡片上的标记是同一个意思。
用 Google 登录的海外游戏
把「Google Play 服务」(com.google.android.gms)也加进名单。名单里没有它时,对话框会提示,点「加进名单」就行。
要关掉,取消「名单里的应用走代理」再保存。地址和名单会留着,下次打开不用重填。
卡片上的「代理」标记
设置打开、名单不空时,实例卡片的标题旁有「代理」标记,卡片和列表两种视图都有。鼠标停在上面能看到详情,点它打开设置。
实例开着时,管理器窗口开着期间大约每 30 秒问一次实例里的状态;开机、关机或改了设置时马上再问。
| 颜色 | 意思 |
|---|---|
| 灰 | 实例没开(写着几个应用、走哪个代理,下次开机生效);正在开机或关机;或者正在问实例里的状态 |
| 绿 | 已生效:几个应用(几个还没装)→ 代理地址。代理不转 UDP 时后面写「UDP 不通」 |
| 黄 | 要留意,名单里的应用多半还能用:规则缺了几条、正在补上;最近一次经代理的连接没成功,但这台电脑能连到代理;这次没问到实例里的状态 |
| 红 | 名单里的应用现在断网或直连:代理连不上;实例里的代理程序没在跑;规则挂不上;保存了但没生效 |
命令行
powershell
tools\modavd.exe proxy 3 # 查看
tools\modavd.exe proxy 3 on --server auto --add com.example.game # 打开,取这台电脑的代理设置
tools\modavd.exe proxy 3 --add com.google.android.gms # 往名单里加
tools\modavd.exe proxy 3 test # 在这台电脑上探测代理
tools\modavd.exe proxy 3 off # 关掉,地址和名单留着- 不带别的参数是查看:开关、地址、名单;实例开着时附上实例里的实际状态(规则在不在、代理连没连上、名单里哪些还没装)。
on打开、off关掉;--server改地址,--add/--remove增删,--apps整个换掉名单。这几个都能写多次或用逗号隔开,--apps ""清空名单。可以和on一起给。--server的写法和对话框一样;auto是取这台电脑的代理设置。第一次on没给地址时也按auto。test在这台电脑上探测设好的代理:是什么协议、经它的 UDP 能不能用。探测不到是退出码 9(proxy_unavailable)。- 设置存在
mas-avd.json的instances.<i>.appProxy里,删除实例时一起删掉。 - MCP 里是
get_app_proxy、set_app_proxy两个工具。
完整的选项和 --json 输出见 ModAVDManager 的 README。
HTTP 接口
管理器页面用的是本机的 HTTP 接口,只听 127.0.0.1:
| 接口 | 做什么 |
|---|---|
GET / PUT /api/instances/{i}/proxy | 读、改一台实例的设置;读的时候附上实例里的状态和标记 |
GET /api/instances/{i}/packages | 列出实例里装了的第三方应用和 Google Play 服务(实例要开着) |
GET /api/proxy/suggest | 这台电脑的代理设置,换成实例里看到的地址 |
POST /api/proxy/probe | 在这台电脑上探测一个代理地址 |
事件 proxy | 各实例的标记有变化时推送 |
字段、错误码和登录方式见 API.md。
常见问题
标记是红的,写着「代理连不上」
- 看代理软件开着没有、端口对不对:在对话框里点「检测」,或者跑
tools\modavd.exe proxy <编号> test。 - 这时名单里的应用断网,这是故意的。代理软件恢复以后不用重开实例:名单里的应用下一次连上,标记就变回绿的,在那之前可能是黄的。
标记是黄的,写着「最近一次经代理的连接没成功」
这台电脑能连到代理,只是名单里的应用最近那一次连接没成功。多半是那次要连的服务器没回应,或者代理软件的规则把它拦了。应用能正常用就不用管;一直这样就看代理软件的日志。
标记是红的,写着代理程序没在跑或者规则挂不上
用管理器或 modavd 把实例关机再开一次。还是这样就反馈问题:在实例开着时收集,问题包会收进实例里代理程序的状态和日志。
游戏还是连不上或者登录不了
- 用 Google 登录的:把 Google Play 服务也加进名单。
- 游戏要用 UDP(语音、实时对战):换成代理软件的 SOCKS5 或混合端口,别用 HTTP 代理。
- 名单里的应用没有 IPv6,只走 IPv4。
- 名单里的应用一直标「没装」:包名可能写错了,或者游戏的包名和你写的不一样。在实例开着时打开对话框,从列出的应用里勾。
名单外的应用会不会受影响
不会,照常直连。