You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bubblewrap构建TWA应用配置intent-filter跳转Activity闪退问题

问题原因

你配置的intent-filter基础语法没有错误,点击链接后应用直接终止是Bubblewrap构建TWA应用的特殊运行机制导致的:

  • TWA的主入口是Bubblewrap自动注入的可信网页启动Activity,默认接管所有应用内导航事件。当Web内容点击非http/https的自定义scheme链接时,TWA的Chrome运行时会先尝试销毁当前TWA会话,再解析跳转目标。如果你的自定义Activity和TWA主Activity共用任务栈,销毁会话的操作会直接回收整个应用进程,表现为点击后应用直接关闭。
  • TWA默认开启可信来源校验,没有加入白名单的自定义scheme导航会被运行时直接拦截触发崩溃。
  • 如果你是直接修改构建输出目录下的AndroidManifest.xml,Bubblewrap每次构建都会重写该文件,你添加的Activity配置可能被覆盖,或是和自动生成的主Activity intent-filter产生冲突。
修复方案

按以下步骤调整即可:

    1. 在Bubblewrap项目根目录的twa-manifest.json中添加自定义scheme白名单,同时声明自定义Activity,避免配置被构建流程覆盖:
{
  // 其余原有配置保持不变
  "additionalTrustedOrigins": ["my-app://open-activity"],
  "activities": [
    {
      "name": ".TestActivity",
      "exported": true
    }
  ]
}
    1. 在源码目录下的自定义AndroidManifest.xml(注意是你自己维护的app/src/main/AndroidManifest.xml,不是build输出目录下的自动生成文件)中,给TestActivity配置独立任务栈属性,避免和TWA主Activity共用栈导致进程被回收,完整配置如下:
<activity
    android:name=".TestActivity"
    android:exported="true"
    android:taskAffinity="${applicationId}.testactivity"
    android:launchMode="singleTask">
    <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:host="open-activity"
            android:scheme="my-app" />
    </intent-filter>
</activity>

Bubblewrap构建时会自动合并源码目录下的Manifest配置,不会被重写覆盖。

    1. 兼容Android 12及以上版本的intent解析规则,在TestActivity的onCreate生命周期中添加异常兜底逻辑,避免非法intent触发崩溃:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val targetUri = intent?.data
    if (targetUri != null 
        && targetUri.scheme == "my-app" 
        && targetUri.host == "open-activity") {
        // 在此处编写TestActivity的业务逻辑
    } else {
        // 异常跳转兜底,直接返回应用主页面
        val launchIntent = packageManager.getLaunchIntentForPackage(packageName)
        startActivity(launchIntent)
        finish()
    }
}
    1. 清理之前的构建缓存,重新执行bubblewrap build生成新的安装包,覆盖安装即可。

可以先通过adb命令验证清单配置是否生效,排除前端链接写法问题:
adb shell am start -a android.intent.action.VIEW -d "my-app://open-activity" 替换为你的应用包名
执行命令后如果能正常拉起TestActivity,说明原生配置已经生效,再回到Web页面点击链接测试即可。

内容的提问来源于stack exchange,提问作者Mohammad Zare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:21:19