Android App Links在Google Play版本失效,本地构建正常求助
看起来你已经做了不少扎实的基础排查——添加了Google签名的SHA256到assetlinks.json、验证了指纹匹配、官方工具测试也显示成功,但线上版本还是卡壳了。我建议你从以下几个方向再深入试试:
重新确认assetlinks.json的部署细节
虽然工具测试显示成功,但还是要抠细节:- 确保文件确实部署在域名的
/.well-known/assetlinks.json路径下,没有拼写错误(比如把well-known写成wellknow) - 用JSON校验工具检查返回的内容,确保格式完全合规——没有多余的逗号、引号配对正确,这很容易被忽略
- 在出问题的设备上用浏览器直接打开该URL,确认能加载到正确内容,且HTTPS证书没有警告(比如证书过期、不被系统信任)
- 强制刷新CDN或浏览器缓存:有时候旧的assetlinks.json会被缓存,导致系统拿不到最新版本
- 确保文件确实部署在域名的
核对AndroidManifest的App Links配置
确保你的配置没有遗漏关键点: - 必须包含
android:autoVerify="true"属性,这是触发系统自动验证的核心 - 包含必要的action和category:
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> - 标签的scheme、host、pathPattern要完全匹配你的链接格式,比如针对
https://letsdraw.fun/ec?parent=...,要确保path规则覆盖了/ec路径 - 对于Android 12及以上版本,承载这个intent-filter的Activity必须明确设置
android:exported="true",否则系统会忽略该配置
- 必须包含
检查设备上的App Links验证状态
用更详细的命令查看具体验证信息,比domain-preferred-apps更直观:adb shell pm get-app-links com.scribble.exquisitecorpse这个命令会显示每个关联域名的验证状态(比如
verified或unverified)、验证时间等。如果显示未验证,说明设备在尝试拉取assetlinks.json时遇到了问题——可能是设备网络无法访问你的域名,或者验证请求被防火墙/代理拦截了。排查构建和混淆差异
本地构建和Google Play版本可能存在隐性差异:- 检查ProGuard/R8混淆规则,确保没有移除App Links相关的Manifest配置或类。可以添加以下规则避免意外混淆:
-keep class android.intent.** { *; } -keepattributes *Annotation* -keepattributes Signature - 确认release构建的gradle配置中,没有禁用App Links相关的功能,比如是否开启了
minifyEnabled但没配置对应的保留规则
- 检查ProGuard/R8混淆规则,确保没有移除App Links相关的Manifest配置或类。可以添加以下规则避免意外混淆:
清除设备的App Links偏好缓存
系统可能缓存了旧的验证结果,导致即使assetlinks.json正确,也不会触发重新验证:- 进入设备设置 → 应用 → 找到你的应用 → 打开方式 → 清除默认设置
- 重启设备后,再次点击测试链接,看是否会触发系统重新验证assetlinks.json
检查是否存在域名冲突
虽然本地版本正常,但线上环境可能有其他应用也注册了相同的域名。可以用以下命令查看所有注册该域名的应用:adb shell dumpsys package | grep -A 10 -B 5 "letsdraw.fun"如果有其他应用也声明了该域名的intent-filter,可能会导致系统弹出选择框,不过这种情况通常本地也会出现问题,但还是可以排查确认
另外,既然你已经提交了Google的Bug,也可以在Bug里补充更多细节,比如pm get-app-links的输出结果、设备的Android版本、Google Play服务版本等,帮助Google更快定位问题。
内容的提问来源于stack exchange,提问作者Will Calderwood

