使用ADB保留特定目录文件卸载应用

19次阅读
没有评论

使用ADB删除应用/data/data目录下文件但保留/storage/emulated/0/Android/data目录下的文件***

问题描述

希望利用 Android ADB 工具,在卸载和重新安装 APK 过程中,仅删除 /data/data 目录下的文件,并保留 /storage/emulated/0/Android/data/<app name> 目录下的文件。然而,直接通过 adb 命令执行此操作较为复杂且存在挑战。

解决方案

注意:以下操作在非root设备上可能无法实现,且涉及的风险请自行评估。

方案1 – 使用ADB脚本

尽管 ADB 本身不支持分隔删除指定目录下的文件和保留其他目录内的文件,但是可以通过编写一个脚本来实现此目标。该脚本可以通过先卸载应用、pull出 /data/data 目录下需要保留的必要文件、然后re-install应用并push回这些文件来达成。

在实际操作中,可能需要手动处理这一过程,以确保不丢失重要数据或出现错误:

  1. 使用adb卸载应用:首先确保手机不root:
    bash
    adb shell pm uninstall <package_name>

  2. pull出需要保留的文件夹:如果应用具有ro.data.partition_readonly=true,该命令将无法直接访问这些文件。在这种情况下,尝试在未root或允许的环境中使用以下命令:
    bash
    adb shell "cd /data/data/<package_name>; find . -mindepth 1 -maxdepth 1 -not \( -path '*/.*' \) > manifest.txt"
    adb push manifest.txt .
    adb pull /data/data

  3. re-install应用:再次使用 -r 选项来避免重新解压缩库文件:
    bash
    adb install -r <path_to_apk>

  4. 手动替换manifest.txt中的文件:确保push回必要的文件到目标位置。

  5. 重置/清理/data/data:通过adb shell或其他工具删除不需要的文件,比如日志或缓存:
    bash
    adb shell "cd /data/data/<package_name>; rm -rf *.log; find . -type f ! -name 'manifest.txt' -exec echo \>/dev/null \;"

方案2 – 利用第三方工具

某些第三方安全清理或数据管理Android应用可能会提供这样的功能,但这类应用程序可能需要用户授予root权限。

  1. 选择一个支持保存/删除特定目录文件的应用:如文件清理器、分区管理器或存储增强等,并通过其界面手动执行该操作。
  2. 卸载原应用并处理/data/data:按照上述脚本方法完成相关预处理工作。
  3. re-install新的APK包

请注意,上述方案均需在不root设备的前提下谨慎尝试。如遇到问题或任何不确定的地方,请务必先备份整个系统的文件系统或至少重要数据。

方案3 – Root设备支持

如用户确实拥有物理设备的 root 权限,则以上所述的操作将变得更加简单直接:

  1. 使用Busybox或其他类似工具在root模式下卸载应用
    bash
    su -c "pm uninstall <package_name>"
  2. 手动删除与保留文件夹:通过 adb shell 或者基于Root的命令行shell(如Termux)直接进行这些操作。
  3. re-install应用并处理相关文件和库以减少重新组装时间

无论如何,请在执行任何上述步骤前仔细考虑可能的副作用,并参考设备制造商和支持网站的相关说明。

正文完