本文来自 安卓巴士(www.apkbus.com)整理总结
1、前言
6 月 26 日, GoogleAndroid 发布了 NDK ,引起了很多发人员的兴趣。 NDK 全
称: Native Development Kit 。下载地址为:
http://developer.android.com/sdk/ndk/1.5_r1/index.html 。
2、误解
新出生的事物,除了惊喜外,也会给我们带来一定的迷惑、误解。
2.1、误解一: NDK 发布之前, Android 不支持进行 C 开发
在 Google 中搜索 “NDK” ,很多 “Android 终于可以使用 C++ 开发 ” 之类
的标题,这是一种对 Android 平台编程方式的误解。其实, Android 平台从诞生起,就已
经支持 C 、 C++ 开发。众所周知, Android 的 SDK 基于 Java 实现,这意味着基于 Android
SDK 进行开发的第三方应用都必须使用 Java 语言。但这并不等同于 “ 第三方应用只能使
用 Java” 。在 Android SDK 首次发布时, Google 就宣称其虚拟机 Dalvik 支持 JNI 编程
方式,也就是第三方应用完全可以通过 JNI 调用自己的 C 动态库,即在 Android 平台上,
“Java+C” 的编程方式是一直都可以实现的。
当然这种误解的产生是有根源的:在 AndroidSDK 文档里,找不到任何 JNI 方面的
帮助。即使第三方应用开发者使用 JNI 完成了自己的 C 动态链接库( so )开发,但是 so
如何和应用程序一起打包成 apk 并发布?这里面也存在技术障碍。我曾经花了不少时间,
安装交叉编译器创建 so ,并通过 asset (资源)方式,实现捆绑 so 发布。但这种方式只
能属于取巧的方式,并非官方支持。所以,在 NDK 出来之前,我们将 “Java+C” 的开发
模式称之为灰色模式,即官方既不声明 “ 支持这种方式 ” ,也不声明 “ 不支持这种方
式 ” 。
2.2、误解二:有了 NDK ,我们可以使用纯 C 开发 Android 应用
AndroidSDK 采用 Java 语言发布,把众多的 C 开发人员排除在第三方应用开发外
( 注意:我们所有讨论都是基于“ 第三方应用开发 ” , Android 系统基于 Linux ,系
统级别的开发肯定是支持 C 语言的。 )。NDK 的发布,许多人会误以为,类似于 Symbian 、
WM ,在 Android 平台上终于可以使用纯 C 、 C++ 开发第三方应用了!其实不然, NDK
文档明确说明: itisnotagoodway 。因为 NDK 并没有提供各种系统事件处理支持,也没
有提供应用程序生命周期维护。此外,在本次发布的 NDK 中,应用程序 UI 方面的 API 也