【问题标题】:adb uninstall failedadb 卸载失败
【发布时间】:2012-11-12 03:56:16
【问题描述】:

我正在编写一些示例应用程序。
调试这些应用程序后,我在设备的应用程序管理中看不到卸载按钮。
当我执行 adb 卸载时,它总是说 Failure without any reason.
在 DDMS 中,我看到我的 apk 存储在 /data/app/com.k2g.leaveDemo-1.apk。
我不确定我错过了什么。
我总是必须重置我的设备才能摆脱这些应用程序:(

我需要签名吗?
我需要在调试模式下做些什么吗?
还是取决于版本?

我正在使用三星 S2。

【问题讨论】:

  • 你正在运行什么卸载命令?
  • 我正在运行“adb uninstall com.k2g.leaveDemo”
  • 这应该没问题,只要你只有一个安卓设备,包括模拟器在运行。如果您有多个,则必须添加另一个开关以指示您要在哪个设备上运行命令。还要确保在您的应用清单中定义的包名称是“com.k2g.leaveDemo”。
  • 是的,我只有一个设备连接到 adb。我怀疑,这与签名或基本应用程序开发有关,因为我所有的应用程序都以相同的方式运行。如果您认为我缺少一些需要在清单中完成的设置,请告诉我。我正在查看 DDMS,它说相同的包名,所以包名在清单中是正确的。
  • 您的设备是否允许您安装第三方应用程序?如果没有,您应该只在模拟器上进行调试。

标签: android adb


【解决方案1】:

您应该必须手动删除应用程序。进入设置->应用程序管理->运行应用程序,点击它,您可以从那里删除、停止应用程序。

【讨论】:

  • 可能去“下载的应用程序”比“运行的应用程序”好;该应用可能没有运行。
  • 所有这些选项都是灰色的。我无法点击任何按钮。 “卸载”、“清除数据”、“清除缓存”全部禁用。
【解决方案2】:

打开你的应用Manifest,先检查应用的包。

之后,请确保您的设备已设置为调试器模式。

检查 ADB 是否可以与您的设备交互:

adb 设备

如果您的设备已列出,则运行:

adb 卸载 PACKAGE_WRITTEN_IN_MANIFEST

【讨论】:

  • 我已经尝试了所有这些选项,一切都很完美,但问题仍然存在。
  • 唯一不能让您卸载应用程序的选项是将系统分区安装为可写,将您的 apk 安装在系统/应用程序上,然后再次以只读方式重新安装。你这样做了吗?
  • 我没有做过任何这样的步骤。我可以在 /data/app 文件夹中看到我的 apk 文件,所以我确定它也没有将其视为系统应用程序。
  • 试试这个: adb shell @ENTER@ cd /data/app @ENTER@ rm com.k2g.leaveDemo-1.apk @ENTER@ exit @ENTER@ adb reboot @ENTER@ 不要放@ENTER@ 在您的 cmd 上,只需按 enter 键
  • 任何 MDM(移动设备管理)应用程序都可以限制卸载选项吗?
【解决方案3】:

是的,移动设备管理会带来自己的问题,但我敢打赌“失败”是 dos2unix 问题。在我的 Linux 机器上,adb 正在附加一个导致“失败”的 DOS 换行符,因为卸载认为 CR 字符是包名称的一部分。还要从 package-1.apk 文件名的末尾删除“-1.apk”。

adb root
adb shell
pm list packages
pm uninstall com.android.chrome

就我而言,我的手机处于永久“安全模式”,因此只有 /system/app/ 下的应用程序才有机会运行。所以我安装它们以复制 .apk 文件,然后批量卸载并复制到 /system/app/,擦除 /cache 并重新启动。现在,即使在安全的 mdoe 中,我也有更多的应用程序在运行。

# adb root
# pm list packages -3 > /root/bulkuninstall.txt
# vi /root/bulkuninstall.txt  and check ^M characters at end of each line.   
   If ^M, then must run dos2unix /root/bulkuninstall.txt.  
   Remove '-1.apk' using vi search and replace:  
        :%s/-1\.apk//g 
   Or sed...

# cp /data/app/* /storage/sdcard1/APKs/
# for f in `cat /root/bulkuninstall.txt`; do echo $f; pm uninstall $f; done;
# 
# echo Now remount system and copy the APK files to /system/app/
# mount | grep system
# mount -o remount,rw /dev/block/(use block device from previous step)  /system 
# cp /storage/sdcard1/APKs/* /system/app/
# reboot

清除缓存 打开电源。

【讨论】:

  • 如果你仍然在 shell 中得到 Failure [DELETE_FAILED_INTERNAL_ERROR],请运行 su。
  • 我也运行 su 但仍然出现此错误 [DELETE_FAILED_INTERNAL_ERROR]
【解决方案4】:

如果是 Android 内部应用,您可能需要:

  • adb 外壳
  • mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
  • rm /system/app/your_app
  • rm /data/data/your_app
  • 删除 /data/system/packages.xml 中的所有条目
  • 删除 /data/system/packages.list 中的所有条目
  • 编辑 AndroidManifest.xml 并删除 android:sharedUserId="android.uid.shared"

这需要您自担风险;-|,请先在模拟器中尝试...

【讨论】:

  • 如何编辑文件? adb bash 似乎没有编辑器。试过 vi、vim、nano、pico。没有找到这些命令。
  • 关于“数据/系统”文件,编辑它们是否安全?另外,在那之后你还需要重启设备吗?
  • @user445338 在busybox中有vi
【解决方案5】:

您的应用似乎包含一个隐藏的设备管理员,如下所示:http://www.symantec.com/security_response/writeup.jsp?docid=2013-060411-4146-99

只有在您先禁用设备管理员时才能卸载此类应用程序。您可以使用https://play.google.com/store/apps/details?id=com.trendmicro.mtrt.hiddenDAcleaner 禁用它,也可以通过将意图发送到调用接收器的应用程序来禁用它,从而禁用设备管理员。

【讨论】:

  • 非常感谢!我有一个设备管理员让我的手机变砖,如果它一直弹出,我什么也做不了。以管理员身份禁用它让我卸载它。非常感谢!
【解决方案6】:

这不是一个确切的答案,但如果您因为要安装更新的 .apk 而想要卸载该应用程序,您可以试试这个:

adb install -r yourapp.apk

-r 选项告诉 adb 重新安装应用程序

【讨论】:

  • 它没有回答这个问题,但这是我最终想要的。
  • 我收到以下错误消息:包 com.google.android.GoogleCamera 签名与以前安装的版本不匹配;忽略!
【解决方案7】:

我发现adb shell pm uninstall <package> 始终如一地工作,而adb uninstall <package> 却没有。

【讨论】:

  • 在这两种情况下都得到了Failure。
  • @BartekBanachewicz 这是一致性。
【解决方案8】:

确保输入完整的包名和应用程序名称:

com.domain.app

【讨论】:

    【解决方案9】:

    我在使用 adb shell uninstall com.package.app/ 时失败了

    删除 / (所以 adb shell 卸载 com.package.app)并且它可以工作

    【讨论】:

      【解决方案10】:

      我运行了一个模拟器实例并连接了一个设备。

      当我运行命令 `adb -d uninstall PACKAGE_NAME' 时,我收到一个错误 'DELETE_FAILED_INTERNAL_ERROR' 但是当我杀死 Emulator 实例时,我在卸载过程中得到了一个“成功”。

      【讨论】:

        【解决方案11】:

        就我而言,当我第一次在调试模式下编译应用程序然后尝试安装谷歌签名的应用程序时,我经常遇到这个问题。

        这是因为两个应用程序包名称相同但签名不同。 自从我升级到 Android 棒棒糖后,如果我通过设置\应用程序卸载应用程序,有时我什至会收到此错误。 如果您遇到此问题,请检查该应用是否安装在其他用户配置文件中并在所有用户帐户中卸载它。

        【讨论】:

          【解决方案12】:

          也许您正在尝试卸载手机管理员的应用。

          要能够卸载它,请转到“设置”>“安全”>“电话管理员”。 如果列出了应用程序,请取消选中并确认操作。

          之后,您应该可以使用应用设置区域或 adb 将其卸载。

          【讨论】:

            【解决方案13】:

            您有 apk 的名称,而不是包名称: 您应该首先知道包名称。为这盘磁带拍照:

            adb shell pm list packages

            一旦你有了包名(小心,包名就像 com.intel.... 而不是 package:com.intel...),tape:

            adb shell pm uninstall -k "package_name"

            还有宾果游戏!

            【讨论】:

              【解决方案14】:

              好吧,我遇到了同样的情况,我尝试了所有这些都没有结果..最后一个答案很接近..我做了以下事情:

              为了获得正确的包裹名称,请执行以下操作:

              adb shell pm list packages | grep "name of your app here"

              您应该会看到您的应用的正确名称.. 所以现在这个可以正常工作了:

              adb uninstall com.your-real-app-name
              

              最后命令运行再次起作用:

              ionic run android
              

              【讨论】:

              • 这对我有用。我认为这对我来说一定是区分大小写的问题。此外,如果我更改了包中某些字符的大小写,那么 adb install -r 对于这些 apk 也会失败,因为设备上包的大小写与我尝试的 APK 清单中的大小写不匹配安装。
              • 也为我工作。
              • 感谢您的回答,我发现我的包 de.some-thing.app 在设备上已重命名为 de.some_thing.app。使用后一个名称删除效果很好。
              【解决方案15】:

              这可以很简单,比如在错误的情况下输入包名称......

              我遇到了同样的问题 - 当实际的包名称包含大写字符时,我输入的包名称全部小写。

              adb uninstall -k <packageName - eg. com.test.app>
              

              (如果您要明确卸载,您可能不想要保留应用数据和缓存目录的 -k。)

              【讨论】:

              • 失败 [DE​​LETE_FAILED_DEVICE_POLICY_MANAGER]
              • @Radu。该答案仅解决了一个可能且微不足道的问题-微不足道,可能会被忽略。您的情况听起来像是您有一个非标准/典型的设备配置 - 可能是管理员(公司?)代理设置的策略,或者您尝试删除的内容以某种方式受到系统保护。无法帮助您,因为我不知道错误涵盖的内容。
              【解决方案16】:

              如果你通过 adb 卸载有问题,我可以推荐以下工具:

              https://github.com/patrickfav/uber-adb-tools

              您可以使用通配符并支持多种设备,还具有比普通 ADB 更好的错误处理能力(当然在后台使用它)。将在您的平台上运行。

              完全免责声明:我是开发者

              【讨论】:

                【解决方案17】:

                这对我有用:

                这是存储所有 APK 的目录:

                cd /system/app
                

                列出它们:

                ls
                

                选择要删除的一项。

                pm install -r <app_to_remove>.apk
                

                例子:

                $ pm install -r Google-Play-services.apk
                        pkg: Google-Play-services.apk
                Success
                


                我注意到,如果我尝试删除的应用程序正在运行,我会失败,因此请先将其终止。

                另外,我注意到您可能必须运行(在根设备上):

                $ su
                # mount -o remount +rw /
                

                【讨论】:

                • 这会删除应用程序@Geremia
                【解决方案18】:

                您可以按照以下步骤通过命令提示符从设备中卸载应用程序。

                1. 执行命令:adb -s [devicename] uninstall -k [packagename]。 此命令将保留设备中的数据和缓存,但会从设备中删除应用程序。
                2. 要连同应用程序一起从设备中删除数据和缓存,请执行以下命令。 adb shell pm uninstall -k [包名]。

                如果它显示成功,则您的应用已成功卸载'

                【讨论】:

                  【解决方案19】:

                  尝试从设置窗口禁用“即时运行”

                  【讨论】:

                    【解决方案20】:

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

                    完成此操作后,您可以使用此命令pm uninstall --user 0 &lt;package.name&gt; 卸载应用程序。其中0为Android系统主用户ID。这样你就不需要root你的设备了。

                    这是我在华为 p10 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 google play services (warning: take backup first!)
                    pm uninstall --user 0 com.google.android.gms
                    

                    【讨论】:

                    • 谢谢,我忘了--user 0 选项。
                    • adb shell pm uninstall --user 0 com.facebook.&lt;allthebloatware&gt;
                    • @Abhijit 简短的回答是肯定的。在 Unix 和 Linux 中,任何用户 id 为 0 的帐户都是 root 帐户。
                    • 不是这种情况。 User id 0 是 Android 系统中的主用户,与 Unix 用户 id 0 是 root 无关。
                    • Android 中有两种类型的用户。首先是您在系统 UI 中配置的实际用户。您可以在 Android 设置中拥有少量用户,这些用户中的每一个都有个人文件、设置和应用程序。您可以在这些用户之间切换界面。配置设备的第一个用户的 id 为 0,这就是答案中的这些命令所指的原因。第二种用户是 Unix 用户,因为 Android 使用 Linux 作为基础。当设备未植根时,普通用户无法访问这些用户。系统中的每个应用都是不同的用户。
                    【解决方案21】:

                    如果您使用小米设备,则需要登录小米帐号。

                    成功注册后,您可以通过 ADB 安装和卸载。

                    【讨论】:

                      【解决方案22】:

                      尝试从首选项中禁用“即时运行”! 它对我有用。

                      【讨论】:

                      【解决方案23】:

                      我的是三星j7 pro,问题很简单。

                      j7y17lte:/system $ pm list packages|grep airtel                                                                                                                                                                                            
                      package:com.samsung.android.airtel.stubapp
                      
                      j7y17lte:/system $ pm uninstall -k --user 0 com.samsung.android.airtel.stubapp
                      

                      请勿在 unistall 命令中包含单词 package

                      【讨论】:

                        【解决方案24】:

                        只需运行 ADB 并使用以下命令:

                        adb shell pm uninstall -k --user 0 <package name>
                        

                        你应该得到这个回报:

                        successful
                        

                        【讨论】:

                        • 如果我没有得到“成功”的回报怎么办?我遇到了失败 [INSTALL_FAILED_INVALID_APK: Missing existing base package for null]
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-03-12
                        • 2020-01-18
                        • 2011-07-25
                        • 1970-01-01
                        • 2017-07-12
                        • 2016-04-01
                        相关资源
                        最近更新 更多