要点

  • 不同的 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自动发布

最新文章

  1. Spring MVC初始化参数绑定
  2. 在SQL中 给字符串补0方法
  3. Oracle 表分组 group by和模糊查询like
  4. 安卓官方ViewPager与android.support.design.widget.TabLayout双向交互联动切换 。
  5. nginx日志中文变成类型\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西
  6. 编译Libgdiplus遇到的问题
  7. JS练习题 显示登入者相关好友
  8. js代码 设为首页 加入收藏
  9. MFC内部结构剖析
  10. GCD基本使用
  11. ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
  12. [Swift]LeetCode274.H指数 | H-Index
  13. 题解-Codeforces1106全套
  14. kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources
  15. Windows上结合使用Flume和Kafka
  16. 小峰servlet/jsp(4)EL表达式
  17. ES6中的import与export对class操作相关用法举例
  18. Linux系统服务(daemon)(鸟哥Linux私房菜笔记)
  19. OpenStack之基础知识
  20. 【转】 UML各种线的含义

热门文章

  1. Java入门之File类和IO流
  2. 常用注解@Controller、@Service、@Autowired
  3. 两种高效的事件处理模型:Reactor模式和Proactor模式
  4. SQL SERVER数据库,按年、月、日、时、分、秒计算两个时间字段之间的间隔时间样例
  5. requests模块(代理)篇
  6. 想转行做程序员,目前想学WEB前端,想问该自学还是报培训班
  7. burp插件之xssValidator
  8. CTFd平台部署
  9. 01 【PMP】组织结构类型
  10. [Luogu1291][SHOI2002]百事世界杯之旅