由于笔者一直从事c++的开发,因此转移到android平台时不免需要使用jni的模式进行开发。
本人使用的ndk版本为r5b,该目录下面自带了一个hello-jni的sample程序,在导入该project到eclipse的时候破费周折,
按照网上教程均无法奏效,后来查阅官方文档,才顺利完成导入,编译。
(eclipse + ndk + cygwin平台的搭建请参阅该文档:windows系统集成cygwin与Eclipse与使用Android NDK r5(支持OpenglES),集成(转) )
官方文档:
In Eclipse:
- Click File > New Android Project...
- Select the Create project from existing source radio button.
- Select any API level above Android 1.5.
- In the Location field, click Browse... and select the
<ndk-root>/samples/hello-jni
directory. - Click Finish .
之后就可以编译了。
如果想自己建一个jni工程也很简单,建立一个新的android工程,然后在工程目录下面手动建立一个"jni"目录(与src目录平级),然后在该目录下面建立一个Android.mk(android的makefile)和你的c文件或者cpp文件,在函数声明和调用方面可以参照sample程序hello-jni,特别注意的是函数名字需要遵循"Java_packetname_projectname_functionname"的规则,否则运行期间会报链接错误。
编写c或者c++程序时的一个小的注意事项:
1.c代码,如实例中那样使用env参数,(*env)->NewStringUTF(env, "Hello from JNI!");
2.c++代码,需要这样调用 env->NewStringUTF("Hello from JNI!");
原因在于jni.h中对JNIEnv的声明针对c和c++是不同的,如下:
#if defined(__cplusplus)
typedef _JNIEnv JNIEnv;
#else
typedef const struct JNINativeInterface* JNIEnv;
#endif