【问题标题】:Dynamic Feature Navigation: Resource not found动态功能导航:找不到资源
【发布时间】:2020-11-19 11:49:50
【问题描述】:

我正在使用结合导航图的动态功能模块。在完成 SplitInstall 过程(动态功能已成功安装)后,我尝试导航到动态功能中的片段,但我始终为包含的导航图收到 ResourceNotFoundException。

应用级导航图:

<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_app_graph"
    app:startDestination="@id/fragment1">
    <fragment
        android:id="@+id/fragment1"
        android:name="com.test.app.Fragment1"
        android:label="Fragment1"
        tools:layout="@layout/fragment_fragment1">
        <action
            android:id="@+id/action_fragment1_to_fragment2"
            app:destination="@id/navigation_module_two" />
    </fragment>

    <activity
        android:id="@+id/randomActivity"
        android:name="com.test.app.module_two.RandomActivity"
        android:label="RegistrationActivity"
        app:moduleName="module_two" />
    <action
        android:id="@+id/action_global_registrationActivity"
        app:destination="@id/randomActivity" />

    <include-dynamic
        android:id="@+id/navigation_module_two"
        app:graphPackage="com.test.app.module_two"
        app:graphResName="navigation_module_two"
        app:moduleName="module_two"
        tools:layout="@layout/fragment_fragment2">

        <argument
            android:name="aStringParam"
            android:defaultValue=""
            app:argType="string" />
    </include-dynamic>
</navigation>

这里是navigation_module_two

<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"
    app:startDestination="@id/fragmentTwo"
    tools:ignore="UnusedNavigation">

    <fragment
        android:id="@+id/fragmentTwo"
        android:name="com.test.app.module_two.Fragment2"
        android:label="Fragment2"
        tools:layout="@layout/fragment_fragment2">

        <argument
            android:name="aStringParam"
            android:defaultValue=""
            app:argType="string" />
    </fragment>
</navigation>

奇怪的是:我可以很好地导航到RandomActivity,因为它不引用任何资源(没有关联的 XML 布局)。问题出在我尝试导航到 Fragment2 时,因为它确实有布局。

这是完整的堆栈跟踪:

2020-11-19 06:43:55.303 20550-20550/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.app, PID: 20550
android.content.res.Resources$NotFoundException: com.test.app.module_two:navigation/navigation_module_two
    at androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.replaceWithIncludedNav(DynamicIncludeGraphNavigator.kt:95)
    at androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.navigate(DynamicIncludeGraphNavigator.kt:79)
    at androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.navigate(DynamicIncludeGraphNavigator.kt:40)
    at androidx.navigation.NavController.navigate(NavController.java:1049)
    at androidx.navigation.NavController.navigate(NavController.java:935)
    at androidx.navigation.NavController.navigate(NavController.java:868)
    at androidx.navigation.NavController.navigate(NavController.java:854)
    at androidx.navigation.NavController.navigate(NavController.java:1107)
    at com.test.app.Fragment1$myHandlersListener$1.moveToNextFragment(Fragment1.kt:219)
    at com.test.app.databinding.NavigationDrawerBindingImpl._internalCallbackOnClick(NavigationDrawerBindingImpl.java:224)
    at com.test.app.generated.callback.OnClickListener.onClick(OnClickListener.java:11)
    at android.view.View.performClick(View.java:7869)
    at android.view.View.performClickInternal(View.java:7838)
    at android.view.View.access$3600(View.java:886)
    at android.view.View$PerformClick.run(View.java:29362)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.ActivityThread.main(ActivityThread.java:8125)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)

有什么想法吗?

更新 1:

我应该提一下,如果我构建一个通用 APK(而不是应用程序包),这可以正常工作。

【问题讨论】:

    标签: android android-navigation-graph dynamic-feature-module


    【解决方案1】:

    最终的解决方案是将navigation_module_two 的内容放在navigation_app_graph 内,而不是使用&lt;include-dynamic&gt;

    【讨论】:

    • 所以您的结论是 developer.android.com/guide/navigation/navigation-dynamic 具有误导性,因为它目前的动态功能已被破坏?
    • @straya 不完全。如果在安装时包含动态功能,我发布的代码将起作用。当您在调用安装后第一次启动它时,这是一个特别的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多