在安卓平台上开发应用,通用的语言是 Java ,而对于从其它平台迁移到安卓的项目、产品,或者对于惯用 C/C++ 编程的开发人员来讲,会希望复用已有的 C/C++ 代码。安卓平台提供了复用 Native 代码的途径,也提供了编译 C 代码的环境和工具链: NDK 。 NDK 是一套工具链,有了它,在安卓上使用 C 语言成为可能。其实安卓原本是在 Linux 上套了个 Java 环境,要说不能用C 那才是不可思议的事儿,只是 Google 没完全开放而已(话说我到现在都在腹黑,为么不能让 C 程序员在安卓上活得自在些呢,简直是人为制造障碍)。
安卓平台上服用 C 代码有两种方式:
- JNI
- 原生 C 可执行程序
JNI 方式
JNI 原本是Java 提供的一种复用 C 代码的框架,安卓又对此进行了一些扩充,加了个 AIDL 用在服务框架中,搞了一套工具,在使用 Android.mk 编译时可以根据 AIDL 文件自动生成对应的 Java 代码并编译。
使用 JNI 主要是把 C 代码编译成动态库,在 Java 中调用。使用的步骤大概是这样的:
- 在 Java 代码中声明 native 方法
- 在 JNI(桥接 C 代码的这部分 C 代码称之为 JNI 层)层按照命名规则实现与 Java 层对应的本地方法
- 在 Java 层加载 C 动态库
JNI 方式的例子,如 Qt on Android ,Vitamio ,还有安卓框架本身中的一些例子