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 调试已启用。
-
检查设备连接:
adb devices
输出示例:
List of devices attachedemulator-5554 device
如果未看到设备,确保:
- 设备 USB 调试已开启(设置 > 开发者选项 > USB 调试)。
- 安装了 ADB(Android SDK 工具或独立 ADB)。
-
启动 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 请求)。
测试步骤
- 确认文件存在:
adb shellrun-as com.test.webls files
- 删除文件:
rm test.txtls # 验证文件已删除
- 若使用 Web 删除:
- 更新
WebServerService.java
和index.html
。 - 访问
http://:8080/files
,点击 “Delete”。
- 更新
- 检查 Logcat:
adb logcat | grep WebServerService
如果遇到问题
如果无法删除文件,请提供:
- ADB 错误信息(例如
run-as
失败)。 - 设备信息:Android 版本、是否 root。
- 文件路径:确认是否在
/data/user/0/com.test.web/files/
。 - 应用类型:
debug
或release
构建。
我可以进一步调试或提供替代方案(例如更复杂的删除端点或 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 集成,请告诉我,我可以提供详细代码!