Skip to content

按应用走代理 ​

管理器 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、由别的程序直接拉起的模拟器不会挂上。

在管理器里设 ​

  1. 实例卡片右下角的「⋯」→「按应用走代理…」。卡片上已经有「代理」标记时,点标记也能打开。
  2. 打开「名单里的应用走代理」。
  3. 代理地址:
    • 点「从系统代理读取」,取这台电脑的代理设置(环境变量 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://。换了什么都写在检测结果下面。
  4. 应用名单:
    • 实例开着时,列出装了的第三方应用和 Google Play 服务,打勾就行;认得的游戏写中文名。
    • 实例没开时,在下面手填包名(比如 com.example.game),回车添加。
    • 名单里有、但实例里还没装的应用标「没装」,装上就生效。名单最多 64 个。
  5. 点「保存」。实例开着就马上生效;没开就下次用管理器或 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。
  • 名单里的应用一直标「没装」:包名可能写错了,或者游戏的包名和你写的不一样。在实例开着时打开对话框,从列出的应用里勾。

名单外的应用会不会受影响 ​

不会,照常直连。

Android 是 Google LLC 的商标。