[Go Back]

[請指教:高老師的免費on-line教學視頻]

 

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]