You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADB执行android.intent.action.VIEW命令时URI端口丢失,如何让DAVx5保留端口?

解决ADB Intent传递DAVx5 URL时端口丢失的问题

问题描述

通过USB ADB自动配置DAVx5时,Intent携带的完整URI明明包含端口,但DAVx5读取后会丢失端口部分,导致无法正常登录。

复现步骤及现象

执行以下ADB命令:

adb shell am start -a android.intent.action.VIEW -d caldavs://some_nextcloud_username:some_nextcloud_password@some_long_onion.onion:9001/remote.php/dav/principals/users/some_nextcloud_username

查看Intent日志可确认完整URI已成功传递,但DAVx5界面显示的URL缺失:9001端口部分。手动补上端口后点击登录即可成功,验证端口丢失是问题根源。

解决方法

临时命令调整尝试

如果暂时不想修改代码,可以尝试对URI的端口部分做URL转义(部分应用对特殊URI格式的解析存在兼容问题),修改后的命令如下:

adb shell am start -a android.intent.action.VIEW -d caldavs://some_nextcloud_username:some_nextcloud_password@some_long_onion.onion%3A9001/remote.php/dav/principals/users/some_nextcloud_username

注:此方法兼容性不确定,更可靠的方案是代码层面修复。

代码层面修复(已定位问题点)

查看DAVx5源代码后,发现是URI解析逻辑中未显式传递端口参数。只需在构建解析后的URI时添加.port(uri.port)即可保留原端口:

// 原解析代码(示例)
val processedUri = Uri.Builder()
    .scheme(originalUri.scheme)
    .authority(originalUri.authority)
    .path(originalUri.path)
    .build()

// 修改后代码,新增端口传递逻辑
val processedUri = Uri.Builder()
    .scheme(originalUri.scheme)
    .authority(originalUri.authority)
    .port(originalUri.port) // 新增此行,保留原端口信息
    .path(originalUri.path)
    .build()

编译修改后的DAVx5安装包,再执行原ADB命令即可正常保留端口。


内容的提问来源于stack exchange,提问作者a.t.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:25:25