在 Linux 桌面环境中运行带有 Google 服务的 Waydroid 时,Google Play 商店可能原本一直正常,某次启动后却突然显示:
This device isn’t Play Protect certified
页面会提示设备没有获得运行 Google 应用和服务的认证,Play 商店也无法继续使用。
这类问题看起来像是整个 Google 服务环境失效,但实际原因往往没有那么严重。一次实际排查表明,网络连接、Google Services Framework ID 和 Google 服务器签到都可能完全正常,真正没有刷新的只是 Google Play services 内部保存的设备认证状态。
一、问题表现
Waydroid 可以正常启动,Android 系统也能够联网,其他应用没有明显异常,但打开 Google Play 商店后会直接跳转到未认证提示页面。
常见误判包括:
- Waydroid 网络再次故障
- Google 账号被封锁
- ARM 应用兼容层损坏
- 整个 Waydroid 数据需要重新初始化
- 关闭 Play Protect 扫描即可解决
实际上,Play Protect 应用扫描和设备认证状态是两套不同的机制。关闭扫描并不能让未认证设备恢复认证。
二、先查询当前 GSF Android ID
Google 为未经过厂商认证的自定义 Android 环境提供了设备 ID 登记页面。Waydroid 需要提交的是 Google Services Framework 数据库中的 android_id。
保持 Waydroid 正在运行,在 Linux 宿主机执行:
sudo waydroid shell -- sh -c \
"sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \
'select value from main where name = \"android_id\";'"
正常情况下会输出一串十进制数字:
1234567890123456789
该数字就是当前 Waydroid 实例使用的 GSF Android ID。
不要把这个 ID 公开发布到博客、论坛或截图中。
三、在 Google 页面登记设备
在宿主机浏览器中登录与 Waydroid 相同的 Google 账号,然后访问 Google 的未认证设备登记页面:
https://www.google.com/android/uncertified/
将查询到的数字 ID 原样提交。
可能出现两种结果:
- 登记成功
- 提示该 ID 已经 registered
如果页面提示已经登记,说明 Google 服务器端已经保存了当前 ID。此时继续重复提交通常没有意义,问题更可能位于 Waydroid 内部的 Google 服务缓存。
四、先尝试完整重启 Waydroid
执行:
waydroid session stop
sudo systemctl restart waydroid-container.service
随后从桌面应用菜单重新启动 Waydroid,等待几分钟,再打开 Google Play 商店。
若仍然出现相同页面,可以先清除 Play 商店自身的数据:
sudo waydroid shell -- am force-stop com.android.vending
sudo waydroid shell -- pm clear com.android.vending
然后再次完整重启 Waydroid。
waydroid session stop
sudo systemctl restart waydroid-container.service
pm clear 成功时会返回:
Success
这一步只会重置 Play 商店本地数据,不会删除普通 Android 应用。
不过,实际排查中仅清除 Play 商店并没有解决问题。
五、通过日志确认问题位置
为了区分网络、设备 ID、Google 签到和认证缓存,可以收集以下信息:
printf '========== 时间 ==========\n'
sudo waydroid shell -- date
printf '\n========== GSF Android ID ==========\n'
sudo waydroid shell -- sh -c \
"sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \
'select value from main where name = \"android_id\";'"
printf '\n========== Google 组件版本 ==========\n'
for pkg in \
com.android.vending \
com.google.android.gms \
com.google.android.gsf
do
echo
echo "[$pkg]"
sudo waydroid shell -- dumpsys package "$pkg" |
grep -m1 -E 'versionName=|versionCode='
done
printf '\n========== 最近相关日志 ==========\n'
sudo waydroid shell -- logcat -d -v time |
grep -iE 'certif|uncertif|checkin|droidguard|attest|vending|gmscore' |
tail -n 250
这次日志中出现了几个关键证据:
Checkin Succeeded
说明 Waydroid 已成功连接 Google 的 Android Check-in 服务,网络链路并没有故障。
Reading existing AID
说明 Google 服务正在继续使用已有的 Android ID,并非设备 ID 丢失。
Integrity key attestation record generated successfully
说明完整性与认证相关流程确实已经运行。
但打开 Play 商店时,系统仍启动了:
com.google.android.gms.gmscompliance.ui.UncertifiedDeviceActivity
同时日志明确提示 Google Play services 的数据并未被清除:
There is GoogleAccountData so GmsCore data probably was not cleared.
由此可以判断:Google 服务器签到正常,GSF ID 也存在并已登记,但 Google Play services 仍保留着旧的“设备未认证”状态。
六、最终修复:清除 Google Play services 认证状态
先记录当前 GSF Android ID:
printf '========== 操作前 GSF Android ID ==========\n'
sudo waydroid shell -- sh -c \
"sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \
'select value from main where name = \"android_id\";'"
然后停止 Google 组件:
sudo waydroid shell -- am force-stop com.android.vending
sudo waydroid shell -- am force-stop com.google.android.gms
清除 Google Play services 数据:
sudo waydroid shell -- pm clear com.google.android.gms
再清除 Play 商店数据:
sudo waydroid shell -- pm clear com.android.vending
最后完整重启 Waydroid:
waydroid session stop
sudo systemctl restart waydroid-container.service
重新启动 Waydroid 后,不要立刻打开 Play 商店。可以先等待三到五分钟,让 Google Play services 完成初始化和服务器同步。
由于 Google Play services 的本地账号状态被清除,系统可能要求重新输入 Google 账号密码。这属于正常现象。
完成重新认证后,Google Play 商店即可恢复正常。
七、不要随意清除 Google Services Framework
排查期间应避免直接执行:
sudo waydroid shell -- pm clear com.google.android.gsf
com.google.android.gsf 是 Google Services Framework。清除它的数据可能导致 gservices.db 被重建,并生成新的 Android ID。
一旦 ID 发生变化,之前在 Google 页面登记的旧 ID 便不再对应当前 Waydroid 实例,需要重新查询并登记。
因此,推荐的处理顺序应是:
- 查询并确认 GSF Android ID。
- 检查 Google 登记页面。
- 重启 Waydroid。
- 清除 Play 商店数据。
- 根据日志判断 Google Play services 是否保存了旧认证状态。
- 清除
com.google.android.gms和com.android.vending。 - 最后才考虑处理 Google Services Framework。
八、日志中的几个非关键警告
排查过程中还可能看到:
Failed to write while dumping service package: Broken pipe
这是因为:
grep -m1
找到第一条结果后提前退出,上游的 dumpsys 继续写入已经关闭的管道所致。它并不表示 Android Package Manager 损坏。
另外还可能看到:
Unable to open ... .dm
Entry not found
这些通常与可选的 dex metadata 或应用优化文件有关,并不是此次设备认证失败的核心原因。
只要 Play 商店可以正常运行,就没有必要单独处理这些警告。
九、原因总结
这次故障的完整状态是:
- Waydroid 网络正常
- Google Check-in 正常
- GSF Android ID 正常存在
- 当前 ID 已在 Google 页面登记
- Play 商店数据已被清除
- Google Play services 仍保留旧的未认证结果
- 清除 Google Play services 和 Play 商店数据后恢复正常
因此,问题并不是整个 Waydroid 环境损坏,也不需要重新初始化容器。
更可能的触发因素是 Google Play 商店或 Google Play services 自动更新后,重新执行了设备合规检查,但本地保存的认证状态没有正确刷新。
十、结论
Waydroid 突然出现 Play Protect 未认证提示时,不应立即重装或清空整个 Android 环境。
最有效的排查思路是:
- 先确认 GSF Android ID;
- 确认该 ID 是否已经登记;
- 通过
Checkin Succeeded判断 Google 网络链路; - 通过
UncertifiedDeviceActivity判断认证页面由哪个组件触发; - 在保留 GSF ID 的前提下,清除 Google Play services 和 Play 商店的数据。
最终修复命令并不复杂,真正重要的是区分三个不同的数据层:
com.android.vending:Google Play 商店com.google.android.gms:Google Play servicescom.google.android.gsf:Google Services Framework
只清除 Play 商店可能不足以刷新认证结果;清除 Google Play services 才是此次恢复正常的关键。