前言
之前写了一篇怎样搭建NDK环境。但是,在搭建完成后我们发现,我们并不懂如何从头开始构建一个jni程序。在网上查了很多资料,更多实在2012年r7版本之前的步骤。现在版本已经到了NDK的r10,其中继承Cygwin。所以,步骤上还是有所不同的。我下面来给大家介绍一下如何创建第一个JNI程序。
第一个JNI程序
第一步
在eclipse中创建一个Android工程,取名为JNItest。包名为com.ye.jnitest。
在MainActivity.java的onCreate函数中删除setContentview。添加下面几行:
其中JNItest()是我们在后面声明的函数。
第二步
在MainActivity.java文件中,声明一下JNI相关的函数。
第36行,是声明我们需要调用的用c/c++实现的函数。
第37行,是声明该函数所在的库。
第三步
在工程名点击右键,Android Tools->Add Native Support..会出现下面窗口。我们把默认的工程名改为我们刚刚声明的函数所在库的名字。
单击Finish。我们工程文件夹下就会添加jni相关的文件夹。
第四步
打开jni文件夹,你可以看到两个文件:Android.mk和JNI_test.cpp
Android.mk类似于linux系统中的makefile。
LOCAL_MODULE是你刚刚输入的库名称。
LOCAL_SRC_FILES是你生成库所需要的源文件。
我们参照Hellojni程序,在jni文件夹中创建一个JNI_test.c。并把LOCAL_SRC_FILES后面的值改为JNI_test.c。
第五步
在JNI_test.c中,把Hellojni相关的代码复制过来。
但是有一点非常重要。这也是JNI中你写的c/c++函数是否能被正确编译和识别的最关键的地方。就是你在文件中所写的函数名。在jni中,函数名的命名规则是:Java+“包名”+“文件名”+“函数名”。这里的包名、函数名都是指调用你所写的c/c++函数地方的包名、函数名。
这样,保存后点击右键run as->Android application。进行编译和运行。就能看到我们预想的结果了。
结语
这样我们第一个JNI程序就写完了。大家可能会遇到Unable to launch cygpath. Is Cygwin on the path?的报错。可以参见我之间搭建NDK环境的帖子。http://blog.csdn.net/ddjq12/article/details/46827097
后面我还会写一篇我如何仿写android-serialport-api,并分享一下我的心得。