关于Android中的armeabi 和armeabi-v7a

简而言之:armeabi 和 armeabi-v7a是针对不同CPU而建立的文件夹,armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。因此armeabi通用性强,但速度慢,而v7a能充分发挥cpu的性能,armeabi-v7a 应该是与AIR限定支持android2.2以上的条件有关。android2.2以上能让硬件发挥更大的作用,所以建议现在都可以选择将SO文件放到armeabi-v7a 文件夹下


下面有篇详细的介绍:感谢原作者:http://www.shadowkong.com/archives/1530#comment-1358。

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

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

1
2
3
4
5
6
7
8
9
10
//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。

你可能感兴趣的:(Android)