应该使用哪个 Android 虚拟设备在 Windows 上启动 arm64-v8a APK?

Posted

技术标签:

【中文标题】应该使用哪个 Android 虚拟设备在 Windows 上启动 arm64-v8a APK?【英文标题】:Which Android Virtual Device should be used to launch arm64-v8a APK on Windows? 【发布时间】: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 列表中即可使其也编译它 【参考方案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。

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

【讨论】:

当然可以,您使用的是 x86 图像。 它起作用的原因是 API 30 x86 仿真器内置了 arm 仿真:android-developers.googleblog.com/2020/03/…

以上是关于应该使用哪个 Android 虚拟设备在 Windows 上启动 arm64-v8a APK?的主要内容,如果未能解决你的问题,请参考以下文章

wind10里的虚拟机安装的Mac系统怎么连苹果手机?用苹果+数据线连接多次无效果,只连到wind桌面

在eclipse中编译的Android文件,如何指定它在哪个虚拟机上运行

如何捕获android设备屏幕内容? [复制]

在哪个事件中,我可以使用 PushSharp 获取 GCM 响应以向 Android 设备发送通知?

请问我用VMWare在固态硬盘上建了虚拟机,虚拟机的硬盘类型应该选择哪个?

如何在 Android Studio 中使用虚拟设备测试麦克风功能