ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android应用与多CPU架构

2022-02-09 10:35:10  阅读:214  来源: 互联网

标签:文件 架构 x86 ABI armeabi so Android CPU


为什么java代码不需要考虑不同的cpu架构,而C/C++的代码(.so库)需要考虑不同的cpu架构?
像Java、Python、Perl这种跨平台的开发语言,它的迁移的技术难度相对来说是比较低的,主要是因为Java有一个JVM,Python中存在一个解释器,它们屏蔽了大部分的平台架构上的差异。

与之相反,C和C++的难度相对来说要高一些,原因是如内敛函数还有x86加速的一些指令,无法支持像微软这种闭源的开发架构。
典型的如C/C++/Go语言,都属于编译型语言。编译型语言开发的程序在从x86处理器迁移到ARM处理器时,必须经过重新编译才能运行。如下图所示,源码需要由编译器、汇编器翻译成机器指令,再通过链接器链接库函数才能生成机器语言程序。

基础知识

Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MipS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。ABI是指应用基于哪种指令集来进行编译。 如果项目中使用到了NDK,它将会生成.so文件,Android应用支持的ABI取决于APK中位于lib/ABI目录中的.so文件,其中ABI可能是上面说过的七种ABI中的一种。 Android包管理器安装APK时,如果在对应的lib/ABI目录中存在.so文件的话,会自动选择APK包中为对应系统ABI预编译好的.so文件。当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,libs/x86目录中如果存在.so文件的 话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件(因为x86设备也支 持armeabi-v7a和armeabi)。

参考:
java迁移在arm,为什么必须将代码从x86迁移到ARM,这篇文章给你答案(2)

标签:文件,架构,x86,ABI,armeabi,so,Android,CPU
来源: https://blog.csdn.net/yzpbright/article/details/122836283

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有