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

时间:2018-08-10 18:11:19

标签: android avd

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

The APK failed to install.
Error: Could not parse error string
  • 我尝试了使用最新API(28)且与我的手机(Nougat 7.0)匹配的AVD
  • 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

enter image description here

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

20 个答案:

答案 0 :(得分:16)

  

但是,如果我将同一个APK上传到我的实际Android设备,那就行得通!它不仅可以安装,而且可以正常打开并运行我的应用程序

这告诉我,可能是因为您的应用程序使用的本地库与模拟器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

答案 1 :(得分:6)

我面临着同样的问题。问题是,如果在模拟器上已安装相同应用程序且具有相同版本,则它将不会更新/安装它,并且会引发与您相同的错误在做了。

尝试以下解决方案进行修复。

  1. 从仿真器中卸载旧的APK ,然后拖放新的APK,它将安装应用程序

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

希望有帮助。

答案 2 :(得分:5)

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

我的模拟器的版本为8,而当我尝试安装具有相同版本的新apk时,却出现了您提到的错误,因此解决方案是增加versionCode并生成一个新apk。

在build.gradle(模块:App)文件中执行

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

另一种解决方案是卸载当前应用并安装新的APK

答案 3 :(得分:3)

对于FLUTTER DEV

我从Android切换到Flutter,在发布之前,我的一个习惯就是将apk投向模拟器,以确保一切正常。但是使用Flutter,它不起作用。搜索后,我发现错误与x86体系结构有关,但是为什么我可以在x86上正常调试却无法安装?答案是Flutter仍支持x86进行调试,但不支持发布:https://github.com/flutter/flutter/issues/43005

如果您强制抖动,请构建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并使用同一仿真器进行调试。

答案 4 :(得分:3)

在使用p4a标志使用armeabi-v7a构建apk之后,我花了相当长的时间自己经历了此问题,正如@Melquiades答案中概述的那样,我发现了问题,默认仿真器使用{ {1}}架构,因此当然不兼容。

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

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

如果您正在使用armeabi-v7a,并且希望针对所有体系结构进行构建,则可以使用python3。在buildozer要求中指定python3crystax,在buildozer.spec行上链接ndk目录,并在该行上指定您选择的体系结构

android.ndk_path

按照本教程安装python 3.5:https://tecadmin.net/install-python-3-5-on-ubuntu/。您可能需要根据当前设置降级或升级# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86 android.arch = x86 版本。请注意,0.27和0.27.2均不适用于Kivy。我发现cython 0.25.2对我有用。您可以删除以前的版本并通过以下方式安装:

cython

当然,如果您在Ubuntu上运行:)

就在那里。您需要通过更改sudo pip3 install -U --force-reinstall cython=0.25.2 中的arch选项并为每种体系结构运行buildozer.spec来为不同体系结构创建多个apk。您仍然可以发布到Play商店,因为Google可以选择上传多个APK:https://developer.android.com/google/play/publishing/multiple-apks

祝你好运; P

使用buildozer android debugSDK 20 / API 26 / NDK 15c / Python 3.7

EDIT python-for-android命令起作用。我没有亲自测试后者,但是可以在此python-for-android post中找到更多信息。经过测试前者,我可以验证它是否有效,但不支持SDK 20 / API 24 / NDK 14b / Python 3.7

答案 5 :(得分:2)

对我来说,在Android 9(API 28)模拟器系统映像上,从Play商店应用中禁用Google Play Protect可以解决问题,而且我能够摆脱解析错误。

  

禁用Google Play保护。打开“ Play Store”应用程序=>点击   在菜单按钮上=>选择“播放保护”选项=>禁用该选项   “扫描设备是否存在安全威胁”。

答案 6 :(得分:1)

确保在模拟器(Android虚拟设备)上尚未安装该应用程序。将新的.apk拖动或将一个版本发布到模拟器时,将出现错误:无法解析错误字符串。

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

2)拖动以安装新的.apk

答案 7 :(得分:1)

查看 emulator-5554 unauthorized for adb devices 我发现您应该使用 Target Google APIs 而不是 Google Play 用于 Android 模拟器。

答案 8 :(得分:0)

这对我有用.....

  • 打开Play商店
  • 转到菜单
  • 点击播放保护
  • 禁用扫描设备的安全威胁

答案 9 :(得分:0)

尝试:这项功能对我来说更好。

enter image description here

第1步 。清洁项目

第2步 。重建项目

第3步 。运行应用

希望对您有帮助。

答案 10 :(得分:0)

您可以验证该应用的最低SDK版本吗?和您的虚拟设备android版本

AVD版本必须大于或等于应用程序的最低SDK版本

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

答案 11 :(得分:0)

这对我也是一个问题。 但是后来我发现我的运行代码没有经过签名的API。 您必须运行签名的api才能安装签名的API。

1。按Alt + F 转到项目结构See this box will open

点击“模块”并根据您发布的API更改签名配置

答案 12 :(得分:0)

从仿真器卸载应用程序不能解决此问题时,我要做的就是擦除仿真器的数据:在AVD管理器中,单击该仿真器最右边的向下箭头,然后选择“擦除数据”。

答案 13 :(得分:0)

apk安装失败,无法解析错误字符串

上述错误可能是由于:

  1. 低于或高于APK的仿真器SDK版本
  2. 您的apk进行了root检查,如果设备已root,则不会安装

祝你好运。

答案 14 :(得分:0)

我这样解决了;

  1. 将APK上传到我的服务器。
  2. 使用Chrome在模拟器上打开apk URL路径。
  3. Chrome浏览器允许访问未知来源
  4. 并安装它。

我测试过的应用程序是本机应用程序。

答案 15 :(得分:0)

我设法通过重命名apk文件并确保执行以下操作来解决此问题:

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

希望它对您有帮助。

答案 16 :(得分:0)

如果您尝试安装新的api文件,请确保需要删除模拟器上的现有应用程序(如果有)。删除较旧的应用程序并安装应用程序文件对我来说有用

答案 17 :(得分:0)

从任务管理器中杀死Android模拟器,重新打开模拟器并运行APK对我有用。

答案 18 :(得分:0)

清除模拟器内存​​并重新启动模拟器,它将正常工作。

答案 19 :(得分:0)

执行以下操作似乎可以解决此问题:

  • 通过kivy virtual machine on virtual box切换到构建方式(buildozer不支持所有构建机器)
  • 然后在buildozer.spec中注释掉buildozer SDK设置(恢复为默认的SDK版本)(biuldozer不支持所有SDK)
相关问题