如何通过ADB列出系统卸载的用户包?

5次阅读
没有评论

问题描述

在Android设备上使用 pm uninstall -k –user 0 命令禁用了某些应用后,想要生成一个这些特定应用(或所谓的”bloatware”)被卸载的列表。直接从 /system/app 目录中列出文件名,并查找哪些是禁用的以及它们的包名会相当繁琐。虽然 pm list -d 选项可以在设备内未开启的情况下显示已禁用的应用,但它仅适用于通过系统菜单取消启用的应用。

解决方案

方案1

注意:本操作可能因设备版本差异而有所不同,请在执行前确认系统版本及备份重要数据。
使用ADB命令可以通过 pm list packages -u 列出所有”被卸载”的包。此命令适用于非root且运行Android 6.0.1的设备。

步骤如下:

  1. 打开终端或命令提示符;
  2. 输入以下命令并按下回车键:
    bash
    adb shell pm list packages -u
  3. 将输出结果保存为一个文件以便以后查看和分析。
  4. 为了确保准确,可以将 pm list packages 的输出与带 -u 选项的输出进行比较。运行如下命令以获取差异:
    bash
    diff <(adb shell pm list packages) <(adb shell pm list packages -u)

这个差异将显示出未通过UI卸载的应用,帮助你识别被禁用而非手动移除的应用。

方案2

该方法可能增加复杂度,并且需要确认设备上的应用是否正确标记为”uninstalled”状态。
若在执行 pm list packages -u 后仍存在疑问或差异情况不明显,可以尝试通过自定义shell脚本来更加精确地查找特定包。

步骤如下:

  1. 编写一个简单的bash脚本用于自动化此过程。例如,在终端中输入以下内容并根据需要修改变量:
    “`bash
    #!/bin/bash

    disabled_packages=$(adb shell pm list packages -u)
    installed_packages=$(adb shell pm list packages)

    for package in $disabled_packages; do
    if [[ ! “$installed_packages” =~ ${package} ]]; then
    echo “Unlisted Package Found: $package”
    fi
    done
    “`

  2. 保存并给脚本文件执行权限:
    bash
    chmod +x list_uninstalled_packages.sh

  3. 随后运行该shell脚本以检查哪些包未在列表中出现。

注意事项

  • 以上方法有效但依赖于设备版本的支持情况,建议提前查看是否需要适配。
  • 对比操作有助于确认具体哪些包被“禁用”而非实际卸载。
正文完