2013-03-17 71 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