【问题标题】:adb shell command to make Android package uninstall dialog appearadb shell 命令使 Android 软件包卸载对话框出现
【发布时间】:2012-10-08 14:43:34
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android adb uninstallation


    【解决方案1】:

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

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

    【讨论】:

    • 你能告诉我 -d package: 代表什么吗?有什么文件吗?
    • -d 表示数据。 -a 表示动作。您正在启动一个 Intent,其操作为“删除”,数据为“包:您的应用程序包”。这将启动负责卸载包的活动,并尝试卸载数据中提供的包。使用“adb shell am”命令可以找到文档。
    • 不,如果您的应用包含激活的 DevicePolicyManager,您必须先手动禁用它。
    • 上述命令在手机上显示删除此应用程序确认对话框。请改用adb shell pm uninstall -k com.packagename
    • 这不适用于系统应用。提示对话框会出现,但应用程序不会被卸载。
    【解决方案2】:

    在cmd中使用这个命令:

    adb shell pm uninstall -k com.packagename

    例如:

    adb shell pm uninstall -k com.fedmich.pagexray
    

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

    【讨论】:

    • 我更喜欢这个答案。因为,有了这个,你不会得到取消删除确认对话框。
    • @joctee,我也是,但问题明确表示他们不想使用意图卸载。
    • @Lohoris,已经成功了.. 确保你删除了 neverever 答案上的“+”
    • @Johnny_D -k 标志告诉包管理器保留缓存和数据目录,即使应用程序已被删除。如果您想彻底卸载,请不要指定 -k。
    • 我在尝试使用此命令时不断收到 Failure 消息。
    【解决方案3】:

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

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

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

    adb devices -l
    

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

    【讨论】:

      【解决方案4】:

      使用 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 检查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版本完全相关。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        完成此操作后,您可以使用此命令pm uninstall --user 0 &lt;package.name&gt; 卸载应用程序。 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 以 root 身份执行删除非常有用
        【解决方案7】:

        运行我得到的@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

        【讨论】:

          猜你喜欢
          • 2016-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-11
          • 1970-01-01
          • 2011-06-06
          • 2014-12-05
          • 2010-11-19
          相关资源
          最近更新 更多