【问题标题】:delete packages of domain by adb shell pm通过 adb shell pm 删除域包
【发布时间】:2013-03-17 08:28:47
【问题描述】:

有一个命令可以缓解Android手机管理包的痛苦,

adb shell pm uninstall org.kde.necessitas.example.one
adb shell pm uninstall org.kde.necessitas.example.two

但我有很多手机,只想删除它们上特定域中的所有包。

这是做不到的

adb shell pm uninstall org.kde.necessitas.example.*

你有什么建议?

【问题讨论】:

标签: android adb packagemaker


【解决方案1】:

Mac 用户:

adb shell pm list packages com.your.domain \
| cut -d ':' -f 2 \
| tr -d '\r' \
| xargs -L1 -t adb uninstall

【讨论】:

  • 只需使用@android.weasel 答案中的第一个选项。它与平台无关(整个命令在adb shell 内运行)。
【解决方案2】:

如果你坐在手机本身的外壳中,你可以这样做(如果你愿意,都在一条线上):

for i in $(pm list packages com.your.domain ) ; do
    pm uninstall ${i#*:} ;
done

如果你在主机上并且你使用的是 Unixy 的东西——Linux、Mac、Cygwin——那么类似的东西也可以在那里工作,但你需要将“adb shell”推入:

for i in $(adb shell pm list packages com.your.domain ) ; do
    adb uninstall ${i#*:} ;
done

由于您要从所有已连接的手机中删除包裹,因此您需要另一个循环:

for d in $(adb devices | sed '/List/d; /\*/d; s/device$//') ; do
    for i in $(adb -s $d shell pm list packages com.your.domain ) ; do
        adb -s $d uninstall ${i#*:} ;
    done
done

【讨论】:

  • 这个答案对我有帮助,尽管我必须首先通过将 $(i#*:} 实例更改为 ${i#*:} (I suggested an edit but it was rejected) 来更正参数扩展括起来的括号
  • 由于某种原因,这不适用于装有 Android Lollipop 的设备(如三星 Note 3)。您可能知道的任何解决方法?错误只是作为失败 [DE​​LETE_FAILED_INTERNAL_ERROR] 出现。
【解决方案3】:

您可以在批处理文件中使用以下内容:(我假设是 Windows)

  adb shell pm list packages org.kde.necessitas.example > packages.txt

  for /F "tokens=2 delims=:" %%a in (packages.txt) do adb shell pm uninstall %%a

您可以更进一步,将搜索文本作为参数:

  adb shell pm list packages %1 > packages.txt

  for /F "tokens=2 delims=:" %%a in (packages.txt) do adb shell pm uninstall %%a

这会将pm list packages 命令的输出通过管道传输到一个文本文件中,然后循环遍历该文本文件的每一行。它为该行中的每个第二个标记调用adb shell pm uninstall,在本例中为包名称。

【讨论】:

  • 这实际上是一种有效的方法,但我想知道是否有更简单/更好的方法。
  • 无需使用find - 只需使用pm list packages org.kde.necessitas.examplepm list 命令还以 package:com.example.package.name 格式打印出包名称 - 您需要在使用之前删除 package: 部分
  • @AlexP。谢谢亚历克斯,我已经编辑过了。关于不需要 Find 的好处。
  • 为什么我们必须将列表保存到文件中?为什么我们不能管道列表?我已经厌倦了adb shell pm list packages com.ubaier.test | cut -d ':' -f 2 | xargs -L1 adb uninstall .. 但它不起作用:( .. 我只是想了解为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2013-08-14
相关资源
最近更新 更多