Android .so 文件使用
CPU 架构
- mips / mips64: 极少用于手机可以忽
- x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的
- armeabi: ARM v5 主要 用于 Android 4. 0 之后 的, CPU 是 32 位 的。这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈支持, 基本 已经 被 淘汰 了
- armeabi-v7a: ARM v7 目前主流版本
- arm64-v8a: 主要 用于 Android 5. 0 之后, CPU 是 64 位 的。
查找过程
对于一个cpu是arm64-v8a架构的手机,它运行app时,进入jnilibs去读取库文件时,分两种情况:
- 如果没有arm64-v8a文件夹,其下有armeabi-v7a(armeabi-v7a向下兼容armeabi),armeabi 。先看有没有arm64-v8a文件夹,如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常;
- 如果有arm64-v8a文件夹,那么就去找特定名称的.so文件,注意:如果没有找到,不会再往下(armeabi-v7a文件夹)找了,而是直接抛出异常。
Exception:Java.lang.UnsatisfiedLinkError: dlopen failed: library “/***.so” not found
兼容性
Android 上 启动 每个 App, 都会 为 App 创建 一个 虚拟 机。 Android 的 64 位 系统,加载 32 位 的 so 或者 App 时, 会在 创建 一个 64 位 的 虚拟 机 的 同时, 还 创建 一个 32 位 的 虚拟 机, 这样, 就能 兼容 32 位 的 App 应用 了。所以, 在 App 中, 保留 一个 armeabi- v7a 版本 的 so 就 足够 了。 64 位 Android 系统 会在 32 位 的 虚拟 机上 加载 它。
- 所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件.
- 只保留这一套so文件并不保证100%不发生crash,特别是对旧设备。
- 也会失去对其他对应CPU架构的一些优化,性能有所损失。
注意点
- 没有为每个支持的CPU架构提供对应的.so文件,会发生Crash
参考
- 淘宝、微信、携程、饿了么、百度糯米只使用了armeabi
- 淘票票使用了armeabi、x86
- FaceBook、Twitter只使用了armeabi-v7a
实战
- 可以全部CPU架构都支持,安装包体积会大,性能最佳
- 可以只是用armeabi或armeabi-v7a一套,根据自己的市场用户选择
- 通过设置ndk.abiFilters显示指定支持的ABI
Android .so 文件使用相关推荐
- Android.mk文件语法规范
序言: ------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件. 为了明白下面的内容,你必须已经 ...
- Android.mk文件语法规范及使用模板 (转载)
2019独角兽企业重金招聘Python工程师标准>>> http://blogold.chinaunix.net/u3/99423/showart_2206760.html Andr ...
- Android下载文件(一)下载进度断点续传
Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...
- Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ...
- Android.mk 文件语法详解
0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...
- Xamarin Android布局文件没有智能提示
Xamarin Android布局文件没有智能提示 在Visual Studio 2015中,Android项目的Main.axml文件没有智能提示,不便于布局文件的编写.解决办法: (1)从Xama ...
- 打开别人Xamarin项目找不到android.jar文件
打开别人Xamarin项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编译 ...
- Xamarin中打开别人项目找不到android.jar文件
Xamarin中打开别人项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编 ...
- 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...
- Android.mk文件编写
Android.mk文件编写的例子: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SR ...
最新文章
- 阿里限流工具 Sentinel
- 正确理解HTML,XHTML页面的头部doctype定义
- VTK:PolyData之PolyDataToImageData
- Pyqt5 多标签_ESL电子货架标签方案
- adb指令禁用软件_三星等安卓手机续航差?禁用部分系统组件后提升明显
- (转)三层相关案例(及常见的错误)
- 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16
- J2ME开发及JBuilder工具的应用
- 关于计算机编程语言 国外网友妙语录
- TreeNMS redis/memcached可视化客户端工具的使用
- Java初级工程师的面试自我介绍模板(仅供参考)
- HashMap HashTable和CurrentHashMap的区别
- java isbn_Java ISBN formating
- windows 固定桌面图标
- PDF打开后却不能编辑要怎么办?
- 猜大小游戏(条件判断)
- React pdf 电子书
- Linux下硬盘安装fedora,Fedora 10硬盘安装教程
- 我给bia娘写的交互参考1
- C语言图书管理系统验证码,C语言的图书管理系统