132

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

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

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

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

4

7 回答 7

224

在 cmd 中使用此命令:

adb shell pm uninstall -k com.packagename

例如:

adb shell pm uninstall -k com.fedmich.pagexray

-k标志告诉包管理器保留缓存和数据目录,即使应用程序已被删除。如果您想要完全卸载,请不要指定-k.

于 2012-12-12T05:48:25.540 回答
179

您可以使用以下命令从 adb 执行此操作:

adb shell am start -a android.intent.action.DELETE -d package:<your app package>
于 2012-10-18T08:17:56.247 回答
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}

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

于 2015-12-10T21:02:14.230 回答
7

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

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

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

adb devices -l

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

于 2015-11-09T10:27:14.577 回答
6

我假设您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
于 2018-01-03T19:24:23.037 回答
4

在我的情况下,我adb shell pm list packages首先查看我的 Android 设备或模拟器中安装了哪些包/应用程序,然后在找到所需的包/应用程序后,我执行adb shell pm uninstall -k com.package.name.

于 2016-12-19T08:44:47.480 回答
0

运行@neverever415 我得到的答案:

失败 [DE​​LETE_FAILED_INTERNAL_ERROR]

在这种情况下,请检查您是否编写了正确的包名称,也许它是一个调试版本,例如com.package_name.debug

adb shell pm uninstall com.package_name.debug

或查看https://android.stackexchange.com/questions/179575/how-to-uninstall-a-system-app-using-adb-uninstall-command-not-remove-via-rm-or

于 2020-10-23T13:14:39.397 回答