<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://nook001.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://nook001.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-10-31T20:00:03+00:00</updated><id>https://nook001.github.io/feed.xml</id><title type="html">Nook</title><subtitle>Personal website and technical notes by Nook.</subtitle><entry xml:lang="zh-CN"><title type="html">国行机连不上 Pixel Watch？我用安卓模拟器解决了配对问题</title><link href="https://nook001.github.io/blog/2026/10/27/pixel-watch-pairing-china/" rel="alternate" type="text/html" title="国行机连不上 Pixel Watch？我用安卓模拟器解决了配对问题" /><published>2026-10-27T00:00:00+00:00</published><updated>2026-10-27T00:00:00+00:00</updated><id>https://nook001.github.io/blog/2026/10/27/pixel-watch-pairing-china</id><content type="html" xml:base="https://nook001.github.io/blog/2026/10/27/pixel-watch-pairing-china/"><![CDATA[<h2 id="前言">前言</h2>

<p>买了一块 Google Pixel Watch，却发现自己的国行 Android 手机根本无法完成配对，怎么办？</p>

<p>这不是简单的蓝牙连接问题。对于 Pixel Watch 而言，配对还涉及设备初始化、账户关联与相关服务启用。如果无法完成配对，即使手表能够连上手机蓝牙，也无法正常使用。</p>

<p>更麻烦的是，这不是简单的锁IP，不是挂VPN可以解决的。以我的国行 vivo X300 Pro 为例，即使配置好了 Google 服务与网络，Pixel Watch App 仍然无法完成配对。</p>

<p>为了弄清原因，我反编译了 Pixel Watch App，并分析了底层服务的日志和代码，发现两个主要障碍：
<strong>应用/系统层的兼容性问题</strong> 和 <strong>服务端的校验限制</strong></p>

<p>一种直观的办法是买一台二手非国行 Android 手机配对，但成本显然太高了。</p>

<p><strong>既然问题出在国行 Android 的系统环境上，那么我们能不能直接构建一套国际版 Android 环境来完成配对？</strong></p>

<p>沿着这个思路，我最终找到了一种利用 <strong>Android Emulator（安卓模拟器）</strong> 的方案：让 Emulator 模拟手机完成手表配对，并通过电脑的实体蓝牙控制器与真实手表通信。</p>

<p>最终，我成功实现 Pixel Watch 完美配对，并建立了 Wearable 服务连接与数据通信，启用了手表的全量功能。</p>

<p>本文将介绍整个问题的定位与解决过程，包括：</p>

<ol>
  <li><strong>为什么国行 Android 手机无法完成 Pixel Watch 配对？</strong> 从应用和底层服务入手，分析导致失败的原因。</li>
  <li><strong>为什么 Android Emulator 能够解决这个问题？</strong> 介绍替代 Android 环境的思路与原理。</li>
  <li><strong>如何实际完成配对？</strong> 提供环境配置、实现代码和操作步骤。</li>
</ol>

<p>如果你也遇到了 Pixel Watch 在国行手机上无法配对的问题，希望这篇文章能帮助你省下一台额外手机的钱，也少走一些弯路。</p>

<hr />

<h2 id="1-为什么国行手机无法配对">1. 为什么国行手机无法配对？</h2>

<p>为了确定配对失败的原因，我先使用 ADB 和 Logcat 分析 Pixel Watch App 的初始化过程，再通过 JADX 反编译应用，追踪相关逻辑。</p>

<p>实验设备为国行 vivo X300 Pro，Pixel Watch App 版本为 <code class="language-plaintext highlighter-rouge">5.0+</code>，Google Play services 为 <code class="language-plaintext highlighter-rouge">26.33</code>。</p>

<p>调查过程中，我发现了两个相互独立的问题。</p>

<h3 id="11-pixel-watch-app-初始化异常">1.1 Pixel Watch App 初始化异常</h3>

<p>最初，在 Pixel Watch App 的日志中发现了这样一条异常：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npv: Unsupported step zpe
    at oka.h(PG:1516)
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">zpe</code> 是混淆后的类名，仅凭异常信息无法判断发生了什么。</p>

<p>通过反编译并追踪相关调用，我发现这个类对应的是配对初始化过程中的 <code class="language-plaintext highlighter-rouge">CHINA_PERSISTENT_SERVICE</code> 步骤。</p>

<p>这一流程由系统配置和已安装应用共同决定。</p>

<p>检查手机的 <code class="language-plaintext highlighter-rouge">/product/etc/sysconfig/cn_feature.xml</code>，可以看到：</p>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;config&gt;</span>
    <span class="nt">&lt;feature</span> <span class="na">name=</span><span class="s">"cn.google.services"</span> <span class="nt">/&gt;</span>
    <span class="nt">&lt;feature</span> <span class="na">name=</span><span class="s">"com.google.android.feature.services_updater"</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;/config&gt;</span>
</code></pre></div></div>

<p>这两个 Feature 是国行系统环境的特征。其中，<code class="language-plaintext highlighter-rouge">com.google.android.feature.services_updater</code> 会影响 Pixel Watch App 对初始化流程的选择。</p>

<p>进一步分析后发现，Pixel Watch App 还会检查中国版 Wear OS 应用的版本；测试手机满足了相关条件。</p>

<p>结合反编译结果，可以将失败过程简化为：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>检查系统 Feature 和 Wear OS 应用版本
                 ↓
     选择中国版初始化流程
                 ↓
       CHINA_PERSISTENT_SERVICE
                 ↓
        构造 zpe 初始化步骤
                 ↓
     Pixel Watch UI 无法处理该步骤
                 ↓
         Unsupported step zpe
</code></pre></div></div>

<p>也就是说，Pixel Watch App 在当前环境下选择了特殊的初始化路径，但后续 UI 未正确处理对应步骤，最终导致配对中断。</p>

<p>这也解释了为什么修改系统语言、地区设置，甚至确保 Google Play services 正常，都不能解决这个问题。</p>

<p><strong>问题并不只是设备位于中国大陆，而是国行 ROM 提供的系统 Feature 和应用环境触发了不同的初始化逻辑。</strong></p>

<h3 id="12-app-之外的限制">1.2 App 之外的限制</h3>

<p>既然找到了初始化异常的判断条件，一个直观的想法就是：修改 Pixel Watch App，使其跳过中国版初始化流程。</p>

<p>为了验证这一思路，我使用 Apktool 修改了两个判断函数，并重新构建、签名和安装实验 APK。</p>

<p>修改确实产生了效果。</p>

<p>原本的异常步骤不再阻止流程继续，日志中出现了：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>WatchPairingSetupStep(
    available=false,
    status=Success
)
</code></pre></div></div>

<p>这说明我们已经越过了之前的应用层障碍。</p>

<p>然而，后续的连接初始化依然失败，并出现了新的错误：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GoogleCertificatesRslt:
not allowed:
pkg=com.google.android.apps.wear.companion
</code></pre></div></div>

<p>以及：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Wearable Services not starting.
Wear is not available on this device:
UNSUPPORTED_PLATFORM
</code></pre></div></div>

<p>这里暴露出两个限制。</p>

<p><strong>首先，修改后的 APK 无法直接继承原始应用的可信身份。</strong> 重新签名的应用受到了 Google 服务的身份校验限制。</p>

<p><strong>其次，Google Play services 自身也会检查设备的平台环境。</strong> 即使 Pixel Watch App 能继续执行，也不代表 Wearable 服务允许在当前设备上运行。</p>

<p>为了确认第二个问题，我继续分析了 Google Play services 的 DEX 代码。</p>

<p>在本次测试的 GMS 版本中，<code class="language-plaintext highlighter-rouge">gmlx.d(Context)</code> 包含一组平台检查条件：</p>

<ul>
  <li>系统声明 <code class="language-plaintext highlighter-rouge">com.google.android.feature.services_updater</code>；</li>
  <li>系统声明 <code class="language-plaintext highlighter-rouge">cn.google.services</code>；</li>
  <li>当前 Context 属于 <code class="language-plaintext highlighter-rouge">com.google.android.gms</code>。</li>
</ul>

<p>这些条件同时满足时，该函数返回 <code class="language-plaintext highlighter-rouge">false</code>，随后被映射为 <code class="language-plaintext highlighter-rouge">UNSUPPORTED_PLATFORM</code>，使 Wearable 服务无法启动。</p>

<p>这意味着，即使绕过 Pixel Watch App 的初始化判断，Google Play services 仍可能拒绝启动 Wearable 服务。</p>

<p>因此，<strong>仅修改 Pixel Watch App 并不足以解决整个配对问题。</strong></p>

<h3 id="13-问题的本质">1.3 问题的本质</h3>

<p>至此，可以确定本次测试中存在两层独立的障碍：</p>

<table>
  <thead>
    <tr>
      <th>层级</th>
      <th>问题</th>
      <th>实际结果</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Pixel Watch App</td>
      <td>国行系统配置触发无法正确处理的初始化步骤</td>
      <td>配对流程异常中断</td>
    </tr>
    <tr>
      <td>Google Play services</td>
      <td>应用身份校验及设备平台检查</td>
      <td>Wearable 服务无法正常启动</td>
    </tr>
  </tbody>
</table>

<p>它们都不是修改网络或系统语言就能消除的问题。</p>

<hr />

<h2 id="2-android-模拟器方案">2. Android 模拟器方案</h2>

<h3 id="21-搭建系统环境">2.1 搭建系统环境</h3>

<p>既然问题来自国行ROM系统环境，那么是否真的有必要继续修改这台手机？</p>

<p><strong>如果能够提供另一套正常运行 Google 服务的 Android 系统，让它代替国行手机完成配对，就有机会避开这些限制。</strong></p>

<p>Android Emulator 可以提供国际版ROM和服务组件。因此，我们可以利用带有 Google Play 的 Android 系统镜像，构建一个国际版的软件环境。</p>

<p>不过，并非所有系统镜像都适合 Pixel Watch 配对。我们需要选择官方提供的使用正式发布密钥签名的系统镜像，并确保 Google 账号能够正常登录。</p>

<p>在实验中，我最初使用的 Android 17 开发版镜像就存在认证及登录问题。因此推荐选择稳定版本的 Android 15 Google Play 镜像。</p>

<p>这样，我们便能在不修改原始手机 ROM 的情况下，构建一套完整的配对环境。</p>

<h3 id="22-蓝牙硬件桥接">2.2 蓝牙硬件桥接</h3>

<p>软件/系统层的问题解决了，不过，这里还有一个关键问题：</p>

<p><strong>Android Emulator 如何与真实的 Pixel Watch 进行蓝牙通信？</strong></p>

<p>Android 通过 HCI（Host Controller Interface）与蓝牙控制器通信。</p>

<p>如果将模拟器的 HCI 数据流转发给真实蓝牙硬件，就可以实现物理蓝牙与 Pixel Watch 配对、通信。</p>

<p>这里使用的是 Google 开源的 <a href="https://github.com/google/bumble">Bumble</a> 项目。</p>

<p>Bumble 提供了连接不同 HCI Transport 的桥接程序。</p>

<p>利用 <code class="language-plaintext highlighter-rouge">hci_bridge</code>，我们可以将模拟器蓝牙端点与电脑的 USB 蓝牙控制器连接。</p>

<p>最终，整个系统的通信关系如下：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Windows Host
│
├── Android Emulator (Android 15)
│   ├── Pixel Watch App
│   ├── Google Play services
│   └── Android Bluetooth Stack
│          │
│          ▼
│     HCI Packet Stream
│          │
│          ▼
├── Bumble HCI Bridge
│          │
│          ▼
├── Physical Bluetooth Controller
│          │
│          ▼
└── Google Pixel Watch
</code></pre></div></div>

<p>在这个架构中，模拟器运行 Pixel Watch App 和相关服务，而 Bumble 负责将蓝牙通信传给物理控制器。</p>

<p>因此，这并不是简单地从电脑上扫描到一只蓝牙手表，也不是模拟 Pixel Watch 的行为。</p>

<p><strong>我们真正做的是让 Android Emulator 成为手表的配对主机，由它执行完整的初始化流程。</strong></p>

<p>这样，原本需要一台非国行 Android 手机才能完成的操作，就有机会在现有电脑上实现。</p>

<h3 id="23-网络环境">2.3 网络环境</h3>

<p>当然，蓝牙通信只是其中一部分。</p>

<p>Pixel Watch 初始化还需要与 Google Play services 和网络服务交互，因此模拟器必须正常联网。</p>

<p>在实际实现中，我将这两部分通信分开处理：</p>

<ul>
  <li><strong>蓝牙通信</strong>：通过 Bumble HCI Bridge，使用电脑的实体蓝牙控制器。</li>
  <li><strong>网络通信</strong>：通过 Android Emulator 的网络环境，由 Windows 主机提供互联网访问。</li>
</ul>

<p>这里遇到过一个问题：启用蓝牙 Packet Stream 后，模拟器的 Wi-Fi 无法正常工作。</p>

<p>经过排查，我关闭 Emulator 的 Wi-Fi Packet Streaming，让它继续使用 NAT 网络，同时保留蓝牙 HCI 桥接。</p>

<p>对应的关键启动参数是：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-packet-streamer-endpoint localhost:8877
-feature -WiFiPacketStream
</code></pre></div></div>

<p>前者指定模拟器的蓝牙桥接端点，后者关闭 Wi-Fi Packet Streaming。</p>

<p>这样一来，模拟器便能够同时使用真实蓝牙硬件和宿主机提供的网络连接。</p>

<h3 id="24-配对结果">2.4 配对结果</h3>

<p>在这套环境下，我成功走完了 Pixel Watch 的初始化流程。在保存的设置日志中，可以看到最终的 <code class="language-plaintext highlighter-rouge">ExitSetupStep</code> 和 <code class="language-plaintext highlighter-rouge">FINISHED</code> 状态。</p>

<p>我多次验证了蓝牙初始化、模拟器网络及 Pixel Watch 的 Wearable 服务连接。</p>

<p>例如，实际的服务状态中可以看到：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 connected out of 1
Status: CONNECTED
Last read was 00:01s ago
</code></pre></div></div>

<p>这表明我们获得的不只是底层蓝牙连接，还包括 Wearable 服务层的正常连接和数据活动。</p>

<p>至此，原先在国行手机上失败的初始化配对，已通过另一套 Android 环境完成。</p>

<p>不过需要强调的是，另外，蓝牙硬件要独占给桥接程序使用。在我的 Windows 环境中，需要将 Intel 蓝牙驱动切换到 WinUSB，必要时处理固件初始化。</p>

<p>这部分可以通过 PowerShell 脚本管理。</p>

<p>接下来，我会介绍具体如何搭建这套环境、配置蓝牙控制器，并通过 Android Emulator 完成 Pixel Watch 的实际配对。</p>

<hr />

<h2 id="3-配对步骤">3. 配对步骤</h2>

<p>前面介绍了方案原理。接下来搭建环境，让 Android Emulator 通过电脑蓝牙与 Pixel Watch 配对。</p>

<p>整个过程分为三部分：创建 Android 虚拟设备、接入物理蓝牙，以及在模拟器内完成初始化。</p>

<p>以下以 Windows 11 + Intel 蓝牙控制器为例。方案已实测，但其他型号可能需要不同驱动。</p>

<h3 id="31-环境准备">3.1 环境准备</h3>

<p>首先需要支持硬件虚拟化的 Windows 电脑，以及 Bumble 可访问的蓝牙控制器。</p>

<p>本次成功使用的环境如下：</p>

<table>
  <thead>
    <tr>
      <th>组件</th>
      <th>测试环境</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>操作系统</td>
      <td>Windows 11</td>
    </tr>
    <tr>
      <td>Android Emulator</td>
      <td>36.x</td>
    </tr>
    <tr>
      <td>Android 系统镜像</td>
      <td>Android 15 / Google Play / x86_64（官方正式版）</td>
    </tr>
    <tr>
      <td>Python</td>
      <td>3.12+</td>
    </tr>
    <tr>
      <td>Bumble</td>
      <td>已安装</td>
    </tr>
    <tr>
      <td>蓝牙控制器</td>
      <td>Intel BE201，USB <code class="language-plaintext highlighter-rouge">8087:0037</code></td>
    </tr>
    <tr>
      <td>虚拟设备</td>
      <td>4 核 / 4 GB</td>
    </tr>
  </tbody>
</table>

<p>需要特别注意两个条件。</p>

<p><strong>首先，Android 系统镜像必须包含 Google Play。</strong> 本文使用的是 <code class="language-plaintext highlighter-rouge">google_apis_playstore</code> 镜像，而不是普通 AOSP 镜像。</p>

<p><strong>其次，电脑上的蓝牙控制器需要支持底层 USB HCI 访问。</strong> 本次通过 WinUSB 接管 Intel 控制器实现这一点。其他型号不能保证使用完全相同的配置。</p>

<h4 id="安装模拟器">安装模拟器</h4>

<p>最方便的方法是安装 Android Studio，并通过 SDK Manager 安装 Android Emulator 和 Android 15 Google Play 系统镜像。</p>

<p>在 Device Manager 中创建一个新的虚拟设备：</p>

<ul>
  <li>设备：支持 Google Play 的 Pixel 手机。</li>
  <li>系统：Android 15，Google Play，x86_64。</li>
  <li>内存 / CPU：4 GB / 4 核。</li>
</ul>

<p>我使用的 AVD 名称为：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PixelWatch_Android15_Play
</code></pre></div></div>

<p>对应的系统镜像是：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>system-images;android-35;google_apis_playstore;x86_64
</code></pre></div></div>

<p>如果使用其他名称，需要在后面的启动命令中同步替换。</p>

<p>完成创建后，建议先正常启动一次模拟器，确认 Android 系统能够运行、Google Play services 已安装，且模拟器可以访问网络。</p>

<p>之后关闭模拟器，准备配置蓝牙桥接。</p>

<h3 id="32-安装-bumble">3.2 安装 Bumble</h3>

<p>建议为 Bumble 创建独立 Python 环境，避免依赖冲突。</p>

<p>例如，在 PowerShell 中执行：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">py</span><span class="w"> </span><span class="nt">-3</span><span class="o">.</span><span class="nf">12</span><span class="w"> </span><span class="nt">-m</span><span class="w"> </span><span class="nx">venv</span><span class="w"> </span><span class="o">.</span><span class="nf">venv</span><span class="w">

</span><span class="o">.</span><span class="n">\.venv\Scripts\python.exe</span><span class="w"> </span><span class="nt">-m</span><span class="w"> </span><span class="nx">pip</span><span class="w"> </span><span class="nx">install</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="s2">"bumble[android]"</span><span class="w">
</span></code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">[android]</code> 安装模拟器通信所需的 gRPC、Protobuf 等依赖。</p>

<p>安装完成后，可以检查 Bumble 是否成功安装：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">.</span><span class="n">\.venv\Scripts\python.exe</span><span class="w"> </span><span class="nt">-m</span><span class="w"> </span><span class="nx">pip</span><span class="w"> </span><span class="nx">show</span><span class="w"> </span><span class="nx">bumble</span><span class="w">
</span></code></pre></div></div>

<p>本次实验使用 Python 3.12 环境，以上安装方式依据 Bumble 的依赖声明整理。</p>

<h3 id="33-蓝牙驱动">3.3 蓝牙驱动</h3>

<p>这是 Windows 环境下最需要注意的一步。</p>

<p>Windows 默认通过原厂驱动管理蓝牙，而 Bumble 需要访问 USB HCI，因此本次 Intel 控制器需要切换到 WinUSB。</p>

<p>这里可以使用 <a href="https://zadig.akeo.ie/">Zadig</a> 等工具安装 WinUSB 驱动，也可以通过 Windows 驱动安装 API 完成绑定。</p>

<p>但需要提前说明：</p>

<p><strong>切换驱动后，Windows 原生蓝牙功能将暂时无法使用这块控制器。</strong></p>

<p>所以，如果电脑只有一个蓝牙适配器，原来连接的蓝牙鼠标、耳机等设备也可能断开。</p>

<p>修改驱动前，先确认 USB VID/PID 并备份原厂驱动。不要给未知 USB 设备安装 WinUSB。</p>

<h4 id="控制器型号">控制器型号</h4>

<p>可以在设备管理器中查看蓝牙控制器的硬件 ID。</p>

<p>我的控制器对应：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>USB\VID_8087&amp;PID_0037
</code></pre></div></div>

<p>因此，Bumble 后续使用：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>usb:8087:0037
</code></pre></div></div>

<p>作为 USB Transport 地址。</p>

<p>不同蓝牙设备的 VID/PID 可能完全不同，需要根据实际硬件修改。</p>

<h4 id="intel-固件">Intel 固件</h4>

<p>这里还存在一个比较特殊的情况。</p>

<p>测试中，Intel 控制器有时处于 Bootloader 模式。即使已安装 WinUSB，Bumble 仍无法使用。</p>

<p>因此，我增加了一个固件状态检查程序，通过 Bumble 的 Intel Driver 接口读取当前运行模式：</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">bumble</span> <span class="kn">import</span> <span class="n">transport</span>
<span class="kn">from</span> <span class="nn">bumble.host</span> <span class="kn">import</span> <span class="n">Host</span>
<span class="kn">from</span> <span class="nn">bumble.drivers.intel</span> <span class="kn">import</span> <span class="n">Driver</span><span class="p">,</span> <span class="n">ValueType</span><span class="p">,</span> <span class="n">ModeOfOperation</span>

<span class="k">async</span> <span class="k">with</span> <span class="k">await</span> <span class="n">transport</span><span class="p">.</span><span class="n">open_transport</span><span class="p">(</span>
    <span class="s">"usb:8087:0037"</span>
<span class="p">)</span> <span class="k">as</span> <span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sink</span><span class="p">):</span>
    <span class="n">driver</span> <span class="o">=</span> <span class="n">Driver</span><span class="p">(</span><span class="n">Host</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">sink</span><span class="p">))</span>
    <span class="n">info</span> <span class="o">=</span> <span class="k">await</span> <span class="n">driver</span><span class="p">.</span><span class="n">read_device_info</span><span class="p">()</span>

    <span class="n">mode</span> <span class="o">=</span> <span class="n">info</span><span class="p">.</span><span class="n">get</span><span class="p">(</span>
        <span class="n">ValueType</span><span class="p">.</span><span class="n">CURRENT_MODE_OF_OPERATION</span>
    <span class="p">)</span>

    <span class="k">print</span><span class="p">(</span><span class="s">"Firmware mode:"</span><span class="p">,</span> <span class="n">mode</span><span class="p">)</span>

    <span class="k">assert</span> <span class="n">mode</span> <span class="o">==</span> <span class="n">ModeOfOperation</span><span class="p">.</span><span class="n">OPERATIONAL</span>
</code></pre></div></div>

<p>这是实际检查程序的核心逻辑摘录，需要放在异步函数中运行。</p>

<p>如果控制器没有进入 Operational 模式，单纯重启 Bumble 并不能解决问题。</p>

<p>在我的设备上，恢复方法是先切回 Intel 原厂驱动完成固件初始化，再切换到 WinUSB。</p>

<p>为了减少手动操作，我用 PowerShell 脚本管理驱动、固件检查和错误恢复。</p>

<p>相关脚本将在整理脱敏后随本文提供。</p>

<h3 id="34-启动蓝牙桥接">3.4 启动蓝牙桥接</h3>

<p>确认 Bumble 可以访问蓝牙控制器后，就可以启动桥接程序。</p>

<p>打开 PowerShell，执行：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">python</span><span class="w"> </span><span class="nt">-m</span><span class="w"> </span><span class="nx">bumble.apps.hci_bridge</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="s2">"android-netsim:_:8877,mode=controller"</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="s2">"usb:8087:0037"</span><span class="w">
</span></code></pre></div></div>

<p>使用独立 Python 环境时，将 <code class="language-plaintext highlighter-rouge">python</code> 换成对应解释器路径。</p>

<p>这条命令包含两个端点。</p>

<p>第一个端点：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>android-netsim:_:8877,mode=controller
</code></pre></div></div>

<p>负责与 Android Emulator 的蓝牙协议栈交互。</p>

<p>第二个端点：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>usb:8087:0037
</code></pre></div></div>

<p>对应真实的 Intel 蓝牙控制器。</p>

<p>Bumble 会在两个端点之间转发 HCI 数据，使 Android Emulator 能够通过真实蓝牙硬件与手表通信。</p>

<p>不要同时启动多个桥接实例争用同一个控制器。</p>

<p>桥接程序启动后，保持该进程运行，再启动 Android Emulator。</p>

<h3 id="35-启动模拟器">3.5 启动模拟器</h3>

<p>接下来启动刚才创建的虚拟设备。</p>

<p>我实际使用的启动参数如下：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">emulator</span><span class="w"> </span><span class="nt">-avd</span><span class="w"> </span><span class="nx">PixelWatch_Android15_Play</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-port</span><span class="w"> </span><span class="nx">5556</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-timezone</span><span class="w"> </span><span class="nx">Europe/London</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-change-country</span><span class="w"> </span><span class="nx">GB</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-packet-streamer-endpoint</span><span class="w"> </span><span class="nx">localhost:8877</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-feature</span><span class="w"> </span><span class="nt">-WiFiPacketStream</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-no-snapshot</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nt">-no-boot-anim</span><span class="w">
</span></code></pre></div></div>

<p>其中最重要的是两个参数：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-packet-streamer-endpoint localhost:8877
-feature -WiFiPacketStream
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">-packet-streamer-endpoint</code> 指定 Bumble 的蓝牙端点。</p>

<p><code class="language-plaintext highlighter-rouge">-feature -WiFiPacketStream</code> 关闭 Wi-Fi Packet Streaming，保留 NAT 网络。</p>

<p>实验中，缺少后一个参数曾导致蓝牙可用、模拟器网络异常。</p>

<p>加入该参数后，模拟器可以同时通过物理蓝牙控制器与手表通信，并通过 Windows 主机网络访问 Google 服务。</p>

<p>至于：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-timezone Europe/London
-change-country GB
</code></pre></div></div>

<p>它们对应我的测试环境。重点不是修改地区，而是在另一套支持 Google Play 的 Android 环境中配对。</p>

<p>如果需要使用其他地区或时区，可以在后续验证中调整这些参数。</p>

<h3 id="36-完成配对">3.6 完成配对</h3>

<p>到这里，我们已经具备了一台运行 Android 15 的虚拟手机，以及一条连接真实蓝牙硬件的通信路径。</p>

<p>接下来在模拟器中使用 Pixel Watch App，按正常流程设置手表。</p>

<p>整个过程中，Pixel Watch Companion 运行在 Android Emulator 内，手表通过电脑的物理蓝牙控制器与之通信。</p>

<p>模拟器使用另一套 Android 镜像，不会继承国行手机中触发配对失败的系统配置。</p>

<p>在初期实验中，开发版 AVD 的初始化日志出现：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ExitSetupStep
FINISHED
</code></pre></div></div>

<p>这说明初始化流程已执行完毕。</p>

<p>后续使用 Android 15 Google Play AVD，也多次验证了 Wearable 服务连接和数据通信。</p>

<p>首次配对的界面操作、账号登录与手表提示，将在整理记录后补充。</p>

<h3 id="37-验证结果">3.7 验证结果</h3>

<p>最后，我们需要确认的不只是蓝牙控制器工作正常，而是 Android 的 Wearable 服务确实建立了与 Pixel Watch 的通信。</p>

<p>首先检查模拟器是否完成启动：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">adb</span><span class="w"> </span><span class="nt">-s</span><span class="w"> </span><span class="nx">emulator-5556</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">getprop</span><span class="w"> </span><span class="nx">sys.boot_completed</span><span class="w">
</span></code></pre></div></div>

<p>正常启动后，应返回：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1
</code></pre></div></div>

<p>随后检查 Bluetooth 状态：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">adb</span><span class="w"> </span><span class="nt">-s</span><span class="w"> </span><span class="nx">emulator-5556</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">dumpsys</span><span class="w"> </span><span class="nx">bluetooth_manager</span><span class="w">
</span></code></pre></div></div>

<p>确认蓝牙处于 ON 状态，并检查是否出现反复崩溃。</p>

<p>再检查 Google Play services 的 Wearable 服务：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">adb</span><span class="w"> </span><span class="nt">-s</span><span class="w"> </span><span class="nx">emulator-5556</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">dumpsys</span><span class="w"> </span><span class="nx">activity</span><span class="w"> </span><span class="nx">service</span><span class="w"> </span><span class="se">`
</span><span class="w">  </span><span class="nx">com.google.android.gms/.wearable.service.WearableService</span><span class="w">
</span></code></pre></div></div>

<p>在成功连接的记录中，可以观察到：</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 connected out of 1
Status: CONNECTED
Last read was 00:01s ago
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">1 connected out of 1</code> 表示 Wearable 节点已连接，<code class="language-plaintext highlighter-rouge">Last read</code> 表示最近有数据活动。</p>

<p>相比 Bluetooth ON 或绑定状态，这些信息更能证明 Wearable 通信已经建立。</p>

<p>首次初始化还需结合 Pixel Watch App 的设置结束状态，不能仅凭 Wearable 连接判断全部步骤成功。</p>

<h3 id="38-自动化脚本">3.8 自动化脚本</h3>

<p>虽然可以分别启动 Bumble 和模拟器，但手动管理 Windows 蓝牙驱动并不方便。</p>

<p>特别是 Intel 控制器可能先要加载固件再切 WinUSB；残留桥接进程也可能造成 USB 冲突。</p>

<p>因此，我最终编写了一个 PowerShell 启动脚本：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">.</span><span class="n">\Start-Android15-Watch.ps1</span><span class="w">
</span></code></pre></div></div>

<p>它负责检查 AVD、控制器和固件，切换驱动，并依次启动 Bumble 与模拟器。</p>

<p>如果控制器需要恢复到 Windows 原厂蓝牙驱动，也准备了对应的恢复脚本：</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">.</span><span class="n">\Initialize-Intel-Bluetooth.ps1</span><span class="w"> </span><span class="nt">-KeepIntelDriver</span><span class="w">
</span></code></pre></div></div>

<p>这些脚本依赖事先准备好的、与硬件匹配的驱动备份，并且可能需要管理员权限。不能直接在不匹配的蓝牙设备上运行。</p>

<p>完整脚本将在公开前整理并脱敏。</p>

<p>至此，我们已经完成了基于 Android Emulator 的 Pixel Watch 配对环境搭建。</p>

<p>后续将补充逐步配对记录、整理后的脚本，以及不同 Android 系统镜像和蓝牙控制器状态下的测试结果。</p>]]></content><author><name></name></author><summary type="html"><![CDATA[从国行 Android 手机的 Pixel Watch 配对失败出发，通过逆向分析定位问题，最终利用 Android Emulator 成功完成初始化配对。]]></summary></entry></feed>