假设我的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>
因此说明了导航组件没有正确解析字符串资源。