这种能力在 Android 中叫做Deep Link深度链接 / 深层链接或者App Links应用链接。核心原理是将一个 HTTP/HTTPS 网址与你的 App 进行关联当用户点击该链接时系统会询问是否打开你的 App并直接跳转至指定页面。下面是完整的实现步骤分为配置阶段和接收阶段。一、核心配置Manifest 配置activity android:name.MainActivity android:exportedtrue !-- Android 12 必须为 true -- !-- 主入口 -- intent-filter action android:nameandroid.intent.action.MAIN / category android:nameandroid.intent.category.LAUNCHER / /intent-filter !-- Deep Link 入口配置 -- intent-filter android:autoVerifytrue !-- 必须指定 Action 和 Category -- action android:nameandroid.intent.action.VIEW / category android:nameandroid.intent.category.DEFAULT / category android:nameandroid.intent.category.BROWSABLE / !-- 核心配置定义关联的网址 -- !-- scheme: 协议 (http/https 或自定义) -- !-- host: 域名 (例如: www.example.com) -- !-- pathPrefix: 路径匹配 (例如: /user/detail) -- data android:schemehttps android:hostcom.example.myapp android:pathPrefix/page / !-- 也可以配置多个 data 标签支持不同链接 -- !-- data android:schemehttps android:hostwww.xxx.com / -- /intent-filter /activity关键参数说明android:scheme协议。必须设置http或https最通用。android:host域名。自定义链接也可以写如myapp://...但https更利于 SEO 和直接跳转。android:pathPrefix路径匹配。只有符合这个路径的链接才会触发。android:autoVerifytrue自动验证Android 6.0。告诉系统去校验你的域名默认直接打开 App 而不弹出选择框。二、服务器端配置关键AssetLinks.json如果你使用的是https链接推荐为了实现“直接跳转不弹出选择框”你必须在服务器上配置一个assetlinks.json文件。生成文件运行命令生成指纹替换为你的包名bash运行adb shell dumpsys package d | grep -A 2 your.package.name或者在 Android Studio 中查看Run App Links Assistant。文件内容格式json[ { relation: [delegate_permission/common.handle_all_urls], target: { namespace: android_app, package_name: com.example.myapp, // 你的App包名 sha256_cert_fingerprints: [你的SHA-256指纹] } } ]上传位置将此文件上传到你的服务器根目录https://www.yourdomain.com/.well-known/assetlinks.json测试地址https://digitalassetlinks.googleapis.com/v1/statements/list?keyYOUR_API_KEYpackage_namecom.example.myapp三、App 内部接收与跳转当用户点击链接打开 App 时数据会通过Intent传递给目标 Activity。你需要在onCreate或onNewIntent中解析数据。Kotlin 示例kotlinclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 处理初始启动的 Intent handleIntent(intent) } // 如果Activity是singleTask模式需要重写此方法 override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { // 1. 获取数据 val data: Uri? intent.data if (data ! null) { // 示例 URL: https://com.example.myapp/page/user/123?nametest val pathSegments data.pathSegments // 获取路径段 [page, user, 123] val param data.getQueryParameter(name) // 获取参数 test // 2. 根据路径跳转不同页面 if (pathSegments.size 2 pathSegments[0] page) { when (pathSegments[1]) { user - { val userId pathSegments.getOrNull(2) // 跳转到用户详情页 startActivity(Intent(this, UserDetailActivity::class.java).apply { putExtra(USER_ID, userId) }) } settings - { // 跳转到设置页 startActivity(Intent(this, SettingsActivity::class.java)) } } } } } }java实例import android.content.Intent; import android.net.Uri; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import java.util.List; public class MainActivity extends AppCompatActivity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 处理启动进来的链接 handleIntent(getIntent()); } // 当 Activity 以 singleTask 模式启动时会走这里 Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } /** * 解析链接并跳转页面 */ private void handleIntent(Intent intent) { Uri data intent.getData(); // 如果是从链接打开的data 不为 null if (data ! null) { // 示例链接https://com.example.myapp/page/user/123?nameZhangSan // 获取路径片段/page/user/123 → [page, user, 123] ListString pathSegments data.getPathSegments(); // 获取参数name → ZhangSan String name data.getQueryParameter(name); // 根据路径判断跳转到哪个页面 if (pathSegments.size() 2 page.equals(pathSegments.get(0))) { String targetPage pathSegments.get(1); switch (targetPage) { case user: // 用户详情页 String userId pathSegments.size() 3 ? pathSegments.get(2) : ; Intent userIntent new Intent(this, UserDetailActivity.class); userIntent.putExtra(USER_ID, userId); startActivity(userIntent); break; case settings: // 设置页 Intent settingsIntent new Intent(this, SettingsActivity.class); startActivity(settingsIntent); break; } } } } }