Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由adb shell pm删除域的包_Android_Adb_Packagemaker - Fatal编程技术网

Android 由adb shell pm删除域的包

Android 由adb shell pm删除域的包,android,adb,packagemaker,Android,Adb,Packagemaker,有一个命令可以减轻管理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 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.*

您的建议是什么?

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

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

  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
,每一行中的第二个令牌(在本例中为软件包名称)。

如果您坐在手机本身的外壳中,您可以执行此操作(如果需要,全部在一行上):

如果您在主机上使用的是Unixy—Linux、Mac、Cygwin—那么类似的东西也可以在主机上使用,但您需要加入“adb外壳”:

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
对于mac用户:

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

这实际上是一种有效的方法,但我想知道是否有一种更简单/更好的方法。无需使用
find
-只需执行
pm list packages org.kde.incidentias.example
。另外,
pm list
命令以
package:com.example.package.name
格式打印包名-使用前需要删除
package:
部分it@AlexP. 谢谢亚历克斯,我已经编辑过了。关于不需要查找的优点。为什么我们必须将列表保存到文件中?为什么我们不能把清单列出来?我已经厌倦了adb shell pm列表包com.ubaier.test | cut-d':'-f2 | xargs-L1 adb卸载。。但是它不起作用:(…我只是想了解为什么?只需使用@android.weasel答案中的第一个选项。它是独立于平台的(整个命令在
adb shell
中运行)。这个答案对我有帮助,尽管我必须首先通过将
$(I#*:}
实例更改为
${I#*:}来纠正参数扩展中的括号
()由于某些原因,这在带有Android棒棒糖的设备上不起作用(如三星Note 3)。您可能知道的任何解决方法?该错误只会显示为失败[DELETE_FAILED_INTERNAL_error]。
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
adb shell pm list packages com.your.domain \
| cut -d ':' -f 2 \
| tr -d '\r' \
| xargs -L1 -t adb uninstall