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去读取库文件时,分两种情况:

  1. 如果没有arm64-v8a文件夹,其下有armeabi-v7a(armeabi-v7a向下兼容armeabi),armeabi 。先看有没有arm64-v8a文件夹,如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常;
  2. 如果有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文件.

    1. 只保留这一套so文件并不保证100%不发生crash,特别是对旧设备。
    2. 也会失去对其他对应CPU架构的一些优化,性能有所损失。

注意点

  • 没有为每个支持的CPU架构提供对应的.so文件,会发生Crash

参考

  • 淘宝、微信、携程、饿了么、百度糯米只使用了armeabi
  • 淘票票使用了armeabi、x86
  • FaceBook、Twitter只使用了armeabi-v7a

实战

  1. 可以全部CPU架构都支持,安装包体积会大,性能最佳
  2. 可以只是用armeabi或armeabi-v7a一套,根据自己的市场用户选择
  3. 通过设置ndk.abiFilters显示指定支持的ABI

Android .so 文件使用相关推荐

  1. Android.mk文件语法规范

    序言: ------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件. 为了明白下面的内容,你必须已经 ...

  2. Android.mk文件语法规范及使用模板 (转载)

    2019独角兽企业重金招聘Python工程师标准>>> http://blogold.chinaunix.net/u3/99423/showart_2206760.html Andr ...

  3. Android下载文件(一)下载进度断点续传

    Android下载文件(一)下载进度&断点续传 索引 Android下载文件(一)下载进度&断点续传 Android下载文件(二)单任务多线程并发&断点续传(待续) Andro ...

  4. Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ...

  5. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  6. Xamarin Android布局文件没有智能提示

    Xamarin Android布局文件没有智能提示 在Visual Studio 2015中,Android项目的Main.axml文件没有智能提示,不便于布局文件的编写.解决办法: (1)从Xama ...

  7. 打开别人Xamarin项目找不到android.jar文件

    打开别人Xamarin项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编译 ...

  8. Xamarin中打开别人项目找不到android.jar文件

    Xamarin中打开别人项目找不到android.jar文件 错误信息:Could not find android.jar for API Level 23. 打开非本机创建的Xamarin项目,编 ...

  9. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...

  10. Android.mk文件编写

    Android.mk文件编写的例子: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SR ...

最新文章

  1. 阿里限流工具 Sentinel
  2. 正确理解HTML,XHTML页面的头部doctype定义
  3. VTK:PolyData之PolyDataToImageData
  4. Pyqt5 多标签_ESL电子货架标签方案
  5. adb指令禁用软件_三星等安卓手机续航差?禁用部分系统组件后提升明显
  6. (转)三层相关案例(及常见的错误)
  7. 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16
  8. J2ME开发及JBuilder工具的应用
  9. 关于计算机编程语言 国外网友妙语录
  10. TreeNMS redis/memcached可视化客户端工具的使用
  11. Java初级工程师的面试自我介绍模板(仅供参考)
  12. HashMap HashTable和CurrentHashMap的区别
  13. java isbn_Java ISBN formating
  14. windows 固定桌面图标
  15. PDF打开后却不能编辑要怎么办?
  16. 猜大小游戏(条件判断)
  17. React pdf 电子书
  18. Linux下硬盘安装fedora,Fedora 10硬盘安装教程
  19. 我给bia娘写的交互参考1
  20. C语言图书管理系统验证码,C语言的图书管理系统

热门文章

  1. iOS高仿国美、二次元应用、点赞喷射动画、电影筛选页等源码
  2. vue下使用 pdf.js 预览 和 打印 PDF文档 兼容React
  3. 数极客发布V3.3版本,首家拥有15种用户行为数据分析模型
  4. MySQL 的优化方案总结
  5. 基于java所写的学生选课管理系统
  6. CSS属性简表(通常)
  7. bytes字节和string转换
  8. ASP.NET 数据绑定常用代码
  9. json schema多种形式_如何快速写出Json Schema,校验Json Schema
  10. Effective-Java 仔细设计方法签名