APK安装失败。错误:无法解析错误字符串。

69

将 Android Package *.APK 文件拖放到 AVD (Android Virtual Device) 中会引发一个晦涩的错误:

The APK failed to install.
Error: Could not parse error string
  • 我已经尝试了最新API(28)和与我自己手机相匹配的一个AVD(Nougat 7.0)
  • APK是用buildozer构建的python Kivy APK
  • 我对Android开发很陌生,甚至不知道从哪里开始调试。有更好的日志吗?
  • 如果我通过文件管理器上传APK到AVD并尝试安装,它也会失败。
  • 然而,如果我将相同的APK上传到我的实际Android设备上,它可以工作!它不仅可以安装,而且打开和运行我的应用程序没有任何错误。
  • 允许未知来源

    (int)要使用的Android API

    android.api = 24

    (int)所需的最低API

    android.minapi = 24

    (int)要使用的Android SDK版本

    android.sdk = 24

    (str)要使用的Android NDK版本

    android.ndk = 9c

输入图像描述

APK安装失败。错误:无法解析错误字符串


我也遇到了这个问题,但是这个问题是由于最新的Oreo版本引起的。我猜测这与安全有关,说我们的应用程序未经验证(我想这个字符串与我们的包名有关),为确保我们设备的安全性,它们不会在Android设备上手动安装 - 通过Play Protect显示安全风险。 - karthik
我使用的是Nougat,那不是比Oreo早吗?并且我允许未知来源。 - Jonathan
20个回答

48

然而,如果我将同样的APK上传到我的实际Android设备上,它是可行的!不仅安装成功,而且打开应用程序后也能正常运行,没有任何错误。

这说明您的应用程序可能使用了与模拟器CPU架构不匹配的本地库(请参阅此问题)。

要获取更详细的错误消息,请通过终端安装您的应用程序:

adb install path_to_your_app/name_of_your_app.apk

您可能会看到以下内容:

adb: failed to install name_of_your_app.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries


1
是的。我刚刚通过 SDK 管理器更新了模拟器,现在它可以正常工作了。 - CodeToLife
1
打开Android Studio。点击菜单栏中的Tools,选择SDK Manager,切换到SDK Tools选项卡。查看“Android Emulator”一行。 - Ton
2
只有通过adb命令安装才对我起作用。 - Muhammad Shehroz Sajjad
对我来说,@MuhammadShehrozSajjad,谢谢你这个。 - DarkSkull

38

我遇到了同样的问题。问题在于,如果在模拟器上已经安装了相同版本的同一应用程序,则它不会被更新/安装。它会抛出与您得到的相同错误。

尝试以下解决方案来修复它。

  1. 从模拟器中卸载旧的APK,然后拖放新的APK,它会安装应用程序

  2. 从Build.gradle文件中更改版本号,如@Chuy47所建议的,构建新的APK并安装它

希望这有所帮助。


11

使用p4aarmeabi-v7a标志来构建apk后,我自己遇到了相当长时间的问题。如@Melquiades答案中所述,问题在于默认模拟器使用x86架构,因此它肯定不兼容。

解决方案是为x86构建您的apk,可以通过在创建命令中使用arch标志--arch=x86来指定。您可以在此处查看可用选项:https://github.com/kivy/python-for-android/blob/master/pythonforandroid/archs.py

个人经验是,使用任何标志而不是armeabi-v7apython3crystax ndk都无法找到适当的二进制文件。对于所有架构,使用python3和android ndk运行也无法正常工作。

如果您正在使用python3并想要构建所有架构,则可以使用buildozer。在buildozer.spec要求中指定python3crystax,在android.ndk_path行上链接ndk目录,并在该行上指定所选架构。

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86
android.arch = x86

按照这个教程安装Python 3.5:https://tecadmin.net/install-python-3-5-on-ubuntu/。根据您当前的设置,您可能需要降级或升级您的 cython 版本。请注意,0.27、0.27.2 都不能与 Kivy 兼容。我发现 cython 0.25.2 对我来说很有效。您可以删除之前的版本并安装您选择的版本:

sudo pip3 install -U --force-reinstall cython=0.25.2

如果你正在使用Ubuntu当然就更好了 :)

你需要通过在buildozer.spec中改变arch选项并对每个架构运行buildozer android debug来创建多个apk。你仍然可以发布到Play商店,因为Google有上传多个apk的选项: https://developer.android.com/google/play/publishing/multiple-apks

祝你好运 ;P

编辑 使用SDK 20/API 26/NDK 15c/Python 3.7SDK 20/API 24/NDK 14b/Python 3.7的python-for-android命令可以工作。我个人没有测试过后者,但可以在这个python-for-android帖子中找到更多信息。经过测试前者可以工作但不支持sqlite3


8

我需要创建一个新的apk,版本号比当前已安装的应用更高。

我的模拟器版本为8,当我试图安装与该版本相同的新apk时,出现了你提到的错误,因此解决方法是增加versionCode并生成新的apk。

请在build.gradle(Module: App)文件中进行操作。

android {
    defaultConfig {
        versionCode 9          <---
        versionName "1.1.0"    
        ...
    }
    ...
}

另一种解决方法是卸载当前应用并安装新的apk。

8

您还没有从模拟器中卸载该应用程序,或者您的apk文件尚未签名。

*免责声明-这是为了节省时间,自动生成已签名的apk文件 否则您可以通过... 点击Build->然后GenerateSignedApk来获得已签名的Apk。

这对我也是一个问题。 但后来我发现我的运行代码没有使用密钥证书进行签名。 您必须运行已签名的API才能安装已签名的API。

1.转到File(Alt-F)

2.转到项目结构查看此框会打开

  1. 在这里,您点击Module
  2. 点击应用程序
  3. 单击SigningCofig
  4. 单击debug 根据您发布的API更改签名配置 提供详细信息

SignedKeyCertificate文件路径

密码

keyAlis

keyAlias密码


6

针对Flutter开发人员

我从Android转到了Flutter,发布前的一个习惯是将apk文件扔到模拟器中进行测试以确保一切正常。但是在使用Flutter时这种方法行不通。通过搜索,我发现错误与x86架构有关。但为什么我能够正常调试x86,却不能安装?答案是Flutter仍然支持x86用于调试,但不支持用于发布:https://github.com/flutter/flutter/issues/43005

如果你强制使用flutter build x86:

build apk -t lib/env/main_stag.dart --flavor stag --target-platform android-arm,android-arm64,android-x64,android-x86

我将抛出错误:

Could not find io.flutter:x86_release:1.0.0

为了进行二次确认,请按照以下步骤执行: 步骤1: 尝试通过终端安装您的应用程序: adb install app_name.apk 您可能会看到这个信息: adb:failed to install app_name.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS:Failed to extract native libraries] 步骤2: 转到AVD Manager,检查您的仿真器CPU是否为x86。 enter image description here 步骤3: 创建一个具有x86_64的新仿真器,这样您就可以使用同一台仿真器安装apk并进行调试。

3

如果从模拟器中卸载应用程序无法解决问题,我只需要清除模拟器的数据:在AVD Manager中,单击该模拟器最右侧的向下箭头,然后选择“清除数据”。


3

在 Android 9(API 28)模拟器系统镜像上,我通过从 Play Store 应用程序中禁用 Google Play Protect 来解决了这个问题,并且成功摆脱了解析错误。

要禁用 Google Play Protect,请打开“Play Store”应用程序 => 点击菜单按钮 => 选择“Play Protect”选项 => 关闭“扫描设备以查找安全威胁”的选项。


谢谢。我对Kivy-Buildozer的.apk文件为什么无法安装并且没有错误信息感到非常烦恼。 - Reaversword

2

我通过重命名apk文件并确保以下内容来解决了这个问题:

  1. 文件名没有空格。
  2. 文件名不以数字开头。

希望对你有帮助。


1

这对我有用......

  • 打开 Play Store 应用商店
  • 进入菜单
  • 点击 Play Protect
  • 禁用扫描设备以检测安全威胁

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