Android JNI系列详解之生成指定CPU的库文件

一、前提

这次主要了解Android的cpu架构类型,以及在使用CMake工具的时候,如何指定生成哪种类型的库文件。

Android JNI系列详解之生成指定CPU的库文件_第1张图片

如上图所示,是我们之前使用CMake工具默认生成的四种cpu架构的动态库文件:arm64-v8a、armeabi-v7a、x86、x86_64,分别对应对四种不同cpu类型的支持。

Android JNI系列详解之生成指定CPU的库文件_第2张图片

 如上图所示,不同手机使用了不同的cpu,不同的cpu支持不同的指令集,每种指令集有对应的二进制接口abi(arm64-v8a、armeabi-v7a、x86、x86_64就是四种abi类型 ),就是二进制库文件。其中手机常用的是arm64-v8a、armeabi-v7a,平板和虚拟机上更多的是x86、x86_64。

1、常用cpu的abi兼容性:

Android JNI系列详解之生成指定CPU的库文件_第3张图片Android JNI系列详解之生成指定CPU的库文件_第4张图片

 如果我们手机的CPU架构是armv7,项目中可以只配置armeabi-v7a,可以兼容armv7、armv8、x86三种cpu的手机。这样可以节约安装包的大小,这就是兼容性的好处。

2、使用adb命令查看手机的CPU机构

adb shell

cat /proc/cpuinfo

Android JNI系列详解之生成指定CPU的库文件_第5张图片

 二、如何配置生成指定CPU的库文件

在gradle中配置的两种方式:

1、在android闭包下的defaultConfig闭包下加上ndk闭包,如下所示:这种可用于cmake和ndk-build

Android JNI系列详解之生成指定CPU的库文件_第6张图片

 2、在gradle的cmake配置中配置:这种只适用于cmake工具

Android JNI系列详解之生成指定CPU的库文件_第7张图片

 这两种方式编译之后,生成对应的目录下的文件(支持多种用逗号增加:abiFilters "arm64-v8a","x86")

Android JNI系列详解之生成指定CPU的库文件_第8张图片

 

你可能感兴趣的:(NDK开发,android,CMake,NDK,JNI)