使用adb shell命令使Android卸载对话框出现

133

我已经运行了adb,并且设备已连接到我的电脑的调试模式,

我想要使用adb shell am start <INTENT>启动intent卸载应用程序。

我不想使用adb uninstall com.company.apppackage进行卸载,也不想使用adb shell pm uninstall com.company.apppackage进行卸载。

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

7个回答

226

在命令提示符(cmd)中使用以下命令:

adb shell pm uninstall -k com.packagename

例如:

adb shell pm uninstall -k com.fedmich.pagexray

-k参数告诉包管理器在应用程序被移除后保留缓存和数据目录。如果你想要干净的卸载,请不要使用-k参数。


8
我更喜欢这个答案,因为使用它时您不会收到未删除确认对话框。 - joctee
2
@joctee,我也是这样想的,但问题明确表示他们不想使用意图卸载。 - OrhanC1
@Lohoris,已经解决了..请确保您删除neverever答案中的“+”号。 - fedmich
这种删除方式是否也会删除设置和缓存?还是只是删除应用程序。 - Johnny_D
34
“-k” 标志告诉软件包管理器保留缓存和数据目录,即使应用程序被移除。如果您想要完全卸载,请不要指定“-k”。 - Yojimbo
3
当我尝试使用这个命令时,我不断收到“失败”(Failure)的提示信息。 - IgorGanapolsky

178

你可以使用以下命令通过adb来完成:

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

2
请问“-d package:<您的应用程序包名>”是什么意思?有相关文档吗? - RPB
11
-d 表示数据。-a 表示动作。您正在启动一个带有动作"Delete"和数据"package:your app package"的Intent。这将启动负责卸载包并尝试卸载提供的数据包的活动。可以使用"adb shell am"命令找到文档。 - pcans
不,如果您的应用程序包含已激活的DevicePolicyManager,则必须首先手动禁用它。 - pcans
以上命令会在手机上显示“删除此应用程序”的确认对话框。请改用adb shell pm uninstall -k com.packagename命令。 - ViliusK
@ViliusK 我相信这就是Rinkal想要的,即在命令后弹出弹窗。 - auhmaan
2
这对于系统应用程序不起作用。提示对话框会出现,但应用程序不会被卸载。 - IgorGanapolsky

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(使用任何等效应用程序)获取了有关这些命令的信息。我用它显示了软件包安装程序应用程序的活动(即您在安装和卸载应用程序期间看到的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版本。 - user47

7

虽然以上答案可行,但如果您连接了多个设备到电脑上,则可以使用以下命令从其中一个设备中移除应用程序:

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

如果你想查找设备序列号,可以使用以下命令:

adb devices -l

这将为您提供一个已连接设备列表。左侧列显示设备序列号。

7
我假设您已经在安卓设备上启用了开发者模式,并且已连接到设备并具有Shell访问权限(adb shell)。
完成这些步骤后,您可以使用以下命令卸载应用程序:pm uninstall --user 0 <package.name>0是根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

1
--user 0 以 root 权限执行删除操作非常有用。 - bw_üezi

4
在我的情况下,我会执行 adb shell pm list packages 命令,首先查看已安装在我的 Android 设备或模拟器上的应用程序包,然后找到想要卸载的应用程序包后,执行 adb shell pm uninstall -k com.package.name 命令进行卸载。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接