要点

  • 不同的 CPU 架构需要不同的 so 文件
  • NDK平台不是后向兼容的,而是前向兼容的。
  • ABI 的概念,每一个 Cpu架构对应一个 ABI(Application Binary Interface,应用二进制接口)。
  • ABI 定义了其所对应的 CPU 架构能够执行的二进制文件(如 .so 文件)的格式规范,决定了二进制文件如何与系统进行交互。
  • 所有的 x86/x86_64/armeabi-v7a/arm64-v8a 设备都支持 armeabi 架构的 .so 文件
  • so(shared object,共享库)是机器可以直接运行的二进制代码,是 Android上的动态链接库,类似于Windows上的dll。

为什么使用so

  • so 机制让开发者最大化利用已有的 C 和 C++ 代码,达到重用的效果,利用软件世界积累了几十年的优秀代码;
  • so 是二进制,没有解释编译的开消,用 so 实现的功能比纯 java 实现的功能要快;
  • so 内存分配不受 Dalivik/ART 的单个应用限制,减少 OOM;
  • 相对于 java 代码,二进制代码的反编译难度更大,一些核心代码可以考虑放在 so 文件中。

x86 手机对 arm 的支持

值得注意的是原本 x86 架构的 CPU 是不支持运行 arm 架构的 native 代码的,但 Intel 和 Google 合作在x86机子的系统内核层之上加入了一个名为 houdini 的Binary Translator(二进制转换中间层),这个中间层会在运行期间动态的读取 arm 指令并将之转换为 x86 指令去执行。

Android 系统支持其中不同的 CPU 架构,ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。

参考链接

本篇文章由一文多发平台ArtiPub自动发布

Android so 文件的更多相关文章

  1. Android.mk 文件语法详解

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

  2. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  3. Android资源文件简介

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

  4. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  5. android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

    android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位   public class FileSizeUtil { public static final int SIZETYPE_B ...

  6. 19.Android之文件存储方法学习

    Android开发中会用到文件存储,今天来学习下. 先改下布局界面: <?xml version="1.0" encoding="utf-8"?> ...

  7. cocos2d-x避免手动修改android.mk文件来编译

    编辑android.mk文件,替换为如下内容 LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir) include $(CLEAR_VAR ...

  8. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  9. android.mk文件里的通配符

    比方你有如下目录,要编译Classes目录和Code目录下所有cpp src |-android.mk |-Classes |-A.cpp |-B.cpp |-....cpp |-Code |-E.c ...

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

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

随机推荐

  1. springboot结合mybatis

    idea中新建springboot项目 pom.xml依赖部分如下 <dependencies> <dependency> <groupId>org.springf ...

  2. 利用Helm简化Kubernetes应用部署(2)

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的“charts”目录,我们依次进行解读并进行简单的修改. Chart.yaml 配置示例: a ...

  3. java并发基础及原理

    java并发基础知识导图   一 java线程用法 1.1 线程使用方式 1.1.1 继承Thread类 继承Thread类的方式,无返回值,且由于java不支持多继承,继承Thread类后,无法再继 ...

  4. LeetCode 第 287 号问题:寻找重复数,一道非常简单的数组遍历题,加上四个条件后感觉无从下手

    今天分享的题目来源于 LeetCode 第 287 号问题:寻找重复数. 题目描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个 ...

  5. 想转行做3D游戏模型,如何快速入行

    随着技术和硬件迭代,3D建模,广泛运用在游戏,影视,动画,VR等领域,而且就业面非常广. 由于3D美术设计师薪资和前景确实都不错,很多同学想进入这个行业,从事相关工作,但是没有一个整体的学习思路和规划 ...

  6. web前端开发自学路线是怎样的?html+css+JavaScript的学习方法?

    不废话,直接干货 学习前端的几个个阶段: 一阶段:html标签.html5新增标签.css样式.css3样式.媒体查询等 二阶段:JavaScript.jQuery.ajax.面向对象.http传输协 ...

  7. 开启sql语句监控

    开启sql执行语句监控 set global general_log=on; set global_log_output='table'; 修改mysql配置文件,在[mysqld]中加入 gener ...

  8. MVC路径无匹配或请求api版本过低时处理

    解决方案:RequestMappingHandlerMapping中重写handleNoMatch方法,springMVC和springboot中配置无区别. 另: 1.可搭配advice处理抛出的异 ...

  9. Dart:1.Dart开发环境配置

    一 . Windows 环境 1 . choco 安装 Dart SDK 建议直接使用 choco 安装,关于 choco 如何使用可以参照 https://chocolatey.org/ 官方文档地 ...

  10. MySQL常用sql语句-----数据库操作

    在数据库操作中,操作基本都是围绕增删改查来操作.简称CRUD C创建创建 R读取/检索查询 U Update修改 D删除删除 在数操作数据库时,所有的数据库语句都要以分号结束 数据库操作不区分大小写 ...