跳到主要内容
外观
外观设置
显示模式
主题配色

保存在此浏览器,所有页面通用。

小米国行 HyperOS 4 无法使用 Bitwarden 通行密钥:ADB 修复实测

0 次浏览0 次点赞

故障现象与实测结果

我的小米 18 Pro 国行 HyperOS 4 已在系统“密码和账号”中将 Bitwarden 设为首选,Chrome 也选择了“使用其他服务自动填充”,但仍然无法通过 Bitwarden 创建或读取通行密钥。

检查后发现,系统底层的 credential_service 和 credential_service_primary 都没有 Bitwarden。保留原有提供程序、补入 Bitwarden 并设为首选后,我在手机 Chrome 中确认通行密钥创建和登录都成功,修复后重启也已验证通过。系统升级后的情况尚未验证。

方法参考 Reddit 用户 u/Raithlinn 的原帖:[Discussion] Fixing third-party passkey pprooviders on Chinese HyperOS using ADB。原帖测试的是国行 HyperOS 3/Android 16,作者报告修改后有效、重启后配置保留;下面是我在 HyperOS 4 上的实测整理。

测试环境

  • 手机:小米 18 Pro;ADB 型号为 M610BB,device/product 为 hongkong。
  • 系统:国行 HyperOS,完整版本 OS4.0.29.0.XFRCNXM。
  • Android:17,SDK 37。
  • Bitwarden:2026.10.1。
  • Chrome:157.0.8103.38。
  • 操作环境:Windows PowerShell,ADB 路径为 C:\adb\adb.exe。
  • 首次调试记录:2026-11-10;本文仅记录这一台手机的结果。

一、确认连接与系统设置

先按 Bitwarden 官方 Android 指南完成自动填充设置,并检查 Chrome 是否启用了第三方服务。若仍出现本文的通行密钥故障,再检查下面的底层配置。

电脑安装 Android SDK Platform-Tools,手机开启普通“USB 调试”,连接后在手机上授权。以下命令使用 Windows PowerShell,只连接一台待调试设备:

& 'C:\adb\adb.exe' devices -l
& 'C:\adb\adb.exe' shell am get-current-user

本机连接状态为 device,当前 Android 用户为 0。后续命令中的 --user 0均对应这个用户;其他设备应先确认自己的用户编号。

二、读取并备份两项原值

& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service
& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service_primary
& 'C:\adb\adb.exe' shell settings --user 0 list secure | Select-String -Pattern '^credential_service=','^credential_service_primary='

分别保存前两条命令的完整输出,标清对应键名,并与最后一条命令的精确条目核对。两项在其他手机上可能不同,不能只备份其中一项。本机这两项的完整原值恰好相同:

com.google.android.gms/com.google.android.gms.auth.api.credentials.credman.service.PasswordAndPasskeyService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService:com.miui.passwords/com.miui.passwords.credential.provider.XiaomiCredentialProviderService

其中已有 Google 和两项小米服务,却没有 Bitwarden。下面的写入与还原命令是这台手机的记录,其他设备必须按自己的原值调整,保留自己原先启用的提供程序。如果读到 null或空值,先通过列表确认设置是否存在,不套用本机示例,也不要把 null当作待写入的配置。

三、确认 Bitwarden 的服务组件

& 'C:\adb\adb.exe' shell cmd package query-services --user 0 --brief -a android.service.credentials.CredentialProviderService -p com.x8bit.bitwarden
& 'C:\adb\adb.exe' shell dumpsys package com.x8bit.bitwarden | Select-String -Pattern 'CredentialProviderService' -Context 3,3

本机查询确认的组件为:

com.x8bit.bitwarden/.Autofill.CredentialProviderService

它的完整等价写法如下,后面的命令使用这一写法:

com.x8bit.bitwarden/com.x8bit.bitwarden.Autofill.CredentialProviderService

Bitwarden Android 2026.10.1 的应用清单也声明了这一服务。实际安装的版本仍应以本机查询结果为准。

四、开启安全调试,重启后写入

本机只开启普通 USB 调试时,写入被拒绝,错误包含:

SecurityException
android.permission.WRITE_SECURE_SETTINGS

在“设置 → 更多设置 → 开发者选项”开启独立的“USB 调试(安全设置)”后,仅重新连接 ADB 仍然失败。实际成功顺序是:

  1. 开启“USB 调试(安全设置)”。
  2. 重启手机,解锁后重新连接 ADB。
  3. 确认连接为 device,再次核对两项原值及 Bitwarden 服务组件。
  4. 依次写入下面两项设置,每项写入后立即回读核对。

这是本机的成功过程,不能据此认定所有 HyperOS 的同类权限拒绝都能通过重启解决。

第一项保留 Google 和两项小米服务的完整原值,在末尾追加 Bitwarden,历史 contentcatcher条目也保留:

& 'C:\adb\adb.exe' shell settings --user 0 put secure credential_service 'com.google.android.gms/com.google.android.gms.auth.api.credentials.credman.service.PasswordAndPasskeyService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService:com.miui.passwords/com.miui.passwords.credential.provider.XiaomiCredentialProviderService:com.x8bit.bitwarden/com.x8bit.bitwarden.Autofill.CredentialProviderService'
& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service

确认输出与写入值完全一致后,再将 Bitwarden 设为唯一首选:

& 'C:\adb\adb.exe' shell settings --user 0 put secure credential_service_primary 'com.x8bit.bitwarden/com.x8bit.bitwarden.Autofill.CredentialProviderService'
& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service_primary

本机两项均写入成功,并完成精确回读验证。任一写入报错或回读不一致,应停止后续步骤;如果本轮已改动其中一项,按后面的还原方法处理已改动项,避免留下只改了一半的状态。

五、验证创建与登录

  1. 用手机 Chrome 打开 WebAuthn.io。
  2. 输入一个新的测试名称,点击 Register,确认通行密钥保存到 Bitwarden。
  3. 使用相同名称点击 Authenticate,调用刚保存的通行密钥登录。

本次由我在实机上操作并确认,两步均成功。这验证了手机 Chrome 中该测试站点的创建与认证流程;其他网站和原生 App 仍需分别测试。通行密钥功能说明可参考 Bitwarden 官方指南。

成功后已关闭临时开启的“USB 调试(安全设置)”,普通 USB 调试保持开启;再次回读确认两项配置仍为成功配置。后续也已完成修复后的重启验证,结果通过。

需要时如何还原

如果本轮修改失败或需要撤销,先读取两项当前值,仅还原本轮已修改的项。下面是这台手机的还原命令;其他设备必须逐项使用自己备份的原值。还原写入同样需要具备前述安全调试权限:

& 'C:\adb\adb.exe' shell settings --user 0 put secure credential_service_primary 'com.google.android.gms/com.google.android.gms.auth.api.credentials.credman.service.PasswordAndPasskeyService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService:com.miui.passwords/com.miui.passwords.credential.provider.XiaomiCredentialProviderService'
& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service_primary

& 'C:\adb\adb.exe' shell settings --user 0 put secure credential_service 'com.google.android.gms/com.google.android.gms.auth.api.credentials.credman.service.PasswordAndPasskeyService:com.miui.contentcatcher/com.miui.credential.provider.XiaomiCredentialProviderService:com.miui.passwords/com.miui.passwords.credential.provider.XiaomiCredentialProviderService'
& 'C:\adb\adb.exe' shell settings --user 0 get secure credential_service

逐项确认与各自备份一致,完成后关闭临时“USB 调试(安全设置)”。

重启与系统升级的适用范围

本机修复后的重启已验证通过;OTA 或跨版本升级尚未验证。升级后配置可能保留,也可能被系统重新配置。如果通行密钥再次异常,先只读检查这两项设置和服务组件,再决定是否需要重新调整。

Bitwarden 保险库中已同步的通行密钥,与 Android 选择哪个凭据提供程序,是两层不同的状态。系统提供程序设置变化,不能直接等同于保险库中的通行密钥丢失。

方法来源

本文基于个人实机调试记录及后续重启复测整理。方法参考 u/Raithlinn 在 r/HyperOS 发布的 [Discussion] Fixing third-party passkey pprooviders on Chinese HyperOS using ADB,保留原帖标题中的拼写。