> 技术文档 > ADB快速删除安卓上传文件_adb删除文件命令

ADB快速删除安卓上传文件_adb删除文件命令


删除上传文件的 ADB 操作步骤

1. 确认文件存储路径

你的 WebServerService.java 使用 getFilesDir() 保存上传文件,路径为:

/data/user/0/com.test.web/files/
  • com.test.web 是你的应用包名(见 AndroidManifest.xml)。
  • /data/user/0/ 是用户 0 的数据目录(单用户设备默认)。
  • files/getFilesDir() 对应的子目录。

注意/data/ 目录是受保护的,需要使用 run-as 或 root 权限访问。

2. 连接设备并启动 ADB

确保设备已连接到电脑,且 ADB 调试已启用。

  1. 检查设备连接

    adb devices

    输出示例:

    List of devices attachedemulator-5554 device

    如果未看到设备,确保:

    • 设备 USB 调试已开启(设置 > 开发者选项 > USB 调试)。
    • 安装了 ADB(Android SDK 工具或独立 ADB)。
  2. 启动 ADB shell

    adb shell

3. 使用 run-as 访问应用私有目录

由于文件在 /data/user/0/com.test.web/files/,普通 shell 无权限访问。使用 run-as 以应用身份访问:

adb shellrun-as com.test.webcd filesls
  • run-as com.test.web:以 com.test.web 应用身份运行。
  • cd files:进入文件目录。
  • ls:列出上传的文件(例如 test.txt, image.jpg)。

示例输出

test.txt image.jpg

4. 删除指定文件

run-as shell 中,使用 rm 命令删除文件:

rm test.txt
  • 删除单个文件:rm (例如 rm test.txt)。
  • 删除多个文件:rm file1 file2(例如 rm test.txt image.jpg)。
  • 删除所有文件:rm *(谨慎使用,确保只删除需要的内容)。

验证删除

ls

确认文件已移除。

5. 退出 shell

删除完成后,退出 run-as 和 ADB shell:

exit # 退出 run-asexit # 退出 adb shell

如果 run-as 失败的解决方法

某些设备(尤其是 Android 10+ 或非 debug 构建)可能限制 run-as,报错如 run-as: package not debuggable。以下是替代方案

方案 1:检查应用是否可调试

确保 AndroidManifest.xml 中的 application 标签启用调试:

<application android:debuggable=\"true\" ... >
  • 默认情况下,开发版 APK (debug 构建) 已启用 android:debuggable
  • 如果是 release 构建,需手动设置(不推荐生产环境)。
  • 修改后重新安装应用:
    adb install -r app-debug.apk

方案 2:使用 root 权限

如果设备已 root,可直接访问 /data/

adb shellsucd /data/user/0/com.test.web/fileslsrm test.txt
  • su:切换到 root 用户(需设备已 root)。
  • 直接操作文件,无需 run-as
  • 注意:root 操作有风险,谨慎删除。

方案 3:通过应用内删除功能

如果 run-as 和 root 不可用,可在 WebServerService.java 添加删除文件端点(例如 /delete/),通过 Web 界面删除。以下是实现代码:

修改 WebServerService.java

MyWebServer.serve 方法中添加 /delete/ 处理:

// 在 serve 方法的 if-else 链中添加else if (uri.startsWith(\"/delete/\") && method == Method.GET) { return handleFileDelete(uri);}

添加 handleFileDelete 方法:

private Response handleFileDelete(String uri) { try { String fileName = uri.substring(\"/delete/\".length()); File storageDir = getFilesDir(); File file = new File(storageDir, fileName); if (file.exists()) { if (file.delete()) { Log.d(TAG, \"File deleted: \" + fileName); return newFixedLengthResponse(Response.Status.OK, \"text/plain\", \"File deleted: \" + fileName); } else { Log.e(TAG, \"Failed to delete file: \" + fileName); return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, \"text/plain\", \"Failed to delete: \" + fileName); } } else { return newFixedLengthResponse(Response.Status.NOT_FOUND, \"text/plain\", \"File not found: \" + fileName); } } catch (Exception e) { Log.e(TAG, \"Error deleting file: \" + e.getMessage()); return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, \"text/plain\", \"Delete failed: \" + e.getMessage()); }}
更新 assets/www/index.html

在文件列表页面(/files)添加删除链接:

// 在 handleFileList 方法的 html.append 部分修改html.append(\"
  • <a href=\\\"/download/\").append(file.getName()).append(\"\\\">\") .append(file.getName()).append(\" \") .append(\"<a href=\\\"/delete/\").append(file.getName()).append(\"\\\">Delete
  • \"
    );

    使用方法

    • 访问 http://:8080/files,点击文件名旁的 “Delete” 链接。

    • 浏览器返回 “File deleted: ”。

    • Logcat 确认:

      WebServerService: File deleted: test.txt

    方案 4:清除应用数据

    如果只需清空所有上传文件,可清除应用数据(会删除 getFilesDir() 下的所有文件):

    adb shell pm clear com.test.web
    • 警告:这会重置应用所有数据(包括设置、缓存),仅在必要时使用。

    其他注意事项

    • 文件大小getFilesDir() 空间有限(通常几十 MB 到几 GB,视设备)。若上传大文件,检查剩余空间:
      adb shell df /data/user/0/com.test.web
    • 安全性:当前上传/下载无认证,建议后续添加 HTTP Basic Authentication 保护 /delete/ 端点。
    • 批量删除:若需频繁删除,可在 Web 界面添加批量删除功能(复选框 + POST 请求)。

    测试步骤

    1. 确认文件存在
      adb shellrun-as com.test.webls files
    2. 删除文件
      rm test.txtls # 验证文件已删除
    3. 若使用 Web 删除
      • 更新 WebServerService.javaindex.html
      • 访问 http://:8080/files,点击 “Delete”。
    4. 检查 Logcat
      adb logcat | grep WebServerService

    如果遇到问题

    如果无法删除文件,请提供:

    1. ADB 错误信息(例如 run-as 失败)。
    2. 设备信息:Android 版本、是否 root。
    3. 文件路径:确认是否在 /data/user/0/com.test.web/files/
    4. 应用类型debugrelease 构建。

    我可以进一步调试或提供替代方案(例如更复杂的删除端点或 root 工具)。


    总结

    通过 ADB 使用 run-as com.test.web 访问 /data/user/0/com.test.web/files/,以 rm 命令删除上传文件。若 run-as 不可用,可用 root 权限直接操作,或在 WebServerService.java 添加 /delete/ 端点,通过 Web 界面删除。当前速度(10MB/s)已优化,功能正常。若需 HTTPS、认证、批量删除或 SIP/OnVIF 集成,请告诉我,我可以提供详细代码!