arm 及ndk编译
android的armeabi跟armeabi-v7a
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):
- ‘armeabi’ – 默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI 创建的二进制代码将可以在所有 ARM* 设备上运行。
- ‘armeabi-v7a’ – 创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
- ‘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 寄存器。
相关解决方案
- armeabi 跟armeabi-v7a
- APP_ABI := armeabi armeabi-v7a mips x86与=armeabi armeabi-v7a区别是?解决思路
- NDK编译的so资料armeabi和armeabi-v7a
- 关于“ can not find ./obj/local/armeabi/libopencv_contrib.a: Permission denied ”有关
- Android(OpenCV) NDK开发: 0xdeadbaad(code=1)异常 及 关闭armeabi和
- ndk-build在libs/armeabi目录生成libxxx.so有关问题
- 添加一个ABI替armeabi的设备失败
- 有大侠知道这种异常吗?eclipse clean时候,recipe for target `clean-box2d_static-armeabi
- Android support V3 v7 v13的差别
- android 引来v7包的正确方式
最新解决方案
arm 及ndk编译的更多相关文章
- Linux下NDK编译FFMPEG包含neon参数
FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...
- Linux下使用NDK编译FFMPEG(libstagefright)
这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...
- [原]如何用Android NDK编译FFmpeg
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- NDK编译FFMpeg[Linux]
最近在研究视频直播相关的技术,了解到了FFmpeg,就在网上查看如何将FFmpeg移植到Android中,查了几天,看的东西不少,就是没有一个可以完全移植成功的,最后通过产看各种资料,结合网上的资料, ...
- anroid ndk编译ffmpeg 引用librtmp libx264
Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完 ...
- 【转】如何把ndk编译出来的可执行文件伪装成so打包到apk中
原文网址:http://jeyechao.iteye.com/blog/2164286 ndk编译出来的共享库,eclipse会自动打包到apk中,而编译出来的可执行文件则不会. 要想可执行文件自动被 ...
- ndk编译时的通用Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 MY_SRC_PATH := $(LOCAL_PA ...
- 64位 CentOS NDK 编译 FFMPEG
64位 CentOS NDK 编译 FFMPEG 一. 参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...
随机推荐
- SQL SERVER while循环
在SQL数据库中,可以通过WHILE实现循环,下面就将为您介绍SQL循环执行while控制,希望对您提升WHILE的使用水平能够有些帮助. WHILE Boolean_expression { ...
- ExtJs中处理时间,出现NaN-NaN-NaN的解决方式
关键字: extjs日期格式问题(二) 一般我们的前台代码Ext.grid.ColumnModel里会这样写,以便显示日期格式: Js代码 1..... 2.{header:"birth ...
- OC基础-day04
#pragma mark - Day04_01_匿名对象 1. 如果函数有返回值 我们可以不使用变量接收返回值. 而是直接将函数写在要使用其返回值的地方. 2. 正常情况下.我创建对象. 是使用了1 ...
- JPEG 图
多媒体教程 - JPEG 图 JPEG 是在 Web 上使用的主要图像格式之一. 本文讲解 JPEG 图像的概念和特性. 理解图像格式 无论是 HTML 还是 XHTML 都没有规定图像的官方格式.然 ...
- 新的博客已经启用,欢迎大家访问(402v.com)
非常抱歉这个博客已经暂停更新,新的博客已经启用,欢迎大家访问(402v.com)!谢谢支持!
- windows phone 之手势识别(Manipulation)
在Windows Phone 7的多触摸屏上可以检测到至少四根同时存在的手指,并且一起操作使触摸屏充分发挥效果. 在silverlight开发中通过事件来实现触屏事件的检测,包括低级别的和高级别的接口 ...
- 关于php的一些开源程序
最好用的当属thinksns,目前更新到4.3.4, 社交型网站. 此网站提供大量源码,有时间可以去看看:http://down.admin5.com/
- swift官方文档中的函数闭包是怎么理解的?
官方文档中的16页: numbers.map({ (number: Int) -> Int in let result = * number return result }) 不知道这个怎么用, ...
- 自定义函数中的参数返回值 “-> (Int -> Int)”的问题
func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { + number } retur ...
- 帝国cms灵动标签调用tags
这个语法用来调用[指定分类][指定条件]的所有tags [e:loop={"select * from [!db.pre!]enewstags order by num desc limit ...