具有多种风格的导航组件

NavigationComponent with multiple flavors

我在我的应用程序中使用 NavigationComponent,现在我面临以下问题:

我有 2 种不同的口味(免费版和付费版),它们使用位于主包中的相同 navigation.xml。当我想 运行 例如付费变体失败,生成的方向文件中出现这些错误:

e: AndroidStudioProjects/foo/app/build/generated/source/navigation-args/paid/debug/de/dk/fc/ui/knowledge/KnowledgeFragmentDirections.kt: (5, 24): Unresolved reference: paid

e: AndroidStudioProjects/foo/app/build/generated/source/navigation-args/paid/debug/de/dk/fc/ui/knowledge/KnowledgeFragmentDirections.kt: (14, 41): Unresolved reference: R

这是我的 navigation.xml

的片段
<fragment
        android:id="@+id/fragment_knowledge"
        android:name="de.dk.fc.ui.knowledge.KnowledgeFragment"
        tools:layout="@layout/fragment_knowledge">

        <action
            android:id="@+id/action_fragmentKnowledge_to_fragmentInfo"
            app:destination="@id/fragment_info" />

    </fragment>

我还将这些代码行添加到我的 build.gradle 文件中:

 sourceSets {
        getByName("main").java.srcDirs("build/generated/source/navigation-args")
    }

我尝试过的:

你有什么办法解决这个问题吗?

在出现此错误之前,您是否升级到 Android Gradle 插件版本 7.2.0 和 运行 推荐的版本? 其中之一是将包名称从 Android 清单文件移动到构建文件。

当项目中有不同的 applicationIds 时,这个变化似乎会导致导航组件出现问题(因为你可能有不同的风格)。

只需将包名称放回到清单文件中,它就会再次起作用。 这应该至少暂时修复它,直到导航组件可以处理更改。

如果您正在使用 multi-modular 项目,我建议您为每个需要的 feature/module 创建一个单独的导航图,如此处所示 MAD Skills navigation between modules.

在你的主包导航图中使用标签 <include app:graph="@navigation/graph_name"/> 包含来自不同模块的图表

即使您已将包名称从清单移动到构建文件,它也应该可以工作