【问题标题】:Android: How to Know if any application is already installed in android device using adb?Android:如何知道是否已经使用 adb 在 android 设备中安装了任何应用程序?
【发布时间】:2014-01-21 13:41:26
【问题描述】:

我必须使用 adb 安装一个包名称如“com.xyz.game”的 android 应用程序。 我想使用 shell 脚本自动化这个过程。这个过程就像已经安装了应用程序,卸载它(使用命令 adb uninstall com.xyz.game)并使用“adb install game.apk”安装,否则简单的“adb install game.apk”。

我怎样才能做到这一点?

【问题讨论】:

    标签: android shell adb


    【解决方案1】:

    考虑到@Joel 的回答,只需单线即可

    # uninstall only if exists
    adb shell pm list packages | grep com.your.app.package && adb uninstall com.your.app.package
    

    【讨论】:

      【解决方案2】:

      [更新 2]

      不使用grep

      adb shell pm list packages [your.package.name]below 回答中所述

      [更新]

      根据下面的(也)正确答案,尝试 grep 来自 pm list packages 的结果。

      adb shell pm list packages | grep com.your.app.package


      [原创]

      如果应用程序已经安装,并且如果您尝试再次安装相同的应用程序,adb 将返回错误 - Failure [INSTALL_FAILED_ALREADY_EXISTS]。但是,如果要重新安装已经安装的应用程序,请使用-r 参数。

      例如:

      adb install -r game.apk
      

      【讨论】:

      • 似乎,-r 标志不起作用!如果已经安装了应用程序,它将忽略安装。
      • 由于我有时必须对使用不同证书签名的应用程序的发布和调试版本进行测试,因此我必须手动执行卸载重新安装以确保其正常进行。
      • 这是一个糟糕的解决方案。最好按照其他答案中的建议使用 pm list packages 命令进行检查。
      • -r 标志是否会在重新安装之前完全清除旧应用程序?我使用adb uninstall 的主要方式之一是,如果我怀疑在重新部署构建时某些缓存数据没有被清理,并且想要确保我是从全新的状态安装。
      • 使用 grep 更好,因为list packages com package_name 将返回一个数组,其中包含与 package_name 部分匹配的所有包(基本上,作为 grep)。如果您正在寻找预安装的应用程序,这可能是一个问题,这可能是一个巨大的命名空间。案例:我想卸载 gmail(如果存在)(即 com.google.android.gm),并且我的脚本在删除它之前使用 adb shell pm list packages com.google.android.gm 测试了它的存在,但它在我的设备上返回了三个包,包括 com.google .android.gm。我用| grep -w package_name 修复了它,用-w 进行单词匹配。
      【解决方案3】:

      Android 7.0 引入了cmd(一种新的基于本机代码的)工具,与PackageManager 等Android 服务进行交互的速度比pm 等基于Java 字节码的旧工具要快得多。所以对于最近的 Android 版本而不是 adb shell pm list packages <package.name.substring> 你应该使用

      adb shell cmd package list packages <package.name.substring>
      

      【讨论】:

        【解决方案4】:

        无需使用 grep。使用以下命令,您可以简单地检查应用程序是否已经存在。

        运行 ADB 命令

        adb shell pm list packages [your.package.name]

        如果应用程序已经安装,那么上面的命令将返回,

        包:[your.package.name]

        否则它不会返回任何东西,即空字符串。

        【讨论】:

        • 你甚至不需要写出完整的名字,所以它很像grep,无需输入| grep
        • 这对我很有用,因为如果找不到 grep 会返回一个非零退出代码,而这总是返回一个零退出代码。
        【解决方案5】:

        尝试 grep 来自 pm list packages 的结果。

        adb shell pm list packages | grep com.xyz.game
        

        如果已经安装,您可能会看到结果。

        package:com.xyz.game
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-20
          • 1970-01-01
          • 2020-04-24
          • 2017-02-11
          相关资源
          最近更新 更多