首页 > 解决方案 > 在官方 Android 模拟器上安装 ARM Translation (libhoudini)

问题描述

我有一个使用本机 ARM 共享库 ( .so) 的小型应用程序。使用 Genymotion 时,我可以成功安装 ARM 翻译包(只需删除 ZIP 文件),并且该应用程序在基于 x86 的模拟器上运行良好。

现在我需要在 Genymotion 不支持的无头 linux 服务器中运行相同的应用程序。我下载了官方的谷歌模拟器和相应的系统镜像。从 zip 存档中提取文件并上传到/system分区后,我可以运行houdini --version,但应用程序不会安装 ( INSTALL_FAILED_NO_MATCHING_ABIS)。

你能指导我如何在官方的谷歌 x86 模拟器上运行包含 ARM 库的应用程序吗?

标签: androidarm

解决方案


houdini --version 的输出是什么?

当您安装应用程序时,PackageManager 会检查应用程序的 ABI(哪些库包含在 apk .so 文件中)和系统的 ABI(系统支持的库类型)

如果你跑getprop | grep -i abi

getprop | grep -i abi
[ro.product.cpu.abi]: [x86]
[ro.product.cpu.abilist]: [x86,armeabi-v7a,armeabi]
[ro.product.cpu.abilist32]: [x86,armeabi-v7a,armeabi]
[ro.product.cpu.abilist64]: []

在此输出中,系统支持 x86、armeabi-v7a 和 armeabi 类型的 32 位 .so 文件。

请在您的设备上检查此输出。很可能在此输出中不会提及 armeabi。

因此,当 PackageManager 尝试安装 ARM 应用程序并检查此 ABI 不受支持时,它会引发INSTALL_FAILED_NO_MATCHING_ABIS错误。

因此,您将不得不修复系统 ABI。编辑文件/system/build.prop以添加 ARM 支持,在ro.product.cpu.abilist and ro.product.cpu.abilist32. 如果您运行的是 64 位 Android,则必须更改这些行。

ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a

推荐阅读