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

问题描述 投票:10回答:11

将Android软件包* .APK拖放到AVD(Android虚拟设备)中会引发一个神秘的错误:

The APK failed to install.
Error: Could not parse error string
  • 我尝试过使用最新API(28)的AVD和一个与我自己的手机匹配的AVD(Nougat 7.0)
  • APK是用buildozer构建的python Kivy APK
  • 我是Android开发的新手。我甚至不知道从哪里开始调试这个。有更好的日志吗?
  • 如果我通过文件管理器将APK上传到AVD并安装它也会失败。
  • 但是,如果我将这个相同的APK上传到我的实际Android设备,IT工作!它不仅安装,而且打开并运行我的应用程序,没有错误
  • 允许使用未知来源 (int)要使用的Android API android.api = 24 (int)所需的最低API android.minapi = 24 (int)要使用的Android SDK版本 android.sdk = 24 (str)Android NDK版本使用 android.ndk = 9c

enter image description here

The APK failed to install. Error: Could not parse error string

android avd
11个回答
20
投票

但是,如果我将这个相同的APK上传到我的实际Android设备,IT工作!它不仅安装,而且打开并运行我的应用程序,没有错误

这告诉我这可能是因为你的应用程序使用了与模拟器cpu架构不匹配的本机库(请参阅此question

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

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


0
投票

这对我有用.....

  • 打开Play商店
  • 转到菜单
  • 点按“播放保护”
  • 禁用扫描设备以应对安全威胁

0
投票

试试这个:这对我来说更好。

enter image description here

步骤1 。清洁项目

第2步 。重建项目

第3步。运行App

我希望它对你有所帮助。


9
投票

我面临同样的问题。问题是,如果在仿真器上已经安装了相同版本的相同应用程序,那么它将无法进行更新/安装。你会得到同样的错误。

请尝试以下解决方案来解决它。

  1. 从模拟器中卸载旧的APK,然后拖放新的APK,它将安装该应用程序
  2. 按照@ Chuy47的建议更改Build.gradle文件中的版本号,构建新的APK并安装它

希望能帮助到你。


5
投票

我必须使用比当前安装的应用程序更高的VersionCode创建一个新的apk。

我的模拟器有版本8,当我尝试安装相同版本的新apk时,我得到你提到的错误,所以解决方案是增加versionCode并生成一个新的apk

在build.gradle(Module:App)文件中执行此操作

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

另一个解决方案是卸载当前的应用程序并安装新的apk


4
投票

在使用p4a标志使用armeabi-v7a构建apk后,我花了相当长的时间来解决这个问题,我发现了问题,如@Melquiades回答中所述,默认模拟器使用x86架构,所以当然它不兼容。

解决方案是为x86建立你的apk,你可以通过使用arch flag - p4a--arch=x86创建命令中指定这样做。你可以在这里看到可用的选项:https://github.com/kivy/python-for-android/blob/master/pythonforandroid/archs.py

就个人而言,用python3crystax以外的任何标志运行armeabi-v7a ndk都找不到合适的二进制文件。对于所有架构,使用python3和android ndk运行同样失败。

如果您正在使用python3并且想要为所有体系结构构建,则可以使用buildozer。在python3crystax要求中指定buildozer.spec,链接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上运行:)

你有它。您需要通过更改arch中的buildozer.spec选项并为每个体系结构运行buildozer android debug来为不同的体系结构创建多个apks。您仍然可以发布到Play商店,因为Google可以选择上传多个apks: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 post找到。测试过前者后,我可以验证它有效,但不支持sqlite3


1
投票

对我来说,在Android 9(API 28)模拟器系统映像上,从Play商店应用程序禁用Google Play Protect起了作用,我能够摆脱解析错误。

要停用Google Play Protect。打开“Play商店”应用程序=>点击菜单按钮=>选择“播放保护”选项=>禁用选项“扫描设备的安全威胁”。


1
投票

确保您的仿真器(Android虚拟设备)上尚未安装该应用程序当您将新的.apk或释放一个应用程序拖到仿真器时,您将收到错误:无法解析错误字符串。

1)从设备中删除现有应用程序

2)拖动以安装新的.apk


0
投票

你能验证该应用程序的最低sdk版本吗?和你的虚拟设备Android版本

AVD版本必须大于或等于应用程序的最小sdk版本

如果更大,请尝试启用USB调试


0
投票

执行以下操作似乎解决了这个问题:

  • 通过kivy virtual machine on virtual box切换到建筑物(buildozer不支持所有构建机器)
  • 然后在buildozer.spec中评论buildozer SDK设置(恢复到默认SDK版本)(biuldozer不支持所有SDK)

0
投票

我设法通过RENAMING apk文件解决了这个问题并确保:

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

希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.