小编Fli*_*int的帖子

如何在构建时使用占位符和导航组件创建深度链接

我们有一个使用 Deeplinks 的应用程序。我们还使用了 Android 导航组件。

目前我们在导航.xml 文件中配置我们的深层链接,这工作正常,但我们现在需要能够在构建时根据设置的环境变量添加另一个深层链接。

  • 我尝试在 build.gradle 中设置 String 资源并在 navigation.xml 中引用这些资源。

  • 我还尝试在 navigation.xml 中设置占位符,但无法替换它,因为它已被解析为 URI。

  • 我还尝试在 Manifest 中使用占位符设置直接意图过滤器,这会起作用,但我们失去了来自导航组件的良好路由。

目前,我们在 out navigation.xml 文件中以以下形式配置我们的 Deeplinks:

 <deepLink
            android:autoVerify="true"
            app:uri="foo.bar.baz/pull/{quxArg}/{quuxArg}" />
Run Code Online (Sandbox Code Playgroud)

我们现在需要能够在构建时基于一组 Envar 创建额外的 Deeplink。

例子:

DEEPLINK_ENVAR = "replacement.com"

构建.gradle:

manifestPlaceholders = [deeplink:DEEPLINK_ENVAR]
Run Code Online (Sandbox Code Playgroud)

导航.xml:

<deepLink
            android:autoVerify="true"
            app:uri="${deeplink}/pull/{quxArg}/{quuxArg}" />
Run Code Online (Sandbox Code Playgroud)

请注意,以上方法无效。

如果这只是 Manifest 中的一个意图过滤器,我们可以使用 Manifest 占位符来完成此任务并在 app.gradle 中设置它们。然而,navigation.xml 中设置的深层链接被解析为 URI,并在替换之前销毁所有占位符。

有没有人尝试过类似的事情?我试图避免必须运行预构建脚本来直接模板化导航文件。

期望的结果:

我希望能够在构建时添加一个额外的深层链接(实际上 4 个到不同的目的地),同时使用 Android 导航组件。

android placeholder android-navigation android-deep-link

10
推荐指数
1
解决办法
1097
查看次数

Android WebView 因 shouldInterceptRequest 覆盖而立即崩溃

我正在享受 Android WebView 的一些“乐趣”。

我使用它来显示登录屏幕,然后拦截响应中的身份验证代码。应该很简单...

如果我只重写 shouldOverrideUrlLoading 但如果我重写(就像 Android Studio 自动完成一样),我的 WebView 加载和显示绝对正常:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse {
    return super.shouldInterceptRequest(view, request)
}
Run Code Online (Sandbox Code Playgroud)

如果没有其他更改,它会在运行时立即崩溃并发生本机崩溃

A/铬:[致命:jni_android.cc(259)]

其次是

A/libc:致命信号 6 (SIGABRT),tid 16220 (TaskSchedulerFo) 中的代码 -6 (SI_TKILL),pid 16175 (eports.internal)

奇怪的是,如果我将响应设为可为空,WebView 就会再次工作。但是,在 shouldInterceptRequest 方法中添加其他任何内容都会使其失败并出现相同的错误。

所以这有效:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse? {
    return super.shouldInterceptRequest(view, request)
}
Run Code Online (Sandbox Code Playgroud)

但这会因上述崩溃而崩溃:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse? {
    val url = view?.url
    return super.shouldInterceptRequest(view, request)
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个非常奇怪的问题,并且对我来说毫无意义为什么添加 val …

android webview chromium intercept

6
推荐指数
1
解决办法
2429
查看次数