具有多种风格的导航组件
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")
}
我尝试过的:
- 清理项目
- 使缓存无效
- 每个风味包重复navigation.xml
你有什么办法解决这个问题吗?
在出现此错误之前,您是否升级到 Android Gradle 插件版本 7.2.0 和 运行 推荐的版本?
其中之一是将包名称从 Android 清单文件移动到构建文件。
当项目中有不同的 applicationIds 时,这个变化似乎会导致导航组件出现问题(因为你可能有不同的风格)。
只需将包名称放回到清单文件中,它就会再次起作用。
这应该至少暂时修复它,直到导航组件可以处理更改。
如果您正在使用 multi-modular 项目,我建议您为每个需要的 feature/module 创建一个单独的导航图,如此处所示 MAD Skills navigation between modules.
在你的主包导航图中使用标签
<include app:graph="@navigation/graph_name"/>
包含来自不同模块的图表
即使您已将包名称从清单移动到构建文件,它也应该可以工作
我在我的应用程序中使用 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")
}
我尝试过的:
- 清理项目
- 使缓存无效
- 每个风味包重复navigation.xml
你有什么办法解决这个问题吗?
在出现此错误之前,您是否升级到 Android Gradle 插件版本 7.2.0 和 运行 推荐的版本? 其中之一是将包名称从 Android 清单文件移动到构建文件。
当项目中有不同的 applicationIds 时,这个变化似乎会导致导航组件出现问题(因为你可能有不同的风格)。
只需将包名称放回到清单文件中,它就会再次起作用。 这应该至少暂时修复它,直到导航组件可以处理更改。
如果您正在使用 multi-modular 项目,我建议您为每个需要的 feature/module 创建一个单独的导航图,如此处所示 MAD Skills navigation between modules.
在你的主包导航图中使用标签
<include app:graph="@navigation/graph_name"/>
包含来自不同模块的图表
即使您已将包名称从清单移动到构建文件,它也应该可以工作