Play Integrity 判定失败怎么修:PlayIntegrityFix 安装与配置完整指南
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
刚给手机刷完自定义 ROM 或解了 Bootloader 之后,很多应用会突然开始"认不出设备":Play Integrity 判定只剩MEETS_BASIC,MEETS_DEVICE拿不到;依赖设备级校验的银行、支付、流媒体应用直接拒绝启动或提示"设备不受支持"。PlayIntegrityFix 是一个 Zygisk 模块,专门用来修复 Play Integrity(以及旧版 SafetyNet)的设备判定,官方声明支持 Android 8–15。
按本文操作,你可以在十几分钟内完成模块安装、指纹配置,并验证判定结果是否恢复。
先说清楚:它到底在改什么
打个比方:Play 服务会反复盘问设备"你是谁、系统打没打补丁、密钥存在哪儿",PlayIntegrityFix 做的事,就是在盘问发生的那个进程里替设备作答,而不改动系统分区本身。
它具体做了四件事:
- 只在 Google Play 服务进程(
com.google.android.gms.unstable)里生效,其他应用完全不受影响(见 main.cpp 中的进程判断) - 把
android.os.Build里的设备字段改成配置文件里指定的值(如FINGERPRINT、MODEL) - 换掉 AndroidKeyStore 密钥库的 Provider(密钥库可理解为手机里存放加密密钥的"安全保险箱"),并拦截 DroidGuard 的探测调用(CustomKeyStoreSpi.java)
- 在开机阶段修正一批"泄底"的启动属性,例如让
ro.boot.veritymode显示为enforcing、把 recovery 模式属性清成unknown(逻辑在 post-fs-data.sh 与 service.sh)
先泼一盆冷水(来自 README.md 的警告):Google 已经移除了 Android 13 及以上的旧版校验,Android 13+ 想拿到 Device 级判定,必须配合 TrickyStore 模块和有效 keybox。Android 12 及以下单用本模块通常就够。如果设备对认证是刚需且你不想折腾,官方建议直接刷回官方 ROM 并锁回 Bootloader。
装前快检:四项不通过先别装
| 检查项 | 命令 | 通过标准 | 不通过怎么办 |
|---|---|---|---|
| 系统版本 | getprop ro.build.version.sdk | 输出 ≥ 26 | 模块 安装脚本 会在 Android 8 以下直接中止,低版本设备放弃 |
| root 环境 | ls -d /data/adb/magisk /data/adb/ksu 2>/dev/null | 至少列出一个目录 | 先完成 Magisk 或 KernelSU 安装 |
| Zygisk 状态 | magisk --sqlite "SELECT value FROM settings WHERE key='zygisk';" | value=1 | 在 Magisk App 设置里开启 Zygisk 并重启;Magisk 缺失时装 ReZygisk 模块 |
| 残留冲突 | ls -d /data/adb/modules/safetynet-fix /data/adb/modules/busybox* 2>/dev/null | 无输出 | safetynet-fix会被安装脚本标记移除;busybox 类模块会导致在线抓取指纹失败,先卸载 |
跑通它:两条路线任选
路线 A:安装官方发行包(多数人走这条)
当前发行版本为v19.1(见 module.prop)。
# 1. 下载 v19.1 的模块 zip(从项目 Release 页面获取,此处不贴地址) # 2. 在 Magisk / KernelSU / APatch App 中:模块 → 本地安装 → 选中该 zip # 3. 重启你会看到:安装过程在模块管理界面完成,不要用 recovery 刷——customize.sh 明确拒绝 recovery 安装。重启后进入下一步抓指纹。
路线 B:从源码构建(想改代码或跟最新提交才需要)
# 需要 JDK 17 + Android SDK,首次运行会下载 Gradle,预留 10 分钟和 2GB 以上内存 git clone https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix cd PlayIntegrityFix ./gradlew assembleRelease构建产物在app/build/outputs/apk/release/。注意:模块 zip 由项目构建流水线打包,源码仓库本身只含模块文件(module/目录)与 Java/Kotlin 源码(app/src/),本地assembleRelease的 APK 适合做注入代码的定制替换,普通用户直接用路线 A 即可。
统一验证:装完先跑这两条
[ -d /data/adb/modules/playintegrityfix ] && grep "^version=" /data/adb/modules/playintegrityfix/module.prop # 预期:version=v19.1(或你安装的版本) ls /data/adb/pif.json # 预期:文件存在,内容为 JSON;没有就先按下一节生成应用层再打开任意 Play Integrity 检测工具查看判定:目标状态是MEETS_DEVICE以上,MEETS_STRONG视 keybox 与 TrickyStore 配置而定。
指纹怎么选、配置改哪里
模块默认自动抓取最新的 Pixel Beta 指纹:[action.sh](https://link.gitcode.com/i/280738fa34575239fb0aec296bf3addf)会读取 Google 开发者站点当前版本页,从 OTA 元数据里提取FINGERPRINT和SECURITY_PATCH,写好后杀掉gms.unstable进程使其立即生效。模块管理界面(web UI)里有"Fetch pif.json"按钮,一键执行;旁边的开关可在 Beta / Developer Preview 指纹间切换。
按设备情况选方向:
| 设备 / 系统情况 | 推荐指纹方向 | 关键参数 |
|---|---|---|
| Pixel 或其他 GMS 认证设备 | 保留官方 Pixel 指纹,用 Fetch 功能保持新鲜 | FINGERPRINT+SECURITY_PATCH必须是同一版本配对 |
| 第三方设备,Android 12 及以下 | 仓库默认 Pixel 6 指纹即可(pif.json) | FINGERPRINT、MANUFACTURER、MODEL、SECURITY_PATCH四字段 |
| 第三方设备,Android 13+ | 最新 Pixel Beta 指纹 + 安装 TrickyStore | 在上一行基础上,另需有效 keybox |
| 国产 ROM(OnePlus/Oppo/Realme/小米等) | 同样用 Pixel 指纹;开机属性修正交给模块脚本 | 无需额外BRAND/DEVICE字段,见下方说明 |
不要照抄来路不明的"高仿配置"。
FINGERPRINT必须与SECURITY_PATCH匹配同一个正式版,日期越旧判定越容易被降级。
模块内置的 pif.json 就是一份最小可用示例:
{ "FINGERPRINT": "google/oriole_beta/oriole:16/BP22.250325.012/13467521:user/release-keys", "MANUFACTURER": "Google", "MODEL": "Pixel 6", "SECURITY_PATCH": "2025-04-05" }FINGERPRINT会被自动拆解为BRAND/PRODUCT/DEVICE/RELEASE/ID等 8 个字段(拆解逻辑见 main.cpp),所以不需要手动再写BRAND、DEVICE这些字段。文件里还支持几个可选开关:spoofProvider(是否替换密钥库 Provider,TrickyStore 在场时会自动关闭)、spoofProps(是否伪装系统属性)、spoofSignature(测试签名 ROM 才需要)、DEBUG。
修改配置的 4 步操作:
- 用 root 权限编辑
/data/adb/pif.json——这是优先级最高的配置文件,会覆盖模块目录内的 pif.json 和custom.pif.json; - 保存后确认是合法 JSON(字段名区分大小写),
ls -l /data/adb/pif.json确认为644权限; - 模块管理界面点Fetch pif.json,或直接执行
sh /data/adb/modules/playintegrityfix/action.sh,让它写入新指纹并自动杀掉 Play 进程(你会看到日志逐行打印选取的机型和new pif.json saved to /data/adb/pif.json); - 打开检测工具复测判定,未变化时确认第 2 步的 JSON 无误并重启一次。
出问题了先查这张表
| 现象 | 先查什么 | 处置 |
|---|---|---|
只有MEETS_BASIC,拿不到 Device 判定 | Android 版本是否 ≥ 13(getprop ro.build.version.release) | 安装 TrickyStore 并导入有效 keybox,同时刷新指纹日期 |
| 模块目录在但完全不生效 | Zygisk 是否开启;是否从 recovery 装的 | Magisk 设置里开 Zygisk 重启;卸载后从 App 内重装 |
| 抓取指纹失败,提示网络或 busybox 错误 | 是否装了 busybox 类模块 | 卸载 busybox 类模块后重新 Fetch(安装时也会提示 conflict) |
| 改了指纹没变化 | 是否写对文件:/data/adb/pif.json才覆盖模块内配置 | 确认路径与 JSON 语法,重跑 action.sh 或重启 |
| 判定时好时坏 | 指纹日期是否过旧 | 用 Fetch 重新抓取当前 Pixel 版本,检查SECURITY_PATCH与指纹版本一致 |
收尾:五条维护约定
- 指纹要保鲜:Google 收紧旧安全补丁日期,建议每次大版本更新后点一次 Fetch;具体看 changelog.md。
- 更新模块前先备份:
cp /data/adb/pif.json /sdcard/pif.json.bak;覆盖安装时模块会自动把旧文件挪到/data/adb/pif.json.old(见 customize.sh)。 - 别手动把 Play 服务加进 DenyList:模块启动脚本已经按 Shamiko 是否在场自动处理过屏蔽名单(post-fs-data.sh),手动加反而会让模块注入失败。
- 只留一套指纹方案:
safetynet-fix、MagiskHidePropsConf 之类旧模块与本模块冲突,装前清干净。 - 边界与合规:
篡改设备身份可能触发金融、支付类应用的风控限制,root 与解锁 Bootloader 本身通常使设备失去保修。请确认所在司法辖区法规及应用服务条款允许此类操作,并在折腾前用 TWRP/Magisk 做好完整备份。
【免费下载链接】PlayIntegrityFixFix Play Integrity (and SafetyNet) verdicts.项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考