2013-03-17 62 views
3

有个命令,以减轻管理软件包用于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.* 

你有什么建议呢?

回答

4

您可以使用批处理文件如下:(我假设的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,在这种情况下是包名。如果你的主机上,你

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

”:

+0

其实,这是一种有效的方法, 但我不知道是否有一个更简单/更好的方法。 – Saeed 2013-03-17 11:58:54

+0

不需要使用'find' - 只要执行'pm list packages org.kde.necessitas.example'。 'pm list'命令也会以'package:com.example.package.name'的格式打印出软件包名称 - 在使用之前需要先移除'package:'部分 – 2013-03-17 18:20:29

+0

@AlexP。谢谢亚历克斯,我编辑过。关于不需要查找的好处。 – Simon 2013-03-17 18:51:02

1

如果你在手机本身的壳坐着,你可以做到这一点(全部在一行,如果你想)重新使用的东西Unixy - 在Linux,Mac,Cygwin的 - 那么类似的东西会在那里工作过,但你需要在推“亚行壳”:

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 
0

对于Mac用户:

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

只是使用@ android.weasel的答案中的第一个选项。它是独立于平台的(整个命令在'adb shell' )。 – 2017-07-08 21:25:16