开发APP如何为特定ABI生成代码,默认情况下,NDK为armeabiABI生成机器代码。但可以通过向Application.mk文件添加以下行生成ARMv7-a兼容的机器代码。APP_ ABI := armeabi- v7a
要为两个或更多不同的ABI构建机器代码,需要使用空格作为分隔符。深圳APP开发公司整理示例代码如下
:APP_ABI:=armeabiarmeabi-v7a
此设置指示NDK为机器代码构建两个版本:此行中所列的armeabi和armeabi-v7a。构建多个机器代码版本时,构建系统会将库复制到应用项目路径,并最终将它们封装到APK中,从而创建一个胖二进制文件。胖二进制文件大于只包含一个系统的机器代码的二进制文件,兼容性更广,但APK占的存储空间更大。在安装时,软件包管理器只解析APK中包含的最适合目标设备的机器代码。
关于Android系统的ABI管理
Android系统的软件包管理器预期在APK中符合以下模式的文件
路径上查找NDK生成的库。
/lib/<abi>/lib<name>.so
这里的<abi>支持的是ABI下面列出的ABI名称之一,<name>是为Android.mk文件中的LOCAL_MODULE变量定义库时使用的库名称。由于APK文件只是zip文件,因此打开它们并确认它们属于哪些原生共享库是很简单的。如果系统在预期位置找不到原生共享库,便无法使用它们。在这种情况下,应用本身必须复制这些库,然后执行dlopen()。在胖二进制文件中,每个库位于其名称与相应ABI匹配的目录下。例如,胖二进制文件可能包含以下文件。/lib/ armeabi/ libfoo. so /lib/ armeabi- v7a/ libfoo. so /lib/ arm64- v8a/ libfoo. so /lib/ x86/ libfoo. so /lib/ x86_ 64/ libfoo. so /lib/ mips/ libfoo. so /lib/ mips64/ libfoo. so
好了,APP开发公司本文关于“开发APP如何为特定ABI生成代码的方法”知识就分享到这里,谢谢关注,博纳网络编辑整理。