Android 14+设备Deep Linking无法触发应用启动问题求助
解决Android 14+局域网URL启动应用问题
问题分析
从adb shell pm get-app-links输出的Domain verification state: hostname: 1024可知,这是域名验证失败的ERROR_NETWORK错误。Android 14对私有网络的安全校验逻辑做了强化,即便assetlinks.json可访问,也会因私有网络权限、验证策略差异导致无法触发应用启动,而低版本无此限制。
修复步骤
1. 配置私有网络访问权限
在res/xml/network_security_config.xml中添加私有网络允许规则:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">hostname</domain> <!-- Android 14+必需,允许私有网络访问 --> <private-network-access allow="true" /> </domain-config> </network-security-config>
在AndroidManifest.xml的<application>标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
2. 校验assetlinks.json签名匹配度
用以下命令获取应用SHA256签名指纹:
keytool -list -v -keystore 你的签名文件.jks -alias 你的签名别名
将输出的SHA256值与assetlinks.json中sha256_cert_fingerprints字段完全比对,确保大小写、空格一致。
3. 强制重置域名验证缓存
执行命令清除旧验证记录并触发重新验证:
adb shell pm clear-domain-verifications --user cur package_name adb shell am set-debug-app -w package_name
重启应用后,通过浏览器访问你的域名链接,触发系统重新校验assetlinks.json。
4. 适配Android 14域名验证规则
- 必须使用可解析的局域网主机名,不能直接用IP地址;确保本地DNS或hosts文件已配置该主机名的解析。
- 检查
assetlinks.json的响应头,确保Content-Type为application/json。
5. 确认Intent Filter配置正确性
AndroidManifest.xml中的Intent Filter需包含android:autoVerify="true":
<intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="hostname" /> </intent-filter>
验证结果
重新执行命令查看验证状态:
adb shell pm get-app-links --user cur package_name
若Domain verification state显示verified,且Selection state为Enabled,则验证成功,URL可正常启动应用。
内容的提问来源于stack exchange,提问作者Pooja Singh
相关产品推荐
相关产品推荐

