您可以贴出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是指ARM通用CPU的so库,v7a CPU支持硬件浮点运算。 因此,armeabi 通用性强3D道具,但速度慢cocos 支持x86架构cpu,而 v7a 可以充分利用 v7a CPU 的能力。 在AIR打包APK调试模式中,Adobe选择了通用性较强的armeabi模式。
首先,从硬件支持便利性的角度来看,目前为止我们大部分的adnroid设备都支持ARM芯片。 (当然,现在市面上最新的android机器也支持Intel等其他几种芯片,比如Intel最新的Atom项目芯片,就赢得了android4.1的青睐)。 从Android版本以及对ARM硬件编码的支持程度来看:
最初android1.6:仅支持armv4和armv5te指令集。
到达 android 2.0:添加了对 arm-vfp、armv6、armv6t2 指令集的支持。
来到android 2.2:添加了对armv7-a指令集的支持。
所以armeabi-v7a应该与AIR限制支持android 2.2以上的情况有关。 Android 2.2以上可以让硬件发挥更大的作用。
对于AIR项目来说cocos 支持x86架构cpu,性能是最大的瓶颈,可以尽可能的优化。 因此,如果连接平台SDK或者编写ANE时使用了SO库,我个人建议全部放在armeabi-v7a下,而不是放在armeabi-v7a下,以实现兼容性。 阿尔梅阿比。
-EOF-
我们的android APK的根目录中有一个libs文件夹。 该文件夹包含两个文件夹:armeabi 和armeabi-v7a。 我们的c代码编译的本地库(各种.so)都会放在这两个文件夹中。 文件夹之一。 那么armeabi-v7a和armeabi有什么区别,又代表什么意思呢?
armeabi和armeabi-v7a代表CPU的类型。 我们知道大多数手机或平板电脑都使用arm CPU(很遗憾mips的CPU被忽略了)。 不同的CPU有不同的特性。 armeabi 适用于普通或旧的 CPU。 对于arm v5 CPU,armeabi-v7a适用于具有浮点运算或高级扩展功能的arm v7 CPU。
可以在 android.mk 中配置以下宏:
TARGET_CPU_API := armeabi
APP_ABI := armeabi
当你编译时遇到一些链接动态库的undefine错误UI界面,或者你的apk运行时,加载.so动态库出错时,不妨检查一下该CPU类型的配置是否不正确。
=================================================== =================================================== ====
现在有 x86 的了。 事实上,armeabi、armeabi-v7a 和 x86 是编译 NDK 库时可以使用的三个受支持的应用程序二进制接口 (ABI):
'armeabi' – 默认选项,将创建针对基于 ARM* v5TE 的设备的库。 此目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制文件将在所有 ARM* 设备上运行。 'armeabi-v7a' – 创建一个支持基于 ARM* v7 的设备并将使用硬件 FPU 指令的库。 'x86' – 生成支持 IA-32 指令集(包括基于硬件的浮点运算)的二进制代码。
=================================================== =================================================== ======
什么是霓虹灯?
NEON* 是一项 ARM* 技术,主要用于多媒体(智能手机、高清电视等)应用。 ARM* 表示,其基于 128 位 SIMD 引擎的技术——ARM* Cortex*(串行扩展)——提供的性能比 ARM* v5 架构至少高 3 倍,比 ARM* v6 至少高 2 倍。 有关该技术的更多信息,深入了解 NEON 和其他性能注意事项,请访问:
这里的关键思想是寄存器“堆叠”到一个向量中,其中每个寄存器都是一个元素并与其他元素的数据类型匹配。 在此基础上,运算是在管道内进行的,因此这种方法称为Packed SIMD。
SSE:Intel推出的类似NEON的工具
SSE 是指英特尔架构 (IA) 的流式 SIMD 扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。 Atom™ 目前不支持 SSE4.x。 后者也是一个用于打包浮点数据的 128 位引擎。 该执行模型始于MMX技术。 SSx 是更新的技术,取代了 MMX。 。 有关详细信息,请参阅英特尔 IA-32 和 IA-64 软件开发人员手册的“第 1 卷:基础设施”部分。 URL 为:/content/www/us/en/processors/architectures-software-developer-manuals.html。 目前,SSE 概述位于第 5.5 节。 它提供 SSE、SSE2、SSE3 和 SSSE3 的操作码。 请注意,数据操作通常涉及处理基于精度的打包浮点值; 并且需要在 XMM 寄存器之间或这些寄存器和内存之间进行批量数据传输。 XMM寄存器主要用来替代MMX寄存器。