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 attached
    emulator-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 shell
run-as com.test.web
cd files
ls
  • 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 <filename>(例如 rm test.txt)。
  • 删除多个文件:rm file1 file2(例如 rm test.txt image.jpg)。
  • 删除所有文件:rm *(谨慎使用,确保只删除需要的内容)。

验证删除

ls

确认文件已移除。

5. 退出 shell

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

exit  # 退出 run-as
exit  # 退出 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 shell
su
cd /data/user/0/com.test.web/files
ls
rm test.txt
  • su:切换到 root 用户(需设备已 root)。
  • 直接操作文件,无需 run-as
  • 注意:root 操作有风险,谨慎删除。

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

如果 run-as 和 root 不可用,可在 WebServerService.java 添加删除文件端点(例如 /delete/<filename>),通过 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("<li><a href=\"/download/").append(file.getName()).append("\">")
    .append(file.getName()).append("</a> ")
    .append("<a href=\"/delete/").append(file.getName()).append("\">Delete</a></li>");

使用方法

  • 访问 http://<device-ip>: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 shell
    run-as com.test.web
    ls files
    
  2. 删除文件
    rm test.txt
    ls  # 验证文件已删除
    
  3. 若使用 Web 删除
    • 更新 WebServerService.javaindex.html
    • 访问 http://<device-ip>: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/<filename> 端点,通过 Web 界面删除。当前速度(10MB/s)已优化,功能正常。若需 HTTPS、认证、批量删除或 SIP/OnVIF 集成,请告诉我,我可以提供详细代码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值