【问题标题】:Cannot install signed apk to device manually, got error "App not installed"无法手动将签名的 apk 安装到设备,出现错误“未安装应用程序”
【发布时间】:2016-03-19 20:48:03
【问题描述】:

我想将我的应用程序发布到 GooglePlay,但首先我想对已签名的 apk 进行最后一次测试,以确保所有使用的 API 密钥都与发布版本(GMaps、Facebook 等)一起正常工作

所以我只是使用我们的发布密钥制作了我的应用的签名版本,当我尝试将应用安装到设备时出现错误:

我已尝试将 apk 复制到设备并使用 apk 安装程序应用安装它。

奇怪的是,当我使用调试签名密钥执行相同的过程时,一切都很好,我可以安装并运行应用程序。

以下是程序的步骤:

我选择释放键,输入密码。

我会选择发布构建类型而不是调试

以防万一我还在 gradle 文件中定义了签名密钥,但我必须承认我不知道是否有必要。

我现在尝试了 7 次 7 次,所以我认为这个问题不仅仅是一个 密码输入错误,也我可以使用标准的调试android签名密钥来完成这项工作。

如果可以的话,请帮忙。

【问题讨论】:

  • 萨拉姆。这个答案可能会解决您的问题:http://stackoverflow.com/a/42745459/1676736
  • 我也面临同样的问题。真正的原因是什么?你发现了吗? @Adam Varhegyi
  • @RohitSingh 下面的答案,哈哈。
  • 我的意思是即使你卸载了该应用程序也没有完全卸载?或者它只有 Android 5.0(甚至更高版本)。
  • @RohitSingh 我的问题与答案所描述的完全一样。该应用程序是为手机上的另一个用户安装的,我没有看到其他用户使用它。所以我不得不为“所有用户”卸载它

标签: android certificate release android-install-apk


【解决方案1】:

您可能使用的是android 5.0或以上的设备。

可能是您的开发版本未正确卸载。

试试这个,

只需转到 设置 --> 应用程序 --> 点击您的应用程序。 --->在操作栏菜单的应用信息页面中会有一个名为“为所有用户卸载”的选项点击它。您的应用程序将被完全卸载,现在您可以尝试安装新版本,没有任何问题。希望对你有帮助

注意:这适用于棒棒糖及以上。 请参阅随附的屏幕截图。

【讨论】:

  • 他们怎么能以这种方式做到这一点。顺便说一句,谢谢。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 非常感谢,这个错误花了我一周的时间才弄明白
  • 很高兴,帮到了你!! @DiegoVinícius
【解决方案2】:

对于当前Updated Android Studio 2.3 用户,此答案适合您,因为现在几乎没有人使用 Eclipse 进行 Android 开发,因为 Android Studio 已经取得了巨大的进步。

所以,按照这种方式创建您的Signed apk 文件。

  1. Build > 生成Signed apk
  2. 创建Keystore path
  3. 输入Password, alias, key password
  4. Build type 相应选择(例如,在 Playstore 中发布使用 release)。
  5. Signature Version 同时选中 V1V2 复选框。
  6. Finsih
  7. explorer 转到您选择存储apk 的位置,您将看到.apk 文件名为app-release.apk 使用它。

【讨论】:

  • 选择签名 V1 做到了
  • 你节省了我很多时间
  • 为我工作。省时间 。谢谢
  • 同时检查 V1V2 是解决方案!
  • 检查 V1 为我解决了这个问题。以前,只检查了 V2。
【解决方案3】:

选择签名版本 v1 和 v2 都为我解决了这个问题....试试看

【讨论】:

  • 这正是我的问题。问题仍然存在,为什么我们还要标记 V1(jar 签名)?谷歌希望我们如何知道这一点?
  • 这不是强制性的。如果可能,您应该同时选中这两个复选框,但如果新的 V2 签名机制给您带来问题,您可以在遇到问题时同时选中这两个。
【解决方案4】:

同样的事情发生在我身上,只要我从 Build> Build APK 生成了我的 apk。我可以多次安装和卸载 apk 没有任何问题,但是如果我生成 Build> Generate Signed APK,当我将 apk 传递给手机并尝试安装它时,它只允许我一个场合,同样的一个出现了以下消息:

在此之前,如果我选择“以任何方式安装”,一切都很好,但是如果我卸载了该应用程序并想要重新安装它会发生什么(一种可能的情况),发生了以下情况:

所以我通过禁用播放保护解决了这个问题,我实现了(在 Google Play 中)>菜单>播放保护>搜索安全威胁(禁用)。

【讨论】:

  • 这个解决方案对我有用。 Google +1 的另一个变化
  • 你救了我的命!
  • 您能告诉我们为什么会这样吗?我做错了什么导致这个问题得到解决?
【解决方案5】:

“未安装应用程序”显示具有相同软件包的应用程序已安装在同一设备中。只需删除您用于测试目的的第一个应用程序,然后再将其用于签名的 apk。这将起作用。干杯!

【讨论】:

  • 是的,我知道,但以前没有安装。
  • 如何在不删除当前应用的情况下安装更高版本的apk?
【解决方案6】:

同时选择 Signature Version v1 和 v2 将解决问题

v1 方案

可以使用命令行 jarsigner 工具或 直接通过 java.security API。每个文件条目,包括 META-INF 目录中与签名无关的文件,将被签名 如果 JAR 文件由 jarsigner 工具签名。对于每个文件条目 在签名的 JAR 文件中签名,创建一个单独的清单条目 只要它不存在于清单中就可以了

V2 方案

v1 签名不保护 APK 的某些部分,例如 ZIP 元数据。 APK 验证器需要处理大量不受信任的(尚未 已验证)数据结构,然后丢弃未涵盖的数据 签名。这提供了相当大的攻击面。此外,APK 验证者必须解压缩所有压缩条目,耗费更多时间 和记忆。为了解决这些问题,Android 7.0 引入了 APK 签名方案 v2

默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 使用 APK 签名方案 v2 和使用 JAR 签名的传统签名方案对您的应用进行签名。

建议使用 APK 签名方案 v2,但不是强制性的。 please see the details

【讨论】:

    【解决方案7】:

    在 Android Studio 3.0 及更高版本中

    here所述

    注意:运行按钮构建一个带有 testOnly="true" 的 APK,这意味着该 APK 只能通过 adb(Android Studio 使用)安装。如果您想要一个人们可以在没有 adb 的情况下安装的可调试 APK,请选择您的调试变体并点击 Build Bundle(s) / APK(s) > Build APK(s)。

    AndroidManifest.xml 中的Application 标签内添加android:testOnly="false"

    参考:https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html

    【讨论】:

      【解决方案8】:

      shubham soni 上面的答案对我有用,实际上它发生在 android 版本 >=5.0 上。在上面你可以安装,只需在创建 apk 时使用它...

      【讨论】:

      • 为什么这个重复的答案?
      • @sziraqui :Subhankar soni 没有提到为什么“无法手动将签名的 apk 安装到设备,出现错误”“未安装应用程序”。我遇到了与上面提到的 Os 版本相关的相同问题,所以为了更好地理解,我提到了。我的回答有什么问题吗?。对于 android 版本
      • 您的答案只是在原始答案的基础上再增加一点,因此应该是评论。如果您将此作为答案发布,则应添加某种引用来支持您对 android 5.0 的主张。如果您的问题实际上与 android ide 而不是 android 版本有关怎么办?
      • 谢谢,答案中的图片给了我尝试启用 V1 和 V2 签名的想法。以前我只使用 V1
      【解决方案9】:

      minifyEnabled false

      在所有论坛上进行了 3 天的研究后,这是唯一对我有用的!

      【讨论】:

      • 这似乎只是 this existing answer 的重复。
      • 添加评论。
      • 换句话说,这应该作为评论发布在that answer 上,而不是作为答案本身。
      【解决方案10】:

      我在这里解决了这个问题

      这个问题的原因是,手机里已经有一个同名的应用程序,但是你在手机菜单中找不到它(你已经卸载了,但实际上它还在你的手机里)。

      要查看应用程序,请转到手机SETTINGS -> APPS。 在那里你可以看到应用程序,但里面的 UNINSTALL 按钮可能被禁用。单击菜单溢出按钮以查看为所有用户卸载

      为所有用户执行卸载后,我已成功安装我签名的 apk。 您也可以使用 adb 从手机中卸载应用程序。

      adb uninstall package name
      

      除此之外, 如果您的手机支持多个用户,然后检查是否没有为其他用户安装相应的应用程序。如果是为他人安装的,请先卸载之前的应用,然后重试

      【讨论】:

        【解决方案11】:

        我今天遇到了同样的问题,我记得我使用“新”Google Play 签名来签署我的 apk:



        确保您是否使用 Google Play 签名为您的应用程序签名。

        如果你这样做了:

        • 将您的 apk 上传到 Google 控制台(和您一样) 通常会在更新您的应用程序时使用):


        • 上传成功后,在菜单中打开Artifact library
        • 您会看到刚刚上传的 apk。
        • 按下载按钮并选择Download derived APK

        您现在可以安装 apk。

        您可以在下载 apk 后删除草稿,而无需将您的应用程序更新到 Google Play 商店

        【讨论】:

        • 谢谢,经过 3-4 小时的努力,它成功了。
        【解决方案12】:

        转到 Build.Gradle(module:app)

        使用这个 - minifyEnabled false

        【讨论】:

          【解决方案13】:

          这是一个很老的问题,但我的解决方案是在 build.gradle

          中更改 versionCode(增加)

          【讨论】:

            【解决方案14】:

            Android Studio 4.1.1 如果您想创建调试 apk,并且在创建之前尝试在手机/模拟器上运行的 apk(立即创建签名 apk 会导致 APP 未安装),您应该在创建签名包/apk 之前清理项目

            【讨论】:

            • 谢谢,伙计!这将永远持续下去。
            • 乐于助人! :)
            【解决方案15】:

            这可能是因为您从外部 SD 卡存储运行 APK 文件。 只需将 APK 文件复制到内部存储中即可解决问题

            【讨论】:

              【解决方案16】:

              这可能是由于您选择了签名版本。在某些手机上,如果签名版本选择为 V2,则会出现安装错误。因此,如果发生这种情况,请尝试选择 V1,它肯定会起作用。

              【讨论】:

                【解决方案17】:

                从 AndroidManifest.xml 中删除 android:testOnly="true" 属性有效。 link

                【讨论】:

                  【解决方案18】:

                  如果您的 Android Studio 版本高于 3.0

                  看起来我们在设备上从 build -->output->apk 文件夹运行后无法直接使用该 apk。

                  升级到 android studio 3.0 后,您需要转到 Build -> Build Apk(s) 然后从 build -> output -> apk -> debug 复制 apk

                  【讨论】:

                  • 这个问题的标题 - "Cannot install signed apk"。您指的是调试 apk。
                  【解决方案19】:

                  文件>项目结构>构建变体>选择发布>确保“签名配置”不为空>如果它是从下拉窗口中选择的$signingConfigs.release

                  我使用 Android Studio 3.1.4 执行此操作,它允许我在执行上述创建发布 apk 和发布密钥并将信息添加到应用程序 gradle 的所有步骤后创建发布 apk。干杯!

                  【讨论】:

                  • $signingConfigs.release 不可用,只有$signingConfigs.debug 可用。
                  • 然后转到 Build > Generate APK > 选择 APK 并按照说明进行操作。
                  【解决方案20】:

                  如果您的应用启用了Google Play 应用签名,则无需卸载 Google Play 版本,请按照以下步骤操作:
                  1. 使用您的发布密钥制作应用的签名版本
                  2. 转到 Google Play 开发者控制台
                  3. 使用您应用的新签名版本创建封闭轨道版本(alpha 或 beta 版本)
                  4.您现在可以下载由Google Play App Signing签名的apk,选择派生的APK

                  1. 安装下载的派生APK

                  原因是 App Signing by Google Play 使用不同的密钥对发布应用程序进行签名,如果您从 Play 商店安装了应用程序,并且您想测试新发布版本的应用程序(从 Android Studio 生成) 在您的手机中,出现“未安装应用程序”,因为旧版本和新版本由两个不同的密钥签名:一个使用 Google Play 应用签名,另一个使用您的密钥。

                  【讨论】:

                    【解决方案21】:

                    请卸载设备中的调试应用或仅增加版本代码以解决此问题

                    【讨论】:

                      【解决方案22】:

                      在我的情况下,我试图测试安装已签名的 APK,但我设备上当前安装的版本未签名(直接从 Android Studio 构建调试版本)

                      【讨论】:

                        【解决方案23】:

                        我在 MiA2 中使用 Android 10。我犯的错误是我试图通过 ES Explorer 安装应用程序。我尝试了设置-> 应用程序和通知-> 高级-> 特殊应用程序访问-> 安装未知应用程序-> ES 文件管理-> 允许来自此来源。即使那样,该应用程序也不会安装。

                        然后我厌倦了使用默认文件管理器安装该应用程序,并且安装很容易。

                        【讨论】:

                          【解决方案24】:

                          选中的答案是针对有根设备的,或者至少它对我不起作用。 我找到了一种方法,您可以通过使用 adb uninstall app.package.name 从 adb 卸载您的 apk 来简单地解决问题(确保您的手机上安装了 Debug 应用程序) 然后尝试安装签名的apk。希望对大家有所帮助。

                          【讨论】:

                            【解决方案25】:

                            我尝试了很多东西,下面的组合奏效了

                            1. 清理,重建
                            2. 生成新密钥。我使用了一个以前没有使用过的新密钥别名。此外,对于所有密码,我只使用了字母和数字,没有任何空格或特殊字符
                            3. 要从设备上卸载任何 apk、版本等,我通过 USB 连接我的设备并运行命令

                            gradlew 卸载全部

                            1. 签名的版本和调试 apk 工作

                            (注意:调试和发布配置有)

                            minifyEnabled false
                            shrinkResources false
                            

                            【讨论】:

                              【解决方案26】:

                              versionCodeversionName 必须大于应用级别的预览版build.gradle file

                              【讨论】:

                                【解决方案27】:

                                我的 android 应用程序也面临同样的问题。 我刚刚更新了一个库,然后创建了一个签名的 APK。现在它正在工作。

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2011-12-12
                                  • 1970-01-01
                                  • 2019-06-12
                                  • 2016-05-10
                                  • 1970-01-01
                                  • 2016-09-14
                                  相关资源
                                  最近更新 更多