我有一个使用本地ARM共享库(.so
)的小型应用程序。使用Genymotion时,我可以成功安装ARM转换包(只需删除ZIP文件即可),并且该应用程序可以在基于x86的模拟器上正常运行。
现在,我需要在无头Linux服务器中运行同一应用程序,Genymotion不支持该服务器。我下载了官方的Google模拟器和相应的系统映像。从zip存档中提取文件并上传到/system
分区后,我可以运行houdini --version
,但是该应用程序将无法安装(INSTALL_FAILED_NO_MATCHING_ABIS
)。
您能指导我如何在官方Google x86模拟器上运行包含ARM库的应用吗?
答案 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