无法手动安装已签名的apk到设备上,出现错误“应用未安装”。

130
我可以帮助你翻译以下内容:

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

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

enter image description here

我尝试将apk复制到设备并使用apk安装程序安装它。奇怪的是,当我使用debug签名密钥进行相同的操作时,一切都很好,我可以安装和运行应用程序。以下是该过程的步骤:我选择发布密钥,输入密码。

Here are the steps of the procedure:

我选择发布版本而不是调试版本

I do select release build type instead of debugging

为了安全起见,我也在gradle文件中定义了签名密钥,但我必须承认我不知道这是否必要。

Just in case i also defined in the gradle file the signing keys but I must admit i dont know is it necessary.

我已经尝试了7次,所以我认为这个问题不仅仅是密码输入错误,同时我可以使用标准的debug android签名密钥来解决这个问题。如果您能帮忙,请帮忙。

2
你好。这个答案可能会解决你的问题:https://dev59.com/BF4b5IYBdhLWcg3wpzLv#42745459 - Sayed Abolfazl Fatemi
我也遇到了同样的问题。真正的原因是什么?你找到答案了吗?@Adam Varhegyi - Rohit Singh
@RohitSingh 下面的答案,哈哈。 - Adam Varhegyi
我的意思是,即使您已卸载应用程序,它仍未完全卸载?还是只有Android 5.0(甚至更高版本)才会出现这种情况。 - Rohit Singh
1
@RohitSingh 我的问题正如答案所描述的那样。该应用程序是为手机上的另一个用户安装的,我在不同的用户下没有看到它。因此,我必须卸载它以供“所有用户”使用。 - Adam Varhegyi
28个回答

103

你可能正在使用 Android 5.0 或以上版本的设备。

也许你的开发版本没有被正确地卸载。

尝试以下操作:

只需前往设置 --> 应用程序 --> 点击您的应用程序。--> 在应用信息页面中,在操作栏菜单中会有一个名为" 卸载所有用户 "的选项,请单击该选项。您的应用将被彻底卸载,现在您可以尝试安装新版本而不会出现任何问题。希望这可以帮到您。

注意:此方法适用于Lollipop及以上版本。请参考附上的屏幕截图。

完全卸载 Lollipop 及以上版本


他们是怎么以那种方式完成这个的,真是魔法吗? 顺便说一句,谢谢你的工作。 - Adam Varhegyi
2
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面发生更改可能会变得无效。 - SOFe
谢谢你,这个 bug 让我花了一周时间才解决。 - Diego Vinícius

73
对于当前使用更新的 Android Studio 2.3 的用户,本答案是为您准备的,因为现在很少有人使用 Eclipse 进行 Android 开发,而 Android Studio 已经有了巨大的进步。所以,请按照以下步骤创建您的已签名的 apk 文件。
  1. Build > Generate Signed apk
  2. 创建 Keystore path
  3. 输入 Password, alias, key password
  4. 根据需要选择 Build type(例如发布到 Playstore,请使用 release)。
  5. 选择 Signature Version,选中 V1V2 复选框。
  6. Finsih
  7. 从您选择存储 apk 文件的 explorer 转到该位置,你会看到您的 .apk 文件名为 app-release.apk,请使用它。

15
选择签名 V1 完成。 - Meanman
6
同时检查 V1V2 是解决方案! - Ghasem
1
检查了V1之后,问题得到了解决。之前只有V2被检查了。 - BluJ IT

57

对我来说,选择签名版本v1和v2两者都解决了这个问题... 可以尝试一下在这里输入图片描述


4
这正是我的问题。问题仍然是:为什么我们还要标记V1(jar签名)?而Google又如何指望我们知道这一点呢? - A.Alqadomi
这不是强制性的。如果可能的话,您应该同时勾选这两个复选框,但如果新的V2签名机制给您带来问题,您可以在遇到问题时同时勾选这两个复选框。 - Shubhamhackz

46
当我使用 "Build> Build APK" 生成APK时,我遇到了同样的问题。我可以安装和卸载APK多次而没有任何问题。但是,如果我使用 "Build> Generate Signed APK" 生成APK,将其传输到手机并尝试安装它时,只能允许我一次安装。屏幕显示如下消息:enter image description here 虽然选择“以任何方式安装”可以解决这个问题,但是如果我将应用程序卸载并想要重新安装它,会出现以下情况:enter image description here 因此,我通过禁用Play Protect来解决这个问题。我在Google Play中找到此选项(菜单> Play Protect> 搜索安全威胁(禁用))。enter image description here enter image description here

这个解决方案对我有效。Google +1 进行了另一个更改。 - Ready Android
请问您能告诉我们为什么会发生这种情况吗?是我做错了什么导致需要修复吗? - sparkhead95

20

如果同一设备上已经安装了相同包名的应用,则会显示“应用未安装”。在将应用程序制作成已签名的 apk 文件之前,请先删除您用于测试目的的第一个应用程序。这样就可以解决问题。祝贺!


12
是的,我知道,但之前并没有安装。 - Adam Varhegyi
8
如何安装更高版本的apk,而不删除当前应用程序? - Roman Soviak

15

选择同时使用 Signature Version v1 和 v2 可以解决这个问题

enter image description here

v1 签名方案

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

V2 签名方案

v1 签名无法保护 APK 的某些部分,例如 ZIP 元数据。APK 验证器需要处理大量未经验证的数据结构,然后丢弃未被签名覆盖的数据。这提供了一个相当大的攻击面。此外,APK 验证器必须解压缩所有压缩的条目,消耗更多时间和内存。为解决这些问题,Android 7.0 引入了 APK 签名方案 v2

默认情况下,Android Studio 2.2 和 Gradle 2.2 的 Android 插件会使用 APK Signature Scheme v2 和传统的 JAR 签名方案对应用进行签名。

使用 APK Signature Scheme v2 是推荐的,但不是强制性的。 请参阅详细信息


12

在Android Studio 3.0及以上版本中

此处所述

注意:运行按钮会构建一个testOnly="true"的APK,这意味着该APK只能通过adb(即Android Studio使用的方式)安装。如果您想要一个可调试的APK,人们可以在没有adb的情况下安装它,请选择您的debug variant并单击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

这里我解决了这个问题

这个问题的原因是,手机中已经有一个相同包名的应用程序,但您无法在手机菜单中找到它(您已经卸载了它,但实际上它仍然在您的手机中)。

要查看该应用程序,请转到手机的设置 -> 应用。 在那里,您可以看到该应用程序,但其中的卸载按钮可能被禁用。点击菜单溢出按钮以查看所有用户的卸载

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

adb uninstall package name

除此之外,如果您的手机支持多个用户,则请检查其他用户是否已安装了相应的应用程序。如果其他用户已安装该应用程序,则先卸载先前的应用程序,然后再尝试安装。

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


enter image description here


请确保您已经使用Google Play签名对应用程序进行签名。

如果您已经签名:

  • 将您的apk上传到Google控制台(就像更新应用程序一样):

enter image description here


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

现在您可以安装apk了。

下载apk后,您可以删除草稿而不必将应用程序更新到Google Play商店中。


2
谢谢,经过3-4小时的奋斗终于成功了。 - Rohit Maurya

8

以上Shubham Soni的回答对我有用,实际上这发生在Android版本>=5.0的情况下。在上述中,您只需要使用此选项创建您的apk文件即可安装enter image description here


1
为什么会有这个重复的答案? - sziraqui
@sziraqui:Subhankar soni没有说明为什么“无法手动安装已签名的apk文件,显示错误信息“应用程序未安装”。对于与我上面提到的操作系统版本相关的问题,我也遇到了同样的问题,所以为了更好地理解,我提到了这一点。我的回答有什么不对吗?对于Android版本<=5.0,您将能够在不标记两个签名版本复选框的情况下安装相同的apk文件。 - Amit raj
1
你的回答只是在原来的回答上添加了一个点,所以它应该是一条评论。如果你将其作为答案发布,你应该添加某种引用来支持你关于Android 5.0的说法。如果你的问题实际上与Android IDE而不是Android版本有关怎么办? - sziraqui
谢谢,答案中的图片让我想到尝试同时启用V1和V2签名。之前我只使用了V1。 - jasxir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接