ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

不再踩坑:microG 第三方登录签名校验失败的完整排查链路

不再踩坑:microG 第三方登录签名校验失败的完整排查链路 不再踩坑microG 第三方登录签名校验失败的完整排查链路【免费下载链接】GmsCoreFree implementation of Play Services项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCoremicroGGmsCore是一个自由开源的 Play Services 实现让依赖 Google 服务的应用能在没有 Play Services 的设备上运行。如果你已装好 microG却在微信、QQ 或某款游戏里点使用 Google 登录时总弹授权失败或无法连接到 Google 服务大概率是应用签名校验这条链路的边界情况在作怪本文按链路逐段帮你定位并修复。现场还原一次授权失败弹窗的真实发生过程现象通常很统一应用的登录按钮是亮的点下去弹出账号选择界面说明请求已经打到 microG选完账号几秒后屏幕提示授权失败请重试或者应用直接抛出无法连接到 Google 服务。这时候的第一反应往往是重新输一遍账号、卸载重装应用但方向基本都不对。这一步的关键是排除账号因素如果同一个账号在另一个应用里能正常完成 Google 登录那问题几乎可以肯定不在账号而在授权链路尾部的签名校验环节。仓库里的 fake-signature 模块就是 microG 用来伪造包签名的组件也是这条链路的终点。链路透视签名校验的四步链路哪一环最容易断说白了服务端校验的是客户端这个包的签名。microG 改变不了应用被开发者证书签名的事实但可以借FAKE_PACKAGE_SIGNATURE权限把应用查到的签名信息拦下来换成服务端期望的那份。fake-signature 的 manifest 里既声明了这个权限也挂了数百条签名库条目键是混淆过的包名标识值是两段签名的配对!-- fake-signature/src/main/AndroidManifest.xml伪造权限 签名库条目 -- uses-permission android:nameandroid.permission.FAKE_PACKAGE_SIGNATURE / meta-data android:nameAAAA100 android:valueE5182720425068E4...-5E22451017379222...7673C5 /命中查询后返回哪份证书由 SignatureService.java 决定// SignatureService.java包名已入库返回伪造签名否则返回真实签名 if (useFakeSignature) return new String[]{getString(R.string.fake_signature)}; return new String[]{getString(R.string.real_signature)};两份证书本体存放在 signature.xml 的fake_signature与real_signature里。也就是说最易断裂的一环只有两种可能包名不在库里或者伪造权限没给——下面这份自检清单正好把两者分开。快速自检先判断你属于哪一类检查项操作预期结果异常含义服务组件microG 设置中检查Google 服务框架Google Play 商店全部开启缺项则请求根本没进 microG应先修这层账号状态Google 账号中添加账号并完成一次登录账号正常账号或令牌问题报错文案与签名问题相同易误判伪造权限设备应用管理里确认 microG 已获FAKE_PACKAGE_SIGNATURE已授予严格校验签名的应用会全线失败见下文修复库内登记打开 AndroidManifest.xml 查找目标应用对应的签名配对能找到包名未入库返回默认真实签名校验基本必挂日志确认adb logcat | grep -iE signature看失败原因能抓到具体报错无相关日志 请求未走到签名环节顺带一提自检组件的逻辑在 RomSpoofSignatureChecks.java 里如果 microG 自检界面把签名相关项报缺失那基本就是根因。修复操作设备侧配置先行源码侧最后才动设备侧要做的三件事开启服务组件microG 设置中打开Google 服务框架Google Play 商店Google Play 服务。原因让第三方登录请求有组件可接避免在第一环就断。授予伪造签名权限在设置 → 应用 → microG → 权限里确认FAKE_PACKAGE_SIGNATURE已勾选特权版 microG 内带有申请入口 GrantFakeSignaturePermissionActivity.java。原因没有这个权限签名伪造逻辑整体短路改库也没用。清一次应用缓存再试原因部分应用会缓存旧的签名校验结论权限变更后不清缓存可能继续用旧结论。源码侧要改的两处需源码编译⚠️⚠️ 改源码重新编译会覆盖现有 microG 安装动手前先确认账号与设置状态已可恢复。把包名加入白名单编辑 arrays.xml在signature_want_fake数组里追加目标应用的包名!-- arrays.xml白名单内包名查询时返回伪造签名 -- string-array namesignature_want_fake itemcom.example.target_app/item /string-array原因querySignature先查这张白名单命中才返回伪造签名与服务端期望对得上。补签名配对条目若该应用期望的签名不是默认的 Google 签名就在 AndroidManifest.xml 中按既有meta-data格式为它登记一条伪造签名-真实签名配对。原因两段配对正是决定返回 fake 还是 real 的输入。编译入口在仓库根目录执行./gradlew assemble包装器见 gradlew装回编译出的 APK 后再按设备侧三步走一遍。验证闭环如何确认修好仍失败往哪查✅ 成功的标志应用内完成第三方登录、账号信息回到应用界面且adb logcat中不再出现签名校验相关的错误日志。如果仍然失败按这棵决策树走走完 D 仍失败说明问题已从签名校验转移到应用自身不信任 microG比如硬编码校验 Play Integrity 结果这种在 microG 侧可修空间很小只能等应用方放宽。这个问题的本质是应用签名校验机制的边界情况服务端验的是客户端包签名microG 做的是让这份签名对得上所以排查顺序永远是权限在不在、库里有没有、账号行不行。如果常用应用的签名配对还没进库可以直接在仓库的 Issue 区提交包名与期望签名让后面的人少踩一遍。【免费下载链接】GmsCoreFree implementation of Play Services项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表