说说Android项目中的armeabi,armeabi-v7a和x86

作者&投稿:魏缪 (若有异议请与网页底部的电邮联系)
~    这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库)。Android现在的主流CPU是armeabi-v7a。armeabi-v7a是针对有浮点运算或高级扩展功能的ARMv7 CPU。

   当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。不同CPU架构的Android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。
   以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现findlibrary returned null的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。

   目前主流的Android设备是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
   armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

   第三方的类库只提供了armeabi下的.so文件,我们项目里适配了armeabi-v7a和x86,如果不在对应的文件下放对应的.so文件,就可能导致某些Android设备会出一些问题,我们可以复制armeabi下得.so文件到不同的文件夹下。如果第三方提供了不同平台的.so文件,则复制不同平台的.so文件到项目中对应的文件夹下即可。
   关于.so文件之前有一个坑,svn会把提交的so文件过滤掉,在接第三方SDK的时候通过SVN更新了文档,但是没有注意到少了几个so文件,浪费了大把的时间去找原因。记得去掉svn对so的忽略!!!


新手刚刚学习android,推荐android开发的入门教程
在论坛上、QQ上看到不少童鞋Java基础还比较欠缺,就开始搞Android了,当然就问题多多。学习热情可嘉,但需要打一个好的基础,有一个好的学习路线。三、Android学习比较好的资料 1、应该说现在市面上的书,入门的还是不少,但一般现在只讲了简单控件的单个用法。《Android开发范例大全》,《Android应用开发...

Android怎么获得obb权限
要解开Android的obb权限,你需要按照以下步骤进行操作:1. 确保你有足够的权限来访问obb文件,这通常需要管理员或root权限。2. 找到obb文件所在的目录,通常在Android项目的assets文件夹中。3. 将obb文件复制到Android设备的存储空间中,例如内置存储的根目录或外部存储卡。4. 在Android代码中,使用正确的...

github 上的Android 项目怎么使用啊
下载zip,解压到桌面 打开eclipse,File-Import-Existing Android Code Into Workspace 选中library文件,导入到eclipse中 打开此library,右键library,properties-Android-Library-勾选Is Library 打开你的程序后,右键你的主程序,properties-Android-Library-Add,选择library文件 导入的基本步骤就这样,接下来是...

Android OS的Android开源项
是为谷歌首的Android开源项目(AOSP),并负责维护和开发Android的根据项目。Android开源项目的目标是建立一个成功的实体的产品,提高最终用户的移动体验。AOSP也保持了Android的兼容性计划,确定一个Android兼容“装置”,可以运行任何应用程序由第三方开发者使用Android SDK和NDK写入,以防止不兼容的Android的...

对于开发者来说,Android 的开发者选项里有哪些实用的功能
Android开发者选项里的主要功能详解 第一项:提交错误报告。这个不需多说,提交当前设备状态的信息以邮件形式发送。第二项:桌面备份密码。在这里可以设置或更改桌面完整备份的密码,据估计是谷歌在线备份的相关应用功能。就不要动了。第三项:不锁定屏幕底下的描述很清楚,充电的时候屏幕不会自动关闭。不...

eclipse怎么写android
目前Android开发工具主要有两种:Eclipse和Android Studio。其中Android Studio可以直接进行Android开发,但是Eclipse则需要添加ADT插件才可以进行Android开发,下面就解说一下如何使得Eclipse实现Android开发。工具\/原料 Eclipse、SDK 方法\/步骤 1、Eclipse开发Android,首先需要下载好SDK,这是需要配置的环境,可以到...

如何搭建Android开发环境
选择 Window -> Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。此时Android的环境就搭建完毕,可以进行Android项目的开发了。END 创建第一个Android项目 选择 File -> New -> Other -> Android -> Android Application ...

android+studio加载时+同步过程项目结构不可用怎么办?
更新 Android Studio:确保您使用的是最新版本的 Android Studio。如果有可用的更新,请尝试下载并安装。检查网络连接:同步过程需要访问互联网。请确保您的网络连接正常,并且没有防火墙或其他安全软件阻止 Android Studio 访问互联网。检查项目依赖项:请确保您的项目依赖项正确配置,并且所有必需的库都已经...

想问一下,安卓项目从哪开始运行的呀?
另外如果在设置了AndroidManifest的application标签中设置了android:name=".MyApplication",那么程序入就成了MyApplication的onCreate()方法,当然Application在onCreate方法之前还会执行其他的方法,感兴趣的话可以自己再查询一下资料。平常说的话就是这么两个入口,如果在设置了AndroidManifest的application,那么...

如何搭建 Android 开发环境?
8.在Android Stdio的主界面,选择“Configure选项–>Project Defaults选项–> Project Structure选项”——Android SDK and configure the paths to your JDK and Android SDK:9.在Android Studio 主界面中点击“New Project”:10.当点击“New Project”项后,Android Studio将显示如下对应的应用程序名称...

北仑区19674654326: 最新android工程目录下armeabi - v7a,armeabi的具体含义,有什么区别 -
艾帖佳名: 1.在Android APK的根目录有一个 libs文件夹(一般会有,但最新版的studio好像没有),此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,我们的c代码编译成的本地库(各种.so)就会放在这两个文件夹其中的一个.2. 那armeabi-v7a 与 ...

北仑区19674654326: android项目中如何加载已有so库? -
艾帖佳名: android项目中如何加载已有so库方法:1、在项目根目录下建立文件夹libs/armeabi文件夹.2、将so库放入libs/armeabi文件夹注意事项:(1)如果采用静态注册的方式请注意C文件中严格按照命名规则Java_packageName_className_method...

北仑区19674654326: Android Studio中的Module是指什么 -
艾帖佳名: Android Studio中的Module 相当于Eclipse 中的library 在使用Android Studio(以下简称AS)新建项目时都会有这样一个概念:Eclipse中的WorkSpace相当于AS中的Project;Eclipse中的Project相当于AS中的Module(只就新建而言).所以...

北仑区19674654326: android studio怎么添加.so文件 -
艾帖佳名: Android Studio中jar包放在libs目录下,jni编译的so库存放在libs目录下的armeabi目录中.导入步骤:1. 右键app目录,find path,即打开app目录.2. 在libs目录下新建文件夹,名字为 armeabi,注意名字不能改.3. 将jar复制到libs目录下.4.将.so库文件复制到armeabi目录下即可.

北仑区19674654326: 怎样快速掌握Android开发中的第三方SDK -
艾帖佳名: 1.准备要UNITY为交互Android自备的CLASS.JAR文件.我的操作过程是:应用程序->UNTITY文件夹->UNITY->右键:显示包内容->CONTENTS文件夹->PLAYBACKENGINES文件夹->AndroidPlayer文件夹->BIN文件夹->CLASS.JAR【目录:/...

北仑区19674654326: 安卓项目运行时闪退 -
艾帖佳名: Andro开发解决5.0安装成功后打开直接闪退问题,andro5.0 这阵子在开发一个app项目,在4.4.2以及以前的机器上都没有任何问题,然后在5.0的小米手机上安装成功了,但是一打开就闪退了,困扰了好久才解决这个问题,首先5.0的系...

北仑区19674654326: 安卓 armeabi和x86属于什么机型 -
艾帖佳名: armeabi默认选项, 支持基于 ARM* v5TE 的设备 支持软浮点运算(不支持硬件辅助的浮点计算) 支持所有 ARM* 设备armeabi-v7a 支持基于 ARM* v7 的设备 支持硬件 FPU 指令 支持硬件浮点运算不同手机由于cpu的不同,使用不同的驱动. ABI:指应用基于哪种指令集来进行编译,ABI总共有四种,分别是armeabi、armeabi-v7a、mips、x86,它们都是表示cpu的类型. 回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢

北仑区19674654326: 如何使用Android中的Sample -
艾帖佳名: 很多学习android的朋友都想看看安装目录里面sample的效果,但是使用file-->import ... 选择了root directory 后 下面的project没有项目选择.试试这样做:File-->new-->android project -->选择create project from existing source ...-->选择目录,如果...

北仑区19674654326: Android Studio中的Project和Module是个什么鬼 -
艾帖佳名: project是一个工程,module是模块,一个工程下可以有多个模块,模块之间可以依赖,模块有两种,application和library.如果你了解eclipse的话,project和eclipse的workspace类似,module和workspace里的项目类似.

北仑区19674654326: android studio new module 有什么作用 -
艾帖佳名: 首先,先指出Android Studio中的两个概念. Project 和 Module .在Android Studio中, Project 的真实含义是工作空间, Module 为一个具体的项目.在 Eclipse 中,我们可以同时对多个 Eclipse 的 Project 进行同时编辑,这些Project 在同一个 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网