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

Android Studio3.5与Navigation2.1.0中<nav-graph>在presentation模块Manifest报错

问题分析与解决方案

核心原因

你遇到的问题本质是Navigation Components的<nav-graph>标签仅支持在Application类型模块(即使用com.android.application插件的模块)的AndroidManifest.xml中使用,而你的presentation模块属于Library类型模块(使用com.android.library插件),Library模块的AAPT工具无法识别这个标签,因此触发资源链接错误。

另外,移除<nav-graph>后能正常启动,是因为当你在Library模块中定义Launcher Activity时,App模块会合并这个Manifest配置,但带有<nav-graph>的Activity配置因为Library插件不处理该标签,导致合并后的Manifest存在无效元素,系统无法识别正确的启动Activity,从而抛出"Default Activity not found"错误。

具体解释

  1. 插件功能差异:

    • com.android.application插件包含了处理Navigation Components相关Manifest标签的逻辑,能解析<nav-graph>并关联导航图资源。
    • com.android.library插件的职责是构建可复用的库,它不支持Application模块特有的Manifest扩展标签(包括<nav-graph>),所以AAPT会把这个标签判定为非法元素。
  2. Manifest合并机制:
    你的app模块依赖presentation模块,构建时会合并所有依赖模块的Manifest。但Library模块中的无效标签(<nav-graph>)不会被App模块的插件修正,反而会保留在合并后的Manifest中,导致系统无法正确识别启动Activity的配置。

解决方案

你有两种可行的修复方式:

  • 方案1:将<nav-graph>移到App模块的Manifest中
    在app模块的AndroidManifest.xml里,覆盖presentation模块的HomeActivity配置,添加<nav-graph>标签:

    <activity android:name="com.your.package.feature.base.view.HomeActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <nav-graph android:value="@navigation/navigation_login" />
    </activity>
    

    同时,记得移除presentation模块Manifest中对应的<nav-graph>标签。

  • 方案2:在代码中动态关联导航图
    如果不想修改Manifest,可以在HomeActivity的代码中手动设置导航图,替代Manifest中的<nav-graph>配置:

    // HomeActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_home)
        val navController = findNavController(R.id.nav_host_fragment)
        navController.setGraph(R.navigation.navigation_login)
    }
    

    这种方式不受模块类型限制,在Library模块中也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:29:33