在官方的Android仿真器上安装ARM Translation(libhoudini)

时间:2019-06-09 13:10:56

标签: android arm

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

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

您能指导我如何在官方Google x86模拟器上运行包含ARM库的应用吗?

1 个答案:

答案 0 :(得分:0)

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中编辑文件ro.product.cpu.abilist and ro.product.cpu.abilist32以添加ARM支持。 如果您运行的是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