Android NDK学习 <一> 简介

本文详细介绍了Android NDK的功能和组成部分,解释了如何使用NDK将C/C++代码编译成Android应用程序可以使用的本地库。此外,还介绍了NDK支持的不同指令集及编译选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android NDK(Native<wbr></wbr>Developer<wbr></wbr>Kit<wbr>)是个工具集,它提供一套方法,使Android应用程序(Java程序)可以内嵌native(C,C++)程序。<br><br> Android应用程序(Java程序)运行于Dalvik虚拟机中。NDK允许应用程序的一部分使用native语言(C,C++)来实现。这对很多程序都是有帮助的,比如需要利用以前完成的C,C++代码,也可以提高运行速度。<br><br><br> NDK提供以下:<br> 1. 一组工具和编译文件,用来将C/C++代码生成Native库。<br> 2. 将Native库嵌入应用程序包(APK)的方法。<br> 3. 一组Native系统头文件和库。它们支持所有未来Android版本(从Android1.5开始)。但应用程序使用Native Activity则必须在Android2.3或更高版本使用。(因为android.app.NativeActivity从API 9才有)<br> 4. 文档,例子和指南。<br><br> 最近的NDK(NDK R7C)支持的指令集如下:<br> 1.<wbr><span style="word-wrap:normal; word-break:normal">ARMv5TE (including Thumb-1 instructions)<br> 2. <wbr><wbr></wbr></wbr></span><span style="word-wrap:normal; word-break:normal">ARMv7-A (including Thumb-2 and VFPv3-D16 instructions, with optional support for NEON/VFPv3-D32 instructions)<br> 3. <wbr><wbr></wbr></wbr></span><span style="word-wrap:normal; word-break:normal">x86 instructions (see CPU-ARCH-ABIS.HTML for more information)</span><wbr><span style="word-wrap:normal; word-break:normal"><br><br> ARMv5TE(包括Thumb-1)与ARMv7-A的主要区别是:ARMv7-A支持硬件VFP,</span><span style="word-wrap:normal; word-break:normal">Thumb-2</span><wbr>,Neon指令。<br><span style="word-wrap:normal; word-break:normal"><br> 可以编译为任意一种或者两者的指令集,</span><wbr>缺省编译为<span style="word-wrap:normal; word-break:normal">ARMv5TE指令。但转换为</span><span style="word-wrap:normal; word-break:normal">ARMv7-A</span><wbr>也是很容易的(<span style="color:rgb(0,112,0)"><span style="line-height:1em">Application.mk</span></span><span style="word-wrap:normal; word-break:normal"><wbr></wbr></span><wbr>中修改即可)。也可以在同一时刻编译为双指令集。(<span style="word-wrap:normal; word-break:normal">CPU-ARCH-ABIS.HTML in the NDK package</span><wbr>中下一步察看)<br><br> NDK提供libc(C库),libm(数学库),<span style="word-wrap:normal; word-break:normal">3D graphics 库</span>的稳定头文件等。<br><br> NDK的成分如下:<br> NDK包含APIs,文档,例子程序等。<br><br> Developer Tools包含如下:<br> 1.交叉编译器,可以在Linux,Windows,MacOS下产生 native ARM二进制文件。<br> 2.一组系统头文件<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  • libc (C library) headers
  • libm (math library) headers
  • JNI interface headers
  • libz (Zlib compression) headers
  • liblog (Android logging) header
  • OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers
  • libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).
  • A Minimal set of headers for C++ support
  • OpenSL ES native audio libraries
  • Android native application APIS

    NDK同时还提供一套编译系统,以方便使用。可以不必了解Toolchain/CPU/Platform/ABI等细节,只是创建一个简单的build 文件,指明哪个文件需要被编译,以及哪个Android应用程序将要使用它,就可以编译成功。




NDK无法产生最终的APK,只能产生被APK所使用的动态库。(Sam:其实还可以产生native C可执行程序)

NDK需要GNU Make 3.81或者以上版本(make -v可以看到)。


另外:Android1.5之后,Android 2.3之前的Android版本。使用C/C++代码,只能用JNI方式,并使用NDK编译。
但在Android2.3 之后,因为有了android.app.NativeActivity<wbr>。所以可以不再利用JNI方式由Java调用C/C++代码编译出的库了。<br><br><span style="word-wrap:normal; word-break:normal"><span style="word-wrap:normal; word-break:normal"><br><span style="word-wrap:normal; word-break:normal">注:一些Linux下单列出来的库,被合并到C库中了,例如libpthread.so. 被合并入</span><span style="word-wrap:normal; word-break:normal"><span style="word-wrap:normal; word-break:normal">libc.so</span></span><br><br></span></span></wbr>

注意:此处NDK版本为NDK R7C.


文章摘自:http://blog.sina.com.cn/s/blog_602f8770010146tp.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值