有没有一种方法可以使用导航组件在Android多模块项目中创建隐式深层链接

时间:2019-04-29 10:55:15

标签: android android-architecture-components android-architecture-navigation

我有一个多模块项目,需要处理应用程序内的深层链接。带有自己的导航图的深层链接可以指向任何功能模块。这是一个单一活动项目。

我的项目包括功能1,功能2和主要应用程序模块的模块,该模块取决于这两个功能模块。每个模块都包含自己的导航图,以维护自己的流程。我正在尝试创建一个隐式深层链接,如documentation

所示

我的应用模块的导航图具有嵌套的功能1和2s图,如下所示

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation_main"
    app:startDestination="@id/start_destination"
    tools:ignore="UnusedNavigation">

    <include app:graph="@navigation/navigation_feature_one" />
    <include app:graph="@navigation/navigation_feature_two" />

我具有导航图中定义的功能一的深层链接-navigation_feature_one

<navigation>
...
    <fragment android:id="@+id/featureOneFragment"
              android:name="com.app.featureone.presentation.SomeFragment"
              tools:layout="@layout/some_fragment"
              android:label="@string/title_some_fragment">
        <deepLink app:uri="www.example.com/featureone"/>
    </fragment>
</navigation>

在AndroidManifest中,我表示应该使用具有嵌套图的主导航

<activity
    android:name=".presentation.NavigationActivity"
    android:launchMode="singleTask"
    android:theme="@style/AppTheme.NoActionBar">
    <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="www.example.com"/>
        <data android:scheme="https"/>
        <data android:scheme="http"/>
    </intent-filter>
    <nav-graph android:value="@navigation/navigation_main" />
</activity>

我希望该项目使用导航组件深度链接到应用程序内的任何模块,但是在编译期间出现错误,找不到包含的图形

Referenced navigation file with navigationXmlId = navigation_feature_one not found

1 个答案:

答案 0 :(得分:0)

此问题看起来可能是此错误https://issuetracker.google.com/issues/112513722

的体现

问题跟踪程序建议采取以下解决方法:

// Copy these to the app module's build.gradle
task copyChildNavigationGraphs(type: Copy) {
    from '../feature-module/src/main/res/navigation'
    into 'src/main/res/navigation'
}
preBuild.dependsOn copyChildNavigationGraphs