包含动态导航图的 Resources$NotFoundException
Resources$NotFoundException with include-dynamic navigation graph
-
android
-
android-jetpack
-
android-architecture-navigation
-
android-jetpack-navigation
-
dynamic-feature-module
我有一个动态功能模块,它有自己的嵌套导航图。我还有一个动态功能模块,它只是一个片段。如果您有一个带有自己的导航图的动态功能模块,我知道您需要使用 include-dynamic 标签。当我构建应用程序并将应用程序部署到 Play 商店进行内部测试时,动态模块会正确下载。但是,如果我和 building/running 在本地 - 当我尝试导航到包含导航图的动态功能模块时,应用程序崩溃。我以为当 运行 在本地时一切都被捆绑了?有什么我想念的吗?
我得到的错误是android.content.res.Resources$NotFoundException: com.xyz.app_name.two:navigation/two_navigation
main_navigation_graph
<!-- this works locally. module does not contain a nav graph -->
<fragment
android:id="@+id/OneFragment"
android:name="com.xyz.app_name.one.OneFragment"
android:label="{nickname}"
app:moduleName="one"
tools:layout="@layout/one_fragment">
<argument
android:name="nickname"
app:argType="string" />
</fragment>
<!-- this doesn't work locally -->
<include-dynamic
android:id="@+id/two_graph"
app:graphPackage="com.xyz.app_name.two"
app:graphResName="two_navigation"
app:moduleName="two" />
feature_two_graph
<?xml version="1.0" encoding="utf-8"?>
<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/two_graph"
app:moduleName="two"
app:startDestination="@id/twoFragment">
<fragment
android:id="@+id/twoFragment"
android:name="com.xyz.app_name.two.TwoFragment"
android:label="{nickname}"
tools:layout="@layout/two_fragment">
<argument
android:name="nickname"
app:argType="string" />
<action
android:id="@+id/action_twoFragment_to_dialogFragment"
app:destination="@id/dialogFragment" />
</fragment>
<dialog
android:id="@+id/dialogFragment"
android:name="com.xyz.app_name.two.ui.DialogFragment"
android:label="bottom_sheet"
tools:layout="@layout/bottom_sheet" />
</navigation>
我遇到了同样的问题。
尝试添加 dynamic-feature 图作为目标时,使用 include-dynamic 如下:
<include-dynamic
android:id="@+id/nestedMyfeatureGraph"
app:graphPackage="com.mycompany.myapp.mydynamicfeature"
app:graphResName="nav_graph_feature"
app:moduleName="mydynamicfeature"
/>
请记住,app:graphPackage
应该引用 dynamic-feature 的 applicationId(我知道,)。如果您有任何自定义 gradle 脚本将后缀添加到 applicationId 或类似的东西,那么引用该图将失败。
它可能只在 Playstore 上对你有用,因为我猜你的脚本只为 non-prodRelease 构建类型添加后缀,这是一种常见的模式。
所以,为了解决这个问题,我不得不更换
app:graphPackage="com.mycompany.myapp.mydynamicfeature"
和
app:graphPackage="${applicationId}.mydynamicfeature"
android
android-jetpack
android-architecture-navigation
android-jetpack-navigation
dynamic-feature-module
我有一个动态功能模块,它有自己的嵌套导航图。我还有一个动态功能模块,它只是一个片段。如果您有一个带有自己的导航图的动态功能模块,我知道您需要使用 include-dynamic 标签。当我构建应用程序并将应用程序部署到 Play 商店进行内部测试时,动态模块会正确下载。但是,如果我和 building/running 在本地 - 当我尝试导航到包含导航图的动态功能模块时,应用程序崩溃。我以为当 运行 在本地时一切都被捆绑了?有什么我想念的吗?
我得到的错误是android.content.res.Resources$NotFoundException: com.xyz.app_name.two:navigation/two_navigation
main_navigation_graph
<!-- this works locally. module does not contain a nav graph -->
<fragment
android:id="@+id/OneFragment"
android:name="com.xyz.app_name.one.OneFragment"
android:label="{nickname}"
app:moduleName="one"
tools:layout="@layout/one_fragment">
<argument
android:name="nickname"
app:argType="string" />
</fragment>
<!-- this doesn't work locally -->
<include-dynamic
android:id="@+id/two_graph"
app:graphPackage="com.xyz.app_name.two"
app:graphResName="two_navigation"
app:moduleName="two" />
feature_two_graph
<?xml version="1.0" encoding="utf-8"?>
<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/two_graph"
app:moduleName="two"
app:startDestination="@id/twoFragment">
<fragment
android:id="@+id/twoFragment"
android:name="com.xyz.app_name.two.TwoFragment"
android:label="{nickname}"
tools:layout="@layout/two_fragment">
<argument
android:name="nickname"
app:argType="string" />
<action
android:id="@+id/action_twoFragment_to_dialogFragment"
app:destination="@id/dialogFragment" />
</fragment>
<dialog
android:id="@+id/dialogFragment"
android:name="com.xyz.app_name.two.ui.DialogFragment"
android:label="bottom_sheet"
tools:layout="@layout/bottom_sheet" />
</navigation>
我遇到了同样的问题。
尝试添加 dynamic-feature 图作为目标时,使用 include-dynamic 如下:
<include-dynamic
android:id="@+id/nestedMyfeatureGraph"
app:graphPackage="com.mycompany.myapp.mydynamicfeature"
app:graphResName="nav_graph_feature"
app:moduleName="mydynamicfeature"
/>
请记住,app:graphPackage
应该引用 dynamic-feature 的 applicationId(我知道,
它可能只在 Playstore 上对你有用,因为我猜你的脚本只为 non-prodRelease 构建类型添加后缀,这是一种常见的模式。
所以,为了解决这个问题,我不得不更换
app:graphPackage="com.mycompany.myapp.mydynamicfeature"
和
app:graphPackage="${applicationId}.mydynamicfeature"