adb shell命令使Android软件包卸载对话框出现


126

我已经adb运行,并且设备以调试模式连接到我的系统,

我想使用以下意图启动来卸载应用程序: adb shell am start <INTENT>

我不想使用进行卸载adb uninstall com.company.apppackage,即使使用也不希望这样做adb shell pm uninstall com.company.apppackage

如何发送android.intent.action.DELETE针对特定程序包的意图操作,以允许用户查看提示并卸载程序?

Answers:


178

您可以使用以下命令从adb中进行操作:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>

2
您能否告诉-d软件包:<您的应用软件包>代表什么?有文件吗?
Rinkal Bhanderi 2012年

11
-d表示数据。-a表示动作。您正在启动一个Intent,其动作为“删除”,数据为“ package:您的应用程序包”。这将启动负责卸载软件包的活动,并尝试卸载数据中提供的软件包。可以通过使用“ adb shell am”命令找到文档。
pcans 2012年

否,如果您的应用包含激活的DevicePolicyManager,则必须先手动将其禁用。
pcans

上面的命令在电话上显示“删除此应用程序”确认对话框。使用adb shell pm uninstall -k com.packagename代替。
ViliusK '16

1
这不适用于系统应用程序。将会出现提示对话框,但不会卸载该应用程序。
IgorGanapolsky '16

218

在cmd中使用以下命令:

adb shell pm卸载-k com.packagename

例如:

adb shell pm uninstall -k com.fedmich.pagexray

-k标志告诉程序包管理器保留高速缓存和数据目录,即使该应用程序已删除。如果您想进行干净的卸载,请不要指定-k


8
我更喜欢这个答案。因为,使用此按钮,您将不会得到取消删除确认对话框。
joctee 2013年

2
@joctee,所以我也可以,但是问题特别是说,他们不想使用意图进行卸载。
OrhanC1年

@Lohoris,已经成功运作了..确保您删除了从来没有回答的“ +”号
fedmich 2013年

32
@Johnny_D -k标志告诉程序包管理器保留高速缓存和数据目录,即使该应用程序已删除。如果您想进行干净的卸载,请不要指定-k。
Yojimbo 2014年

2
尝试使用此命令时,我一直收到失败消息。
IgorGanapolsky '16

12

使用ADB,可以使用以下三个命令之一:

adb shell am start -a android.intent.action.UNINSTALL_PACKAGE -d "package:PACKAGE"
adb shell am start -n com.android.packageinstaller/.UninstallerActivity -d "package:PACKAGE"
adb shell am start -a android.intent.action.DELETE -d "package:PACKAGE"

将PACKAGE替换为已安装的用户应用程序的软件包名称。该应用程序不能是设备管理员,该命令才能成功运行。所有这些命令都需要用户确认才能删除应用程序。

可以通过使用来检查am的用法来了解该命令的详细信息adb shell am

我使用Elixir 2(使用任何等效的应用程序)获得了有关这些命令的信息。我用它来显示Package Installer应用程序的活动(在安装和删除应用程序期间看到的GUI)以及相关的意图。你去。

我使用的另一种方法是:我尝试使用GUI卸载应用程序,直到看到最终确认。我没有确认但执行命令

adb shell dumpsys activity recents   # for Android 4.4 and above
adb shell dumpsys activity activities # for Android 4.2.1

除其他外,它向我展示了后台传递的意图的有用细节。例:

intent={act=android.intent.action.DELETE dat=package:com.bartat.android.elixir#com.bartat.android.elixir.MainActivity flg=0x10800000 cmp=com.android.packageinstaller/.UninstallerActivity}

在这里,您可以看到动作,数据,标志和组件-足以满足目标。


我知道这个问题太旧了,所以我的回答可能没有太大的意义。但这与当今大多数用户使用的Android版本完全相关。
Firelord

6

尽管上述答案有效,但是如果您有多个设备连接到计算机,则可以使用以下命令从其中一个设备中删除该应用程序:

adb -s <device-serial> shell pm uninstall <app-package-name>

如果要查找设备序列号,请使用以下命令:

adb devices -l

这将为您提供连接的设备列表。左列显示设备序列号。


3

就我而言,我要做的是adb shell pm list packages先查看Android设备或仿真器中安装了哪些软件包/应用程序,然后在找到所需的软件包/应用程序后执行adb shell pm uninstall -k com.package.name


3

我假设您developer mode在android设备上启用了该功能,并且已连接到该设备,并且具有shell访问权限(adb shell)。

完成此操作后,您可以使用此命令卸载应用程序pm uninstall --user 0 <package.name>0是root id-这样,您就不需要太root您的设备。

这是我在华为P110 lite上的操作示例

# gain shell access
$ adb shell

# check who you are
$ whoami
shell

# obtain user id
$ id
uid=2000(shell) gid=2000(shell)

# list packages
$ pm list packages | grep google                                                                                                                                                         
package:com.google.android.youtube
package:com.google.android.ext.services
package:com.google.android.googlequicksearchbox
package:com.google.android.onetimeinitializer
package:com.google.android.ext.shared
package:com.google.android.apps.docs.editors.sheets
package:com.google.android.configupdater
package:com.google.android.marvin.talkback
package:com.google.android.apps.tachyon
package:com.google.android.instantapps.supervisor
package:com.google.android.setupwizard
package:com.google.android.music
package:com.google.android.apps.docs
package:com.google.android.apps.maps
package:com.google.android.webview
package:com.google.android.syncadapters.contacts
package:com.google.android.packageinstaller
package:com.google.android.gm
package:com.google.android.gms
package:com.google.android.gsf
package:com.google.android.tts
package:com.google.android.partnersetup
package:com.google.android.videos
package:com.google.android.feedback
package:com.google.android.printservice.recommendation
package:com.google.android.apps.photos
package:com.google.android.syncadapters.calendar
package:com.google.android.gsf.login
package:com.google.android.backuptransport
package:com.google.android.inputmethod.latin

# uninstall gmail app
pm uninstall --user 0 com.google.android.gms

--user 0执行删除操作的根是非常有用的
bw_üezi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.