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

我有 adb运行和设备连接到我的系统在调试模式,

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

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

我如何发送一个意图与 android.intent.action.DELETE的行动为一个特定的包,允许用户看到提示和卸载程序?

241437 次浏览

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

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

在 cmd 中使用以下命令:

Adb shell pm 卸载-k Com.packagename

例如:

adb shell pm uninstall -k com.fedmich.pagexray

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

虽然上述答案的工作,但如果你有多个设备连接到您的计算机,然后下面的命令可以用来删除应用程序从其中之一:

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

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

adb devices -l

这将给你一个附加设备的列表。左栏显示设备系列。

使用 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。应用程序必须不是设备管理员才能使命令成功工作。所有这些命令都需要用户确认才能删除应用程序。

通过使用 adb shell am检查 的使用情况,可以了解上述命令的详细信息。

我使用 长生不老药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}

在这里,您可以看到动作、数据、标志和组件——对于目标来说足够了。

在我的例子中,我先做一个 adb shell pm list packages来查看我的 Android 设备或模拟器中安装了哪些软件包/应用程序,然后在找到所需的软件包/应用程序后,我再做一个 adb shell pm uninstall -k com.package.name

我假设您在您的 android 设备上启用了 developer mode,并且您已经连接到您的设备并且您有 shell 访问(adb shell)。

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

下面是我在华为 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

运行@never415我得到的答案:

失败[ DELETE _ 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