【问题标题】:The APK failed to install. Error: Could not parse error stringAPK 安装失败。错误:无法解析错误字符串
【发布时间】:2018-08-10 18:11:18
【问题描述】:

将 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

【问题讨论】:

  • 我也面临这个问题,但是这个问题来自新更新的奥利奥版本,我猜它与安全性有关,说我们的应用程序没有经过验证(我猜这个字符串与我们的包名有关)并且为了确保我们的设备安全,他们不会在 Android 设备中手动安装 - 通过播放保护显示安全风险。
  • 我用的是牛轧糖,不是在奥利奥之前吗?我允许未知来源

标签: android avd


【解决方案1】:

但是,如果我将相同的 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

【讨论】:

  • 是的。我刚刚通过 sdk manager 更新了模拟器,它开始工作正常
  • 打开 Android Studio。菜单工具、SDK 管理器、选项卡 SDK 工具。查看“Android Emulator”行。
  • 只有通过 adb 命令安装对我有用。
【解决方案2】:

我遇到了同样的问题。问题是,如果 相同的应用程序已经安装且在模拟器上具有相同的版本,那么它将无法更新/安装。它会抛出与你得到它相同的错误。

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

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

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

希望对你有帮助。

【讨论】:

    【解决方案3】:

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

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

    就个人而言,使用除armeabi-v7a 以外的任何标志运行python3crystax 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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

        【解决方案5】:

        您尚未从模拟器中卸载该应用,或者您的 apk 未签名

        *Disclamer - 这是为了节省时间,自动生成signedApk 否则你知道你可以通过......点击Build->然后GenearateSignedApk

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

        1.转到文件(Alt-F)

        2.转到项目结构See this box will open

        1. 在这里你点击模块和
        2. 点击应用,
        3. 点击SigningCofig
        4. 点击调试 根据您发布的 API 更改签名配置 提供详细信息

        SignedKeyCertificate 文件路径

        密码

        keyAlis

        keyAlias 密码

        【讨论】:

          【解决方案6】:

          FOR 开发者

          我从 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

          第 3 步:

          使用 x86_64 创建一个新的模拟器,这样您就可以安装 apk 并使用同一个模拟器进行调试。

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

            • 谢谢。我对为什么没有安装 Kivy-Buildozer .apk 并且没有错误感到生气——这种行为没有任何理由。
            【解决方案8】:

            我设法通过重命名 apk 文件并确保:

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

            希望对你有帮助。

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                这对我有用.....

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

                【讨论】:

                  【解决方案11】:

                  清空模拟器内存​​,重启模拟器就可以正常工作了。

                  【讨论】:

                    【解决方案12】:

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

                    【讨论】:

                      【解决方案13】:

                      您能否验证该应用的最低 sdk 版本?还有你的虚拟设备android版本

                      AVD版本必须大于等于app的最低sdk版本

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

                      【讨论】:

                      • 所有 AVD 的默认设置为“允许”,AVD 和我的手机都是这种情况,我附上了截图
                      • 添加了 SDK 最低要求
                      【解决方案14】:

                      执行以下操作似乎可以解决它:

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

                      【讨论】:

                        【解决方案15】:

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

                        上述错误可能是因为:

                        1. 模拟器 SDK 版本低于或高于 APK
                        2. 你的apk有root检查,如果设备root了,它不会安装

                        祝你好运。

                        【讨论】:

                          【解决方案16】:

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

                          【讨论】:

                            【解决方案17】:

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

                            【讨论】:

                              【解决方案18】:

                              我解决了这个问题;

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

                              我测试的应用程序是一个 react-native 应用程序。

                              【讨论】:

                              • 您的服务器?它是每个人的通用解决方案吗?有很多应用程序根本不需要服务器,但它们仍然会产生这样的问题。
                              • 据我所知,这个问题没有明确或明确的解决方案。我尝试了所有答案都没有成功。既然这是我必须解决的问题;我就是这样解决的。我分享的一个答案是,像我这样尝试所有答案都没有得到成功结果的朋友可能会用我的答案解决它。我希望你在判断之前先尝试一下。对不起。 @比拉尔
                              猜你喜欢
                              • 2019-07-06
                              • 1970-01-01
                              • 2018-09-21
                              • 1970-01-01
                              • 2021-11-20
                              • 1970-01-01
                              • 2013-05-10
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多