无法安装自己生成的apk文件

21

我更新了我的应用并在设备上进行了测试。如果我通过eclipse的运行按钮测试应用程序,一切都正常,但是如果我将其导出到apk并尝试安装apk,则会失败。

没有错误代码或其他任何东西,它只是说应用程序未被安装。

任何想法为什么会发生这种情况?我只是在我的应用程序中更改了一些内容:我从我的应用程序中删除了basegameutils lib,并迁移到了新的不带basegameutils的api。就这样(除了一些错误修复,但不能成为原因)。

我已经重新启动了eclipse并多次清理了所有项目。

目标sdk为22,我正在使用该api级别的最新系统映像等(我的divce是运行5.1.1的股票nexus 6)。我还将构建工具更新到了23.0.1,从22.0.1中删除了22版本。这是原因吗?

我还尝试将apk上传到dev控制台,没有错误。

谢谢你的帮助。

编辑:

logcat输出说签名与先前安装的版本不匹配。

如果我尝试通过play商店安装当前的实时版本,也会出现错误消息,说明我无法安装此应用程序,因为另一个用户已在此设备上安装了不兼容的版本(但我没有安装它,也没有多个用户在设备上)。

如果我转到设置中的应用程序菜单,我的应用程序将显示在列表底部,但是有一个注释说该应用程序未安装给用户。如果我点击它,则所有按钮都无法点击(因此我无法卸载它)。

到底发生了什么?


同时也包括logcat输出。 - Farooq Arshed
2
@ IntelliJ Amiya: "我通过Eclipse中的运行按钮测试应用程序",我认为他正在使用Eclipse..!! - AndiGeeky
你是如何生成apk的? - Vinay Jayaram
我更新了我的帖子。希望这有所帮助。我通过Eclipse中的导出功能生成我的apk。 - user3254126
你的问题似乎与这个有关:https://dev59.com/zVwY5IYBdhLWcg3wWmpn - narko
请尽快转移到Android Studio,Eclipse对于Android开发的支持即将结束。http://android-developers.blogspot.co.il/2015/06/an-update-on-eclipse-android-developer.html - Hermit
12个回答

70

对我来说,选择签名版本v1和v2都解决了这个问题在此输入图像描述


对我来说,这是解决方案……但我还必须手动卸载我使用调试器的程序版本。 - PrfctByDsgn

14

您的签名已更改,因此如您所述,您必须卸载以前的版本。您尝试从设备界面卸载,但失败了 - 因此请尝试使用命令行进行卸载:

adb uninstall 您的包名

在Nexus设备上看到过,有时只有命令行卸载才有效。


我找到了一个解决方案,但你的解决方案可能也有效(虽然我不确定)。谢谢! - user3254126

10

我找到了一个解决方案,但我仍然不知道问题的原因。

在我的设备某个地方,尽管应用程序抽屉中没有显示出来,Play商店也告诉我相同的信息,但我的应用程序仍然安装着。在设置/应用程序菜单中,我的应用程序仍然存在(如我在原帖的编辑中所提到的),所以我点击了它。如果您点击菜单按钮,您可以为所有用户选择卸载,这样问题就解决了。现在我可以再次安装我的apk文件了。

我不知道这是怎么发生的,但希望这可以帮到你。

编辑:

我遇到了与这位先生一样的问题。那边的被采纳的答案比我的格式差的多 ;)

"因为另一个用户已经在此设备上安装了不兼容版本的应用程序,您无法安装此应用程序"


这种情况可能会发生在您在单个设备上拥有多个帐户的情况下。如果您卸载应用程序,则该应用程序将不可用于一个(或每个)帐户,但仍存储在内存中。如果您尝试安装使用不同密钥签名的应用程序,则会引发错误。 - kreatywny
当进行调试时,Android Studio会为所有用户安装应用程序。当安装失败时,我本来希望能够得到更好的错误提示信息。 - glez

9

我曾经遇到过同样的问题,我用了以下方法解决了这个问题,适用于当前的 Android Studio 2.3

  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文件并将其用作你的 playstore 或设备上的签名和认证的apk文件。

这种情况通常发生在未签名的APK上,因此具有固有功能的设备会拒绝此类APK。但是这里的问题是关于已签名的APK,但仍然无法安装的情况,只是因为人们之前尝试过安装它,并且由于卸载不完全而留下了残留物。 - Mantra

5
对于我来说,解决办法是在设备上禁用Play Protect。

对我来说,Android 8.0(奥利奥)存在这个问题。 - Youngjae

1
问题是因为您有一个测试应用程序版本。所以,您并没有真正升级该应用程序!那是两个不同的应用程序。您必须首先卸载之前的版本(测试),以便安装应用程序的发布(签名)版本。

1
我今天遇到了这个问题,尝试了这里的一些建议,以下是我解决问题的方法:清除了手机的缓存/垃圾文件,并卸载了应用程序的测试版本和它们的APK文件,然后重新安装了新的APK文件。在感到担忧之前,请先尝试这个方法。

1

1
我已经做过了。我能够运行我的apk文件多年,但今天突然就无法工作了。 - user3254126
你改了你的密钥库吗? - KishuDroid
不,我没有。就像我说的那样,我可以上传apk到开发者控制台而没有任何错误。不过我已经找到了解决方案。 - user3254126
尝试使用此链接:https://dev59.com/BF4b5IYBdhLWcg3wpzLv - KishuDroid

0

0

如果您在生成已签名 APK 之前有两个选项(V1(jar signature)和 V2(Full APK Signature)),现在应该使用V1 jar signature,因为不存在向后兼容性,并且所有版本小于7的 Android 手机都不会接受此签名。向后兼容性将在下一个 N 开发者预览版中添加。 在 developer.android 上也有关于这一点的解释,请参阅该链接: https://developer.android.com/about/versions/nougat/android-7.0#apk_signature_v2


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