<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>V2rayNG on 猫猫鱼的小窝</title>
    <link>https://csdn.fjh1997.top/tags/v2rayng/</link>
    <description>Recent content from 猫猫鱼的小窝</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>xxx@example.com (catcatyu)</managingEditor>
    <webMaster>xxx@example.com (catcatyu)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Fri, 05 Jun 2026 20:30:00 +0800</lastBuildDate>
    
    
    <atom:link href="https://csdn.fjh1997.top/tags/v2rayng/atom.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>解决 Google Play 在 v2rayNG 下卡在等待下载的问题</title>
      <link>https://csdn.fjh1997.top/posts/20260605.html</link>
      <pubDate>Fri, 05 Jun 2026 20:30:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/20260605.html</guid>
      <description>
        <![CDATA[<h1>解决 Google Play 在 v2rayNG 下卡在等待下载的问题</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="问题现象">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e7%8e%b0%e8%b1%a1"></a>
问题现象
</h2><p>一台 OnePlus / ColorOS 设备上，Google Play 可以打开，也能搜索应用，但是安装应用时一直显示“等待中”或者“正在等待下载”。设备已经 root，可以在 Termux 里使用 <code>su</code> 执行系统命令。</p>
<p>当时环境大致如下：</p>
<ul>
<li>Android 16</li>
<li>Google Play 商店版本：<code>40.1.20-23</code></li>
<li>Google Play 服务版本：<code>26.19.34</code></li>
<li>v2rayNG：<code>2.0.18</code></li>
<li>当前代理节点：<code>TLS-Vision-Unlimited-IPv4</code></li>
</ul>
<h2 id="先排除常见问题">
<a class="header-anchor" href="#%e5%85%88%e6%8e%92%e9%99%a4%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98"></a>
先排除常见问题
</h2><p>先看空间：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">df -h /data /storage/emulated/0
</span></span></code></pre></td></tr></table>
</div>
</div><p>结果 <code>/data</code> 可用空间还有几百 GB，所以不是空间不足。</p>
<p>再确认几个核心包是否存在：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pm path com.android.vending
</span></span><span class="line"><span class="cl">pm path com.google.android.gms
</span></span><span class="line"><span class="cl">pm path com.google.android.gsf
</span></span><span class="line"><span class="cl">pm path com.android.providers.downloads
</span></span></code></pre></td></tr></table>
</div>
</div><p>这些包都存在。root 下进一步看包状态：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;/system/bin/dumpsys package com.android.vending | grep -E &#34;versionName|lastUpdateTime|installerPackageName|User 0&#34;&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;/system/bin/dumpsys package com.google.android.gms | grep -E &#34;versionName|lastUpdateTime|installerPackageName|User 0&#34;&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;/system/bin/dumpsys package com.android.providers.downloads | grep -E &#34;versionName|User 0&#34;&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>结论：</p>
<ul>
<li>Play 商店、Play 服务、GSF、下载管理器都没有被禁用。</li>
<li>Play 商店版本比较旧，最后更新时间停在 2025-03-12。</li>
<li>下载管理器正常启用。</li>
</ul>
<h2 id="清掉旧的卡死下载任务">
<a class="header-anchor" href="#%e6%b8%85%e6%8e%89%e6%97%a7%e7%9a%84%e5%8d%a1%e6%ad%bb%e4%b8%8b%e8%bd%bd%e4%bb%bb%e5%8a%a1"></a>
清掉旧的卡死下载任务
</h2><p>一开始在下载管理器数据库里发现了一个旧的 Play 下载任务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;content query --uri content://downloads/all_downloads&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>其中有一条记录类似：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">notificationpackage=com.android.vending
</span></span><span class="line"><span class="cl">allowed_network_types=2
</span></span><span class="line"><span class="cl">status=194
</span></span><span class="line"><span class="cl">errorMsg=Binding socket to network 182 failed: EPERM (Operation not permitted)
</span></span><span class="line"><span class="cl">uri=https://rr5---sn-a5mekn6r.gvt1.com/play-apps-download-default/download/by-id/...
</span></span></code></pre></td></tr></table>
</div>
</div><p>这里有两个重点：</p>
<ul>
<li><code>allowed_network_types=2</code> 表示任务只允许 Wi-Fi。</li>
<li><code>Binding socket to network 182 failed</code> 表示它还绑到了一个已经失效的网络。</li>
</ul>
<p>删除这条旧任务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;content delete --uri content://downloads/all_downloads/103519&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;am force-stop com.android.vending; am force-stop com.android.providers.downloads; am force-stop com.google.android.gms&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;cmd package clear --user 0 --cache-only com.android.providers.downloads; cmd package clear --user 0 --cache-only com.android.vending&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>这一步可以解决旧任务残留导致的“等待中”，但本次问题还没有完全解决。</p>
<h2 id="抓-play-下载服务日志">
<a class="header-anchor" href="#%e6%8a%93-play-%e4%b8%8b%e8%bd%bd%e6%9c%8d%e5%8a%a1%e6%97%a5%e5%bf%97"></a>
抓 Play 下载服务日志
</h2><p>重新点下载后，继续抓日志：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;logcat -d -t 3000 | grep -Ei &#34;Finsky|DownloadService|CronetDownloader|CANNOT_CONNECT|ERR_QUIC|ERR_CONNECTION|WAITING_FOR_RETRY|RUNNING|QUEUED|gvt1|CronetUrlRequest&#34;&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>关键日志：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">CronetDownloader: onFailed
</span></span><span class="line"><span class="cl">Exception in CronetUrlRequest: net::ERR_CONNECTION_CLOSED
</span></span><span class="line"><span class="cl">Download Service Error: CANNOT_CONNECT (8)
</span></span><span class="line"><span class="cl">Updating listeners of &lt;... QUEUED with WAITING_FOR_RETRY ...&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>中间还出现过：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">net::ERR_QUIC_PROTOCOL_ERROR
</span></span></code></pre></td></tr></table>
</div>
</div><p>这说明 Play 不是真的单纯排队，而是下载服务连接失败后进入等待重试。</p>
<p>为了排除 QUIC/HTTP3 影响，我临时对 Play 和 GMS 禁了 UDP 443：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;iptables -I OUTPUT -p udp --dport 443 -m owner --uid-owner 10248 -j REJECT&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;iptables -I OUTPUT -p udp --dport 443 -m owner --uid-owner 10242 -j REJECT&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>其中：</p>
<ul>
<li><code>10248</code> 是 Play 商店 UID。</li>
<li><code>10242</code> 是 Google Play 服务 UID。</li>
</ul>
<p>禁掉 UDP 443 后，QUIC 错误减少，但仍然出现 TCP 层的 <code>ERR_CONNECTION_CLOSED</code>，所以问题不只是 QUIC。</p>
<h2 id="找到真正失败的域名">
<a class="header-anchor" href="#%e6%89%be%e5%88%b0%e7%9c%9f%e6%ad%a3%e5%a4%b1%e8%b4%a5%e7%9a%84%e5%9f%9f%e5%90%8d"></a>
找到真正失败的域名
</h2><p>Play 的下载 URL 不一定直接出现在 logcat 里，可以复制它的本地数据库出来读：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;cp /data/data/com.android.vending/databases/download_service /tmp/play_download_service.db; chmod 644 /tmp/play_download_service.db&#39;</span>
</span></span><span class="line"><span class="cl">python3 - <span class="s">&lt;&lt;&#39;PY&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">import pathlib, re
</span></span></span><span class="line"><span class="cl"><span class="s">data = pathlib.Path(&#39;/tmp/play_download_service.db&#39;).read_bytes()
</span></span></span><span class="line"><span class="cl"><span class="s">urls = sorted(set(m.decode(&#39;utf-8&#39;, &#39;ignore&#39;) for m in re.findall(rb&#39;https?://[^\x00\s&#34;\&#39;]+&#39;, data)))
</span></span></span><span class="line"><span class="cl"><span class="s">for u in urls:
</span></span></span><span class="line"><span class="cl"><span class="s">    print(u[:500])
</span></span></span><span class="line"><span class="cl"><span class="s">PY</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>查到当前 Play 下载库里实际使用的是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">https://services.googleapis.cn/download/by-token/download?token=...
</span></span></code></pre></td></tr></table>
</div>
</div><p>旧任务里还出现过：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">https://rr5---sn-a5mekn6r.gvt1.com/play-apps-download-default/download/by-id/...
</span></span></code></pre></td></tr></table>
</div>
</div><p>因此重点域名是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">services.googleapis.cn
</span></span><span class="line"><span class="cl">redirector.gvt1.com
</span></span><span class="line"><span class="cl">*.gvt1.com
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="本机连通性测试">
<a class="header-anchor" href="#%e6%9c%ac%e6%9c%ba%e8%bf%9e%e9%80%9a%e6%80%a7%e6%b5%8b%e8%af%95"></a>
本机连通性测试
</h2><p>直接在 Termux 里测试：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://redirector.gvt1.com
</span></span><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://rr5---sn-a5mekn6r.gvt1.com
</span></span><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://play.googleapis.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>一开始结果是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">services.googleapis.cn      TLS connect error: unexpected eof while reading
</span></span><span class="line"><span class="cl">redirector.gvt1.com         TLS connect error: unexpected eof while reading
</span></span><span class="line"><span class="cl">rr5---sn-a5mekn6r.gvt1.com  HTTP/1.1 404 Not Found
</span></span><span class="line"><span class="cl">play.googleapis.com         HTTP/2 404
</span></span></code></pre></td></tr></table>
</div>
</div><p>404 在这里反而说明 TLS 和 HTTP 都是通的，只是访问根路径不是有效接口。真正有问题的是 <code>unexpected eof while reading</code>，也就是 TLS 握手阶段被断开。</p>
<p>为了判断是不是域名本身的问题，又用 check-host 从第三方节点测：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -s <span class="s1">&#39;https://check-host.net/check-http?host=https://services.googleapis.cn&amp;max_nodes=8&#39;</span> -H <span class="s1">&#39;Accept: application/json&#39;</span>
</span></span><span class="line"><span class="cl">curl -s <span class="s1">&#39;https://check-host.net/check-http?host=https://redirector.gvt1.com&amp;max_nodes=8&#39;</span> -H <span class="s1">&#39;Accept: application/json&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>外部节点访问 <code>services.googleapis.cn</code> 和 <code>redirector.gvt1.com</code> 基本都返回 404，说明域名本身没有挂，是本机当前代理线路有问题。</p>
<h2 id="检查-v2rayng-路由配置">
<a class="header-anchor" href="#%e6%a3%80%e6%9f%a5-v2rayng-%e8%b7%af%e7%94%b1%e9%85%8d%e7%bd%ae"></a>
检查 v2rayNG 路由配置
</h2><p>v2rayNG 2.0.18 的配置存在 MMKV 里：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;strings /data/data/com.v2ray.ang/files/mmkv/SETTING | grep -Ei &#34;routing|geosite|gvt1|googleapis|services.googleapis|direct|proxy&#34; -C2&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>当时配置里能看到类似规则：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;domain&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;services.googleapis.cn&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;*.gvt1.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;redirector.gvt1.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;*.googleusercontent.com&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;outboundTag&#34;</span><span class="p">:</span> <span class="s2">&#34;proxy&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;remarks&#34;</span><span class="p">:</span> <span class="s2">&#34;playstore&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>而且它的位置在 <code>geosite:cn -&gt; direct</code> 前面。分应用代理里也包含：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">com.android.vending
</span></span><span class="line"><span class="cl">com.google.android.gms
</span></span><span class="line"><span class="cl">com.android.providers.downloads
</span></span><span class="line"><span class="cl">com.termux
</span></span></code></pre></td></tr></table>
</div>
</div><p>所以表面看路由顺序没问题。</p>
<p>为了进一步排除“VPN 路由没生效”，我直接强制使用 v2rayNG 的本地 socks 端口测试：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl --socks5-hostname 127.0.0.1:10808 -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span><span class="line"><span class="cl">curl --socks5-hostname 127.0.0.1:10808 -I --connect-timeout <span class="m">10</span> https://redirector.gvt1.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果强制 socks 也失败，说明不是路由规则顺序问题，而是当前节点或服务端出站本身连不上这些域名。</p>
<p>当时测试结果就是强制 socks 也失败：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">TLS connect error: unexpected eof while reading
</span></span></code></pre></td></tr></table>
</div>
</div><p>因此定位为当前节点对 <code>services.googleapis.cn</code> 和 <code>redirector.gvt1.com</code> 的 TLS 握手不正常。</p>
<h2 id="修复办法">
<a class="header-anchor" href="#%e4%bf%ae%e5%a4%8d%e5%8a%9e%e6%b3%95"></a>
修复办法
</h2><p>最终调整 v2rayNG 路由，让 Play 下载相关域名明确走代理，并确保规则在 <code>geosite:cn</code> 直连规则前面：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">full:services.googleapis.cn
</span></span><span class="line"><span class="cl">full:redirector.gvt1.com
</span></span><span class="line"><span class="cl">domain:gvt1.com
</span></span><span class="line"><span class="cl">domain:googleapis.cn
</span></span><span class="line"><span class="cl">domain:googleusercontent.com
</span></span><span class="line"><span class="cl">geosite:google
</span></span></code></pre></td></tr></table>
</div>
</div><p>出站选择 <code>proxy</code>。</p>
<p>如果用的是简单路由界面，逻辑应该是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">代理：
</span></span><span class="line"><span class="cl">full:services.googleapis.cn
</span></span><span class="line"><span class="cl">full:redirector.gvt1.com
</span></span><span class="line"><span class="cl">domain:gvt1.com
</span></span><span class="line"><span class="cl">domain:googleapis.cn
</span></span><span class="line"><span class="cl">domain:googleusercontent.com
</span></span><span class="line"><span class="cl">geosite:google
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">直连：
</span></span><span class="line"><span class="cl">geosite:cn
</span></span><span class="line"><span class="cl">geoip:cn
</span></span></code></pre></td></tr></table>
</div>
</div><p>注意：<code>services.googleapis.cn</code> 虽然是 <code>.cn</code> 域名，但它是 Google Play 下载入口，不能让它被 <code>geosite:cn</code> 提前命中走直连。</p>
<p>调整后重新测试：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://redirector.gvt1.com
</span></span><span class="line"><span class="cl">curl --socks5-hostname 127.0.0.1:10808 -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span><span class="line"><span class="cl">curl --socks5-hostname 127.0.0.1:10808 -I --connect-timeout <span class="m">10</span> https://redirector.gvt1.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>正常结果：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">services.googleapis.cn   HTTP/2 404
</span></span><span class="line"><span class="cl">redirector.gvt1.com      HTTP/2 404
</span></span></code></pre></td></tr></table>
</div>
</div><p>出现 404 没关系，说明 TLS/HTTPS 已经通了。</p>
<p>最后强停 Play 商店和下载管理器，再重新下载：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;am force-stop com.android.vending; am force-stop com.android.providers.downloads; am force-stop com.google.android.gms&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后打开 Google Play，取消旧的等待任务，重新点安装。</p>
<h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><p>这次问题有三层：</p>
<ol>
<li>下载管理器里曾经残留一个只允许 Wi-Fi 且绑定旧网络的 Play 下载任务，需要删除。</li>
<li>Play 下载服务使用 Cronet，失败时界面会显示“等待中”，日志里实际是 <code>CANNOT_CONNECT (8)</code>。</li>
<li>真正导致下载失败的域名是 <code>services.googleapis.cn</code>，它虽然属于 <code>.cn</code>，但应该走代理，不能被 <code>geosite:cn</code> 规则直连。</li>
</ol>
<p>最有用的几条排查命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">su -c <span class="s1">&#39;content query --uri content://downloads/all_downloads&#39;</span>
</span></span><span class="line"><span class="cl">su -c <span class="s1">&#39;logcat -d -t 3000 | grep -Ei &#34;Finsky|DownloadService|CronetDownloader|CANNOT_CONNECT|ERR_CONNECTION|ERR_QUIC&#34;&#39;</span>
</span></span><span class="line"><span class="cl">curl -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span><span class="line"><span class="cl">curl --socks5-hostname 127.0.0.1:10808 -I --connect-timeout <span class="m">10</span> https://services.googleapis.cn
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果 <code>curl --socks5-hostname 127.0.0.1:10808</code> 都连不上，那就不是 v2rayNG 路由写法的问题，而是节点或服务端出站本身的问题。</p>

        
        <hr><p>本文2026-06-05首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-06-05</p>]]>
      </description>
      
    </item>
    
  </channel>
</rss>
