无法手动将已签名的 apk 安装到设备,出现错误 "App not installed"

Cannot install signed apk to device manually, got error "App not installed"

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

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

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

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

以下是该过程的步骤:

我select 释放密钥,输入密码。

我做select发布构建类型而不是调试

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

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

如果可以请帮忙

"App not installed" 显示同一设备上已安装具有相同软件包的应用程序。只需删除您用于测试目的的第一个应用程序,然后再将其添加到已签名的 apk 中。这会起作用。干杯!

您可能正在使用 android 5.0 或更高版本的设备。

May be your development version is not uninstalled properly.

试试这个,

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

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

对于当前的 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 select 相应地(例如在 playstore 中发布使用 release)。
  5. Signature Version select V1V2 复选框。
  6. Finsih.
  7. explorer 转到您 select 用于存储 apk 的位置,您将看到 .apk 文件名,因为 app-release.apk 使用它。

这是一个很老的问题,但我的解决方案是在 build.gradle[=10= 中更改 versionCode(增加) ]

这里我解决了这个问题

这个问题背后的原因是,在phone中已经有一个具有相同包名的应用程序,但是在phone菜单中找不到它(你已经卸载了但实际上它仍在您的 phone 中)。

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

为所有用户执行卸载后,我已成功安装签名的 apk。 您还可以使用 adb 从 phone.

卸载应用程序
adb uninstall package name

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

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

选择签名版 v1 和 v2 都解决了我的问题....尝试一下

上面的 shubham soni 答案对我有用,实际上它恰好适用于 android 版本 >=5。0.In 以上你可以安装,只需在创建你的 apk 时使用它。 ..

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

Select签名版 v1 和 v2 都将解决该问题

v1 方案

A JAR file can be signed by using the command line jarsigner tool or directly through the java.security API. Every file entry, including non-signature related files in the META-INF directory, will be signed if the JAR file is signed by the jarsigner tool. For every file entry signed in the signed JAR file, an individual manifest entry is created for it as long as it does not already exist in the manifest

V2方案

v1 signatures do not protect some parts of the APK, such as ZIP metadata. The APK verifier needs to process lots of untrusted (not yet verified) data structures and then discard data not covered by the signatures. This offers a sizeable attack surface. Moreover, the APK verifier must uncompress all compressed entries, consuming more time and memory. To address these issues, Android 7.0 introduced APK Signature Scheme v2

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

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

转到 Build.Gradle(模块:应用程序)

使用这个 - minifyEnabled false

minifyEnabled false

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

如果您的 Android Studio 版本大于 3.0

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

升级到 android studio 3.0 后,您需要转到构建 -> 构建 Apk(s),然后从构建 -> 输出 -> apk -> 调试复制 apk

同样的事情发生在我身上,只要我从 Build> Build APK 生成我的 apk。我可以安装和 un-install apk 多次,没有任何问题,但是如果我生成 Build> Generate Signed APK,当我将 apk 传递给 phone 并尝试安装它时,它只允许我使用一次,即出现以下消息的同一次:

在那之前,如果我选择 "INSTALL IN ANY WAY",一切都很好,但是如果我卸载应用程序并想重新安装它(一种可能的情况),会发生以下情况:

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

在 Android Studio 3.0 及更高版本中

如描述here

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

AndroidManifest.xml

中的应用程序标记内添加android:testOnly="false"

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

文件 > 项目结构 > 构建变体 > Select 发布 > 确保 'Signing Config' 不为空 > 如果它是 select 来自 window $signingConfigs.release

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

我的 android 应用程序也遇到了同样的问题。 我刚刚更新了一个库,然后创建了一个签名的 APK。现在可以使用了。

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



确保您是否使用 Google 播放签名来签署您的应用程序。

如果你这样做了:

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


  • 上传成功后,打开菜单中的Artifact library
  • 您将看到刚刚上传的 apk。
  • 按下载按钮 select Download derived APK.

您现在可以安装 apk。

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

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

  1. 安装下载的 派生 APK

原因是 App Signing by Google Play signs release apps with different keys, if you have an app installed from Play Store, and you want to test the phone、"App not installed" 中的新版本应用程序(从 Android Studio 生成)是因为旧版本和新版本由两个不同的密钥签名:一个带有 Google Play 和一个使用您的密钥的应用程序签名。

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

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

在我的例子中,我试图测试安装一个签名的 APK,而我设备上当前安装的版本是未签名的(直接从 Android studio 构建调试版本)

Android Studio 4.1.1 如果您想创建调试 apk,并且在创建 apk 之前,您在 phone/simulator 上尝试了 运行(立即创建签名的 apk 将导致 APP NOT INSTALLED),您应该在创建签名 bundle/apk

之前清理项目

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

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

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

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

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

gradlew uninstallAll

  1. 签名版本和调试 apk 有效

(注:debug和release配置都有)

minifyEnabled false
shrinkResources false

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