名词解释
- NDK:Native Development Kit
- JNI:Java Native Interface
- ABI: Application Binary Interface 应用二进制接口
1. ABI
应用程序二进制接口(application binary interface,ABI) 描述了
应用程序
和操作系统
之间,一个应用和它的库之间,或者应用的组成部分之间的底层接口
。ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
2. Android 设备支持7种CPU框架类型
Android 设备的CPU类型通常称为”ABIs”。
ARM是一种指令集,X86也是一种指令集。ARM是一种精简指令集(RISC),知识产权属于ARM公司;X86是一种复杂指令集(CISC),知识产权属于Intel公司。
CPU架构 | 位数 | 描述 | 性能 |
---|---|---|---|
armeabi | ARM v5 | 第5代、第6代的ARM处理器(早期的手机用的比较多) | 使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢(缺少对浮点数计算的硬件支持 ,在需要大量计算时有性能瓶颈 ) |
armeabiv-v7a | 32位ARM设备 | 第7代及以上的 ARM 处理器(2011年15月以后的生产的大部分Android设备都使用它) | 使用硬件浮点运算,具有高级扩展功能 |
arm64-v8a | 64位ARM设备 | 第8代、64位ARM处理器(很少设备使用) | 包含AArch32、AArch64两个执行状态对应32、64bit |
x86 | intel 32位 | 平板、模拟器用得比较多 | — |
x86_64 | intel 64位 | 一般用于平板 | — |
mips | — | 基本没见过(极少用于手机可以忽略 ) | — |
mips64 | 64位 | 基本没见过(极少用于手机可以忽略 ) | — |
对Android中arm64-v8a、armeabi-v7a、armeabi、x86认识
Android 设备的CPU类型(通常称为”ABIs”)、获取当前手机的ARM处理器类型
目前android支持如下7中CPU架构
Android 集成Chrome 浏览器内核 Crosswalk
android的cpu架构
armeabi、armeabi-v7a 和arm64-v8a区别
armeabi-v7a armeabi arm64-v8a 参数的含义解释
如何查看Android手机CPU类型、查看Android手机CPU类型是armeabi,armeabi-v7a,还是arm64-v8a、查看Android手机CPU类型
x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现 对 arm .so 的兼容,再考虑 x86 只有1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的
3. Android studio添加第三方库和so
4. Android如何加载So库
- 程序对当前手机cpu架构(比如 armeabi-v7a)做了适配,那手机跑程序时候就直接在这个目录下找对应的so库,如果找不到就直接报错
- 如果只对armeabi的手机cpu做适配,那么支持armeabi的手机都会去armeabi目录下找对应的so库
5. 查看Android设备的ABI
String CPU_ABI = android.os.Build.CPU_ABI;//查看Android设备的ABI
Log.d("ABI", "CPU_ABI = " + CPU_ABI);
// Toast.makeText(this,CPU_ABI,Toast.LENGTH_SHORT).show();
ndk-关于abiFilters的使用
ndk在在代码中判断当前运行的ABI版本—C语言
NDK-abi-so
- 查看手机支持的cpu架构和app适配的cpu架构
下载App:Native Libs Monitor(豌豆荚上可以下载,现在已找不到)
- 设置适配cpu架构:在app>build.gradle文件中android->defaultConfig 里设置支持 ndk
ndk {
abiFilters 'armeabi','armeabi-v7a', 'arm64-v8a' // 'x86', 'x86_64'
}
网友评论