我可以使用字符串资源在Jetpack导航XML文件中生成深度链接吗



假设我的Gradle文件中有以下buildType部分:

buildTypes {
debug {
...
resValue "string", "DEEPLINK_EXAMPLE", "appnamedebug://detail/{detail_id}"
...
}
release {
...
resValue "string", "DEEPLINK_EXAMPLE", "appname://detail/{detail_id}"
...
}
}

我想在Jetpack导航XML文件中使用生成的字符串资源作为深度链接,如下所示:

<deepLink app:uri="@string/DEEPLINK_EXAMPLE" />

我尝试过类似的方法,但当我查看./adb shell dumpsys package r的输出文件时,Intent Filters没有显示。

这可能吗?如果是的话,是不是我错过了什么?

问题中的方法只会导致清单具有如下意图过滤器:

<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:scheme="http" />
<data android:scheme="https" />
<data android:host="string" />
<data android:path="/DEEPLINK_EXAMPLE" />
</intent-filter>

我想那只是个白日梦。

最后,我不得不采用以前的方法:将导航图复制到调试和发布源集,并相应地在那里设置deeplink URI。

因此,debug源集中的导航图将具有以下内容:

<deepLink app:uri="appnamedebug://detail/{detail_id}" />

release源集中的导航图将具有以下内容:

<deepLink app:uri="appname://detail/{detail_id}" />

实际上,我不确定是在main源代码中保留Nav Graph,还是删除它,以便debug/release源代码集中的Nav Graph具有优先级。

据我所知,这是不可能的。

前面的答案说明了一切,但为了清楚起见,我想添加这个例子:

如果添加到nav_graph:

<deepLink
android:id="@+id/myLink"
app:uri="@string/my_link_uri"
/>

它将在合并的清单中被天真地处理为:

<intent-filter>
<data android:host="string" />
<data android:path="/my_link_uri" />
</intent-filter>

因此说明了导航组件没有正确解析字符串资源。

最新更新