【问题标题】:Which Android Virtual Device should be used to launch arm64-v8a APK on Windows?应该使用哪个 Android 虚拟设备在 Windows 上启动 arm64-v8a APK?
【发布时间】:2022-01-11 23:50:54
【问题描述】:

我有一个使用 'arm64-v8a' 'armeabi-v7a' ABI 的通用 APK 应用程序。我应该如何调整 Android 虚拟设备才能启动此应用?

我尝试了不同的组合,但仍然不起作用。

一些细节

环境

  • Windows 10,CPU Intel Core i5-10300H,RAM 16GB,SSD 上有大量可用空间;
  • Android Studio 北极狐 | 2020.3.1 补丁 3;
  • 已安装 Intel x86 Emulator Accelerator(HAXM 安装程序)v.7.6.5;
  • 已安装 Android SDK 12.0、11.0 和 10.0;
  • 安装了许多不同的虚拟设备(见下图)。

已应用的图片

  • 主要应用不同的系统镜像,API从26到31;
  • 图像来自 AVD 管理器中的不同选项卡(Recommendedx86Other Images);
  • x86x86_64arm64-v8a 的 ABI 图像;
  • 图片有/没有 Google API,有/没有 Playstore 支持。

我遇到的错误

  • 某些模拟器无法启动。控制台说:PANIC: Avd's CPU Architecture 'arm64' is not supported by the QEMU2 emulator on x86_64 host.
  • APK 未安装在某些模拟器上,出现一个带有消息的弹出窗口:INSTALL_FAILED_NO_MATCHING_ABI
  • 应用程序尝试启动(显示启动画面)但突然关闭。我注意到 logcat 输出这样的消息(也许与应用程序相关):Unexpected CPU variant for X86 using defaults: x86_64

另外一些图片

【问题讨论】:

  • 您能否获得 x86 二进制文件以供您的库与 arm 库一起包含?如果可以避免的话,你真的不想做处理器仿真——它至少慢了 10 倍。
  • 嗨,Gabe,感谢您的回复。我不确定我是否理解你。首先,我没有任何额外的二进制文件或库(只有 APK),因此,我没有任何东西可以包含在某个地方。其次,我真的很想知道,为什么现代 APK (arm64-v8a) 不能在没有任何解决方法的情况下简单地在现代图像 (Android 31 API) 上启动。
  • 你有二进制文件——它们在 APK 中。如果您只是在没有二进制文件的情况下使用 Kotlin 或 Java,那么您将自动支持每个 ABI——它们是在虚拟机上运行的解释语言。 ABI 仅适用于本机(C 或 C++)库。 Arm64-v8a 适用于 ARM 处理器而不是 x86 处理器,因此它们不能在 PC 上本地运行(除非您有 ARM PC,这仍然很少见)。
  • 好的 Gabe,我看到 ./lib 目录包含两个文件夹:arm64-v8aarmeabi-v7a。每个目录都有相同的文件列表:libapp.solibflutter.solibsqlcipher.solibtool-checker.so。那么,我应该得到哪些库,应该把它们放在哪里? :)
  • lib 下应该有另一个带有 x86_64 的文件夹,并且它需要所有这些文件夹 - 您在其他 ABI 上使用的任何 so 文件都需要 x86_64 版本。如果您的构建正在编译它们,只需将其添加到 ABI 列表中即可使其也编译它

标签: android arm64 avd-manager


【解决方案1】:

我遇到了同样的问题。 @WGH 的评论很到位!查看失败的代码行。

#ifdef __x86_64__
      if (sarch == "arm64" && apiLevel >=28) {
          APANIC("Avd's CPU Architecture '%s' is not supported by the QEMU2 emulator on x86_64 host.\n", avdarch);
      }
#endif

(来源:here

我删除了基于 apiLevel 32 的 arm64 AVD,并使用了来自 Nougat 7.1.1 的旧 apiLevel 25,它在 QEMU ubuntu 20.04 上加载了 arm64 AVD。 (虽然很慢!!)

@mtotschnig 的评论也可能是相关的,但是我正在测试的应用程序无法在我尝试使用的 x86_64 AVD 的 api 版本 30 上运行。

【讨论】:

    【解决方案2】:

    好的,问题解决了。我不知道原因的根源,但我只是:

    • 删除所有虚拟设备,
    • 放弃整个 Android 工作室,
    • 再次下载工作室的安装包,
    • 再次安装 Android Studio,
    • 添加一个已知的虚拟设备:带有 Play 商店的 Nexus 5X,带有 Google Play 支持的映像 ABI x86 API 30。

    就是这样。应用程序已启动。

    【讨论】:

    猜你喜欢
    • 2017-06-17
    • 2012-10-25
    • 1970-01-01
    • 2017-08-09
    • 2014-01-06
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多