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.
相关产品推荐
相关产品推荐

