ADB PUSH 文件异常 - input is not valid Modified UTF-8: illegal continuation byte 0

本文探讨了使用ADB命令推送包含中文名的docx文件到手机时遇到的闪退问题,分析了问题根源在于ADB环境对中文的支持不足,并提供了临时解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景: 笔者在使用ADB命令推送docx文件到手机指定文件夹下,点开手机查看无异常,但使用简单的代码,程序直接闪退,起初笔者怀疑是中文路径的问题,但不是,真正的原因ADB环境不支持中文造成的。

File file = new File("文件路径");
if(file.Directory()){}//异常行
// ADB命令行操作
C:\Users\Administrator>adb push C:\Users\Administrator\Desktop\library\功能设计描述20171226.docx /storage/emulated/0/piopic/docx/功能设计描述20171226.
docx
C:\Users\Administrator\Desktop\library\功能设计描述20171226.docx: 1 file pushed. 10.0 MB/s (911508 bytes in 0.087s)


//手机异常堆栈
JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0
01-09 17:33:16.498 16673-16673/com.example.readpoi A/art: art/runtime/runtime.cc:431]     string: '功能设�'
01-09 17:33:16.498 16673-16673/com.example.readpoi A/art: art/runtime/runtime.cc:431]     input: '0xe5 0x8a 0x9f 0xe8 0x83 0xbd 0xe8 0xae 0xbe 0xe8'
01-09 17:33:16.498 16673-16673/com.example.readpoi A/art: art/runtime/runtime.cc:431]     in call to NewStringUTF
01-09 17:33:16.498 16673-16673/com.example.readpoi A/art: art/runtime/runtime.cc:431]     from java.lang.String[] java.io.UnixFileSystem.list0(java.io.File)

原因:
ADB push 之后出现该BUG   

解决:
https://blog.youkuaiyun.com/lixiaodaoaaa/article/details/9770405

临时解决:
电脑打开手机指定目录 直接复制粘贴文件过去
<think>好的,我现在需要解决用户在使用adb push命令时,如何处理文件名中包含连字符(-)的问题。首先,我得回忆一下adb命令的基本用法,尤其是关于文件操作的部分。用户提到文件名中有连字符,这可能导致命令解析错误,因为连字符在命令行中通常用来表示选项或参数。 首先,用户的问题可能出现在当文件名以连字符开头时,比如文件名为“-file.txt”。这时候,直接使用adb push -file.txt /sdcard/可能会被adb误认为“-file.txt”是一个选项,而不是文件名,从而导致错误。这种情况在Linux命令行中比较常见,解决方法通常是使用路径来明确指定文件,或者在文件名前加上“./”表示当前目录,或者使用“--”来告诉命令后面不再解析选项。 接下来,我需要验证这些方法是否适用于adb命令。根据引用[1]中的adb push用法示例,用户需要指定电脑上的文件路径和设备目录。如果文件名有特殊字符,可能需要用引号包裹路径,或者使用转义字符。例如,在Linux或macOS中,可以使用反斜杠\来转义连字符,或者在文件名前后加上单引号或双引号。不过,adb本身是否支持这些shell的特性呢? 根据引用[3]和[4],adb shell支持一些基本的文件操作命令,比如mv、cp等,但处理特殊字符可能需要特定的方法。比如,如果直接adb push,可能需要确保文件名被正确传递,避免被shell解析为选项。这时候,使用绝对路径或者相对路径加上./可能有效。例如,adb push ./--file.txt /sdcard/,或者在文件名前加./,如adb push ./-myfile.txt /sdcard/。 另外,用户可能需要考虑不同操作系统下的处理方式。比如在Windows中,可能需要使用双引号包裹文件名,而在Unix-like系统中使用单引号或反斜杠。例如,在Windows下,adb push "-file.txt" /sdcard/,或者在Linux下adb push -- -file.txt /sdcard/,这里的--表示选项结束,后面的内容作为文件名处理。 我还需要确认adb push是否支持这些参数处理方式。根据引用[1]中的示例,adb push命令格式是adb push <电脑路径> <设备路径>,所以如果路径中包含特殊字符,正确的转义或引用是必须的。例如,如果文件名为“-test.txt”,在Linux中可以写成adb push -- -test.txt /sdcard/,或者使用相对路径./-test.txt,或者绝对路径/home/user/-test.txt。 可能还需要检查adb版本是否影响此问题,不同版本的adb可能对参数解析有所不同。但一般来说,遵循命令行处理参数的通用方法应该有效。 总结可能的解决方法: 1. 使用相对路径并添加./前缀,如./-file.txt。 2. 使用绝对路径,明确指定文件位置。 3. 在文件名前加上--,表示选项结束,如adb push -- -file.txt /sdcard/。 4. 使用引号包裹文件名,如adb push "-file.txt" /sdcard/(特别是在Windows中)。 需要提醒用户根据具体操作系统选择合适的转义方式,并测试这些方法是否有效。此外,如果文件名中间有连字符(而非开头),可能不需要特殊处理,但以连字符开头的情况需要特别注意。</think>### 处理adb push命令中文件名含连字符(-)的方法 当使用`adb push`命令传输包含连字符(`-`)的文件名时,若文件名以连字符开头(例如`-file.txt`),系统可能将其误判为命令选项。以下是具体解决方法: --- #### 方法1:使用相对路径前缀`./` 在文件名前添加`./`,明确标识为当前目录下的文件,避免解析为命令选项: ```bash adb push ./-filename.txt /sdcard/ ``` --- #### 方法2:使用绝对路径 直接指定文件的绝对路径,避免歧义: ```bash adb push /home/user/-filename.txt /sdcard/ ``` --- #### 方法3:使用`--`终止选项解析 在文件名前添加`--`,表示后续内容为参数而非选项: ```bash adb push -- -filename.txt /sdcard/ ``` --- #### 方法4:引号包裹文件名(适配系统差异) - **Windows(CMD/PowerShell)**: ```bash adb push "-filename.txt" /sdcard/ ``` - **Linux/macOS**: ```bash adb push '-filename.txt' /sdcard/ ``` --- #### 验证操作 传输后可通过`adb shell ls /sdcard/`检查文件是否成功推送[^1]。 --- ### 相关问题 1. 如何在adb shell中重命名含特殊字符的文件? 2. adb pull命令遇到权限错误如何解决? 3. 如何通过adb批量传输多个文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值