Android Manifest配置异常:App Linking无法跳转至应用
安卓App深度链接跳转失败排查方案
问题背景
已配置好assetlinks.json,iOS端URL跳转功能正常,但安卓端Manifest配置后,链接仍跳转至网页而非App。使用adb命令测试也未唤起App:
adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://myappwebsite.com/joinGroup?group_id=12345"
用户提供的Android Manifest代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myApp.app" xmlns:tools="http://schemas.android.com/tools"> <application android:label="myApp" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" tools:replace="android:name" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <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" /> <data android:scheme="http" /> <data android:host="myappwebsite.com" /> <data android:pathPrefix="/joinGroup"/> </intent-filter> <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" /> <data android:scheme="http" /> <data android:host="myappwebsite.com" /> <data android:pathPrefix="/channel"/> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> </application> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> </manifest>
排查与解决步骤
1. 临时禁用autoVerify测试
android:autoVerify="true"要求assetlinks.json验证完全通过才会触发App跳转,模拟器可能因网络或签名问题无法完成验证。先移除该属性,重新打包安装后用简化的adb命令测试:
adb shell am start -a android.intent.action.VIEW -d "https://myappwebsite.com/joinGroup?group_id=12345"
如果能唤起App,说明问题出在autoVerify的验证环节。
2. 验证assetlinks.json的准确性
- 确认文件路径为
https://myappwebsite.com/.well-known/assetlinks.json,可直接在浏览器访问检查内容。 - 确保文件中
package_name与Manifest的com.myApp.app完全一致(大小写敏感)。 - 检查
sha256_cert_fingerprints是否与当前安装包的签名指纹匹配:- Debug包指纹可通过以下命令获取:
默认密码为keytool -list -v -keystore ~/.android/debug.keystoreandroid,复制输出中的SHA256值。 - Release包需使用对应的签名文件获取指纹。
- Debug包指纹可通过以下命令获取:
3. 调整Intent Filter的配置逻辑
将同一个Intent Filter中的多个<data>标签按scheme分组,避免逻辑歧义:
<intent-filter> <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="myappwebsite.com" android:pathPrefix="/joinGroup"/> <data android:scheme="http" android:host="myappwebsite.com" android:pathPrefix="/joinGroup"/> </intent-filter>
4. 测试浏览器唤起
在模拟器自带浏览器中输入目标链接,观察是否出现"打开应用"的弹窗提示。若没有,说明Intent Filter未被系统识别,需重新检查Manifest的语法和配置。
5. 确认App的exported属性
确保MainActivity的android:exported="true"已正确设置,这是安卓12及以上版本接收外部Intent的必要条件。
内容的提问来源于stack exchange,提问作者Hudson Wolf
相关产品推荐
相关产品推荐

