`
gybin
  • 浏览: 267679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android的armeabi和armeabi-v7a

 
阅读更多

在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下。

可以贴个ADT代码说明问题:

 

//m_configType.equals("apk") 是否是发行模式
//(hasCaptiveRuntime() 是否带运行时
 if ((m_configType.equals("apk")) || (hasCaptiveRuntime()))
    {
      destApkDirectory = "lib/armeabi-v7a/";
    }
    else
    {
      destApkDirectory = "lib/armeabi/";
    }

 

 

而这个armeabi和armeabi-v7a究竟是什么意思?

有什么深意么?

为什么调试模式和发行模式adobe会选择不同的文件夹?

我在这篇记录下我对于这个小问题的理解。

  • armeabi与armeabi-v7a表示支持不同的CPU类型

armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。因此armeabi通用性强,但速度慢,而v7a能充分发挥v7a CPU的能力,在AIR打包APK调试模式adobe选择的是通用性强的armeabi模式。

 

  • android支持不同CPU的深层含义

首先从硬件支持方便来看,我们的adnroid设备目前为止大部分都是支持ARM芯片,(当然市面上此刻最新的android机器还支持intel等另外的几个芯片,例如intel最新的凌动项目芯片,就获得了android4.1的青睐)。从android版本与支持ARM硬件编码的程度来看:

起初android1.6:只支持armv4与armv5te指令集。

到了android2.0:增加了支持arm-vfp,armv6,armv6t2指令集。

到了android2.2:增加支持armv7-a指令集。

所以armeabi-v7a 应该是与AIR限定支持android2.2以上的条件有关。android2.2以上能让硬件发挥更大的作用。

  • 我项目中使用armeabi还是armeabi-v7a

对于AIR项目来说性能问题是最大的瓶颈,能优化一点就一点,所以如果接平台方SDK或者写ANE的时候使用到SO库,个人推荐全部放到armeabi-v7a下,而不要为了兼容放到armeabi。

-EOF-

 

在我们android APK的根目录有一个 libs文件夹,此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,我们的c代码编译成的本地库(各种.so)就会放在这两个文件夹其中的一个。那armeabi-v7a 与 armeabi有什么区别,都是什么意思呢?

    armeabi和armeabi-v7a是表示cpu的类型,我们知道一般的手机或平板都是用arm的cpu(mips的就悲催的被忽视了),不同的cpu的特性不一样,armeabi就是针对普通的或旧的arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

      在android.mk里可配置以下宏:

TARGET_CPU_API := armeabi

APP_ABI := armeabi

 

当你编译时出现一些链接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下这个cpu类型的配置是否有误。

========================================================================================================

现在还有x86的了,其实armeabi 、armeabi-v7a 和x86是编译 NDK 库时,可以使用三种支持的应用二进制接口(ABI):

  1. ‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
  2. ‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
  3. ‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集。

==========================================================================================================

什么是 NEON?

NEON* 是一种 ARM* 技术,主要用于多媒体(智能手机和高清电视等)应用。 ARM* 表示其基于 128 位 SIMD 引擎的技术 – ARM* Cortex*(一种串行扩展)—可提供比 ARM* v5 架构至少高 3 倍的性能,以及比 ARM* v6 至少高 2 倍的性能。 如欲了解有关此技术的详细信息,以深入了解 NEON 及其它性能考虑,请访问以下网址: http://www.arm.com/products/processors/technologies/neon.php

此处的关键理念为,各寄存器被“堆积”成一个矢量,其中每一个寄存器均为一个元素,并与其它元素的数据类型相匹配。 在此基础之上,运算在管道内执行,因而这一方法被称作 Packed SIMD。

SSE: 英特尔推出的类似 NEON 的工具

SSE 指面向英特尔架构(IA)的SIMD 流指令扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。 凌动™ 暂不支持 SSE4.x。后者也是一个 128 位引擎,用于打包浮点数据。 这一执行模式开始于 MMX 技术。SSx 是较新的技术,取代了 MMX。。 如欲了解详细信息,请参阅英特尔《IA-32 和 IA-64 软件开发人员手册》中的“第一卷: 基础架构”部分。网址为: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html。 目前,SSE 概述部分在 5.5 节。 它提供 SSE、SSE2、SSE3 和 SSSE3 的操作码。注意,数据运算通常会涉及到处理基于精度的打包浮点数值;并且需要在 XMM 寄存器之间,或在这些寄存器与内存之间批量传输数据。 XMM 寄存器主要用于取代 MMX 寄存器。

分享到:
评论
3 楼 ding2wife 2016-01-14  
通过此文章终于知道他是干嘛的啦
2 楼 lkl 2015-06-29  
真好的文章
1 楼 saturn54 2015-06-25  
这真是好文章

相关推荐

    autojs免root脚本2019最新免费版4.1.1a Alpha2-armeabi-v7a-release和打包插件

    总的来说,AutoJS免root脚本2019最新免费版4.1.1a Alpha2-armeabi-v7a-release提供了一种无需root设备的自动化解决方案,特别适合armeabi-v7a架构的Android设备。打包插件则扩展了其功能,使用户能够将脚本封装为...

    autojs4.1.1打包插件 armeabi-v7a-4.1.1 Alpha2-release(打包插件)

    这个"armeabi-v7a-4.1.1 Alpha2-release(打包插件)"是AutoJS的一个特定版本,特别为armeabi-v7a架构的Android设备优化,此版本号表明它是4.1.1版的第二个Alpha测试版本。 "armeabi-v7a"是Android处理器架构的一种,...

    Android armeabi-v7a arm64-v8a jpeg 库

    在Android开发中,armeabi-v7a和arm64-v8a是两种常见的CPU架构,它们对应于不同的处理器指令集,对于提供跨平台兼容性的应用或库来说至关重要。JPEG库,全称Joint Photographic Experts Group,是一种广泛使用的图像...

    FFmpeg Android armeabi-v7a arm64-v8a 动态链接库.so文件.zip

    针对Android平台编译好的FFmpeg 3.4.5的动态链接库.so文件,包括armeabi-v7a arm64-v8a两个版本,包含头文件,包含x264,支持mediacodec硬解码h264,h265。可直接集成到工程中用于视频编辑、转码等。

    VLC for Android 3.1.5 armeabi-v7a版apk、aar及so

    armeabi-v7a是Android设备上常见的处理器架构之一,支持ARMv7指令集,广泛应用于许多中低端智能手机和平板电脑。 VLC的.apk文件是Android应用程序包,其中包含了运行VLC所需的所有资源、代码和库。用户可以直接在...

    armeabi-v7a.rar

    开发者在使用这个压缩包时,需要确保他们的应用目标设备支持armeabi-v7a架构,并且理解如何在Android应用中使用NDK和JNI来调用这些本地库。此外,还需要关注库的许可协议,因为FFmpeg是开源软件,其使用可能受到特定...

    libijkplayer编译后armeabi-v7a、armeabi、arm64-v8a的so文件

    在Android系统中,不同的硬件平台使用不同的指令集,armeabi-v7a、armeabi和arm64-v8a分别对应于ARMv7、ARMv5(较旧)和64位ARMv8架构。这些.so文件是ijkplayer的核心组件,经过编译优化以适应不同处理器架构,确保...

    libcurl for android (armeabi,armeabi-v7, x86平台)下的静态库

    libcurl.a 支持armeabi,armeabi-v7, x86平台下 的使用, 通过java jni调用,可以完成jni写的native网络请求,满足get,post等请求方式。libcurl是一个功能非常强大的c 开源网络库,

    arcgis for android(armeabi armeabi-v7a) libruntimecore_java.so

    本文将深入探讨其中的关键组件“libruntimecore_java.so”,它是ArcGIS for Android的核心运行时库,专门为armeabi和armeabi-v7a两种CPU架构优化。 一、armeabi与armeabi-v7a 在Android系统中,不同的设备可能搭载...

    FFmpeg Android armeabi-v7a arm64-v8a 动态链接库.so文件

    针对Android平台编译好的FFmpeg 3.4.5的动态链接库.so文件,包括armeabi-v7a arm64-v8a两个版本,包含头文件,包含x264,支持mediacodec硬解码h264,h265。可直接集成到工程中用于视频编辑、转码等。

    Gboard_11.9.06_armeabi-v7a(Android 6.0+).apk

    Gboard_11.9.06_armeabi-v7a(Android 6.0+).apk

    adt|system-images|armeabi-v7a-21

    总之,"adt|system-images|armeabi-v7a-21"代表了Android开发中一个关键环节,它为基于armeabi-v7a架构的设备提供了API Level 21的系统镜像,帮助开发者在Windows环境下利用Eclipse和Android SDK进行高效且全面的...

    armeabi-v7a.zip

    《armeabi-v7a.zip:ijkplayer在Android平台的核心组件详解》 ijkplayer是一款开源的跨平台媒体播放器,它支持多种视频和音频格式,广泛应用于Android和iOS等移动设备。"armeabi-v7a.zip"是针对Android平台armeabi-...

    auto.js安装包:app-v6-armeabi-v7a-release-unsigned-signed.apk

    这个特定的版本是针对Android设备的,因为“armeabi-v7a”是Android架构之一,适用于大多数现代ARM处理器。"release"表示这是经过测试并准备发布的稳定版本,"unsigned-signed"意味着该apk文件已经过签名,可以安全...

    armeabi-v7a与armeabi的区别

    - **Android 2.2**:进一步增加了对`armv7-a`指令集的支持,这也是`armeabi-v7a`能够得到广泛应用的关键转折点。 #### 性能考量 对于性能敏感型应用而言,选择`armeabi-v7a`可以充分利用现代ARM处理器的优势,提升...

    ijkplayer-anddroid编译好的so库 arm64-v8a、armeabi、armeabi-v7a、x86、x86_64

    ijkplayer-anddroid编译好的arm64-v8a、armeabi、armeabi-v7a、x86、x86_64 下的so库,包括libijkffmpeg.so,libijkplayer.so,libijksdl.so

    release-eulixspace-android_v2.0.3_release_06272245_eulix_armeabi-v7a-alpha.285591.apk

    release-eulixspace-android_v2.0.3_release_06272245_eulix_armeabi-v7a-alpha.285591.apk

    友盟推送so库文件,arm64-v8a,armeabi-v7a架构

    在本案例中,我们关注的是友盟推送服务的SO库,它针对两种主要的Android处理器架构:arm64-v8a和armeabi-v7a。 友盟推送是友盟(Umeng)提供的一项服务,旨在帮助开发者向用户发送消息推送通知,以提高用户活跃度和...

Global site tag (gtag.js) - Google Analytics