[Go Back]
1.3 如何使用Android NDK
当你依循上一节的步骤安装好NDK环境之后,就能动手利用NDK环境来开发本地(Native)的C程序了。于此,兹举例说明开发程序。
阶段一、Java端开发
Step-1. 在Android SDK环境里,建立一个开发项目
例如,建立一个名称为NDK-01的应用程序开发项目,内含helloNDK.java和test.java程序。其中,helloNDK.java的内容如下:

其中,test.java的内容如下:
这test.java用来显示起始UI画面,也用来测试helloNDK.java(其定义一个本地的sayHello()函数)。 [歡迎光臨 高煥堂 網頁:http://www.cnblogs.com/myEIT/ ]
Step-2. 进行编译,产出helloNDK.class档案
编译上述的项目,产生*.class档案。可用档案总管(File Explorer)浏览:

Step-3. 使用javah工具,产出C语言的*.h头文件
返回Android SDK环境,建立一个名称为/jni/的新档案夹(Folder)如下:

开起Windows命令列窗口,并进入/jni/目录区,执行javah工具去读取上述的helloNDK.class档案,而产出*.h头文件(Header File)。其输入命令如下:
首先,进入/jni/目录区,执行javah去读取/bin/helloNDK.class档案,然后产出com_misoo_pk01_helloNDK.h头文件。也可以加上“-o <HeaderFileName>.h”来设定所产出标档的名称。例如:javah -o helloNDK.h –classpath ../bin com.misoo.pk01.helloNDK。返回到Android SDK环境,刷新(Refresh)之后,可在Eclipse画面上看到该头文件如下:

可以打开com_misoo_pk01_helloNDK.h头文件,其内容如下:
阶段二、C端开发
当Java端开发者产出com_misoo_pk01_helloNDK.h头文件之后,就可以将NDK-01开发项目内容拷贝(或只拷贝/jni/目录区内容),并传送给C端开发者。例如,将Android 的NDK-01项目内容,拷贝到NDK的/samples/目录里如下:

Step-4. 依据*.h头文件而撰写*.c程序码
接着,C端开发者就能使用C语言,结合JNI(Java Native Interface)语法,撰写com_misoo_pk01_helloNDK.c程序码,如下:
Step-5. 编修Android.mk档案
拷贝一份Android.mk档案,放到/jni/目录区,如下:

并且修改其内容如下:

Step-6. 编译及连结本地程序
必须先开启Cygwin。也就是,从桌面或<开始/所有程序/Cygwin>里,点选<Cygwin bash shell>,出现画面:

输入cd $NDK进入NDK目录区,如下:

进入/samples/NDK-01/目录区,如下:

执行ndk-build,如下:
就完成编译和连结任务,产出libhelloNDK.so本地程序库,并放置于/libs/armeabi/里,如下:
阶段三、返回到Java端开发
当C开发端完成libhelloNDK.so程序库之后,就可以将/samples/NDK-01内容(或是只拷贝/libs/目录区内容),拷贝回去给Java开发端的Android SDK环境里。于是在Android SDK环境里可以看到libhelloNDK.so本地程序库,如下:
Step-7. 执行NDK-01范例程序
编修test.java类别
此时,Java开发端,就可以编修test.java的内容,让它调用helloNDK.java类别的本地函数,如下:

将*.so本地程序库打包到*.apk应用程序,并执行
接着编译NDK-01项目,将*.so本地程序库打包到*.apk里,并且执行该*.apk。执行到指令:obj.sayHello()时,就调用到*.so程序库里的本地C程序。于是,test.java就将本地C程序回传值显示于画面,如下:

于是,大功告成了。
[Go Back]