【发布时间】: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 管理器中的不同选项卡(
Recommended、x86和Other Images); -
x86、x86_64和arm64-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-v8a和armeabi-v7a。每个目录都有相同的文件列表:libapp.so、libflutter.so、libsqlcipher.so和libtool-checker.so。那么,我应该得到哪些库,应该把它们放在哪里? :) -
lib 下应该有另一个带有 x86_64 的文件夹,并且它需要所有这些文件夹 - 您在其他 ABI 上使用的任何 so 文件都需要 x86_64 版本。如果您的构建正在编译它们,只需将其添加到 ABI 列表中即可使其也编译它
标签: android arm64 avd-manager