WEB开发网
开发学院手机开发Android 开发 Android JNI开发入门之二 阅读

Android JNI开发入门之二

 2010-12-18 08:04:03 来源:WEB开发网   
核心提示:在上一篇文章《Android JNI开发入门之一》中,我介绍了Android应用程序(APK)怎样通过JNI调用Native C实现的共享库,Android JNI开发入门之二,本文将进一步介绍Android应用程序通过JNI调用Native C++实现的共享库,并实现一个和上文《Android JNI开发入门之一》相

在上一篇文章《Android JNI开发入门之一》中,我介绍了Android应用程序(APK)怎样通过JNI调用Native C实现的共享库。本文将进一步介绍Android应用程序通过JNI调用Native C++实现的共享库,并实现一个和上文《Android JNI开发入门之一》相同功能的Helloworld应用程序。

两套不同的API

前文已经提到,Android系统的Java虚拟机为C和C++实现两套不同的API,所以我们调用的时候需要注意这一点儿。另外Google 并没有提供JNI的文档,我们调用的时候可以参考Android的jni.h文件,里面有C和C++的JNI函数原型。也可以把本例的相同功能 HelloWorld库和上文《Android JNI开发入门之一》进行比较。

C++实现HelloWorld共享库

在本例中Android应用程序不需要有任何变化,我们需要重新用C++实现HelloWorld共享库。创建com_simon_Helloworld.cpp文件,并在文件中输入如下内容:

#include

#define LOG_TAG "HelloWorld"

#include

/*

* Class: com_simon_Helloworld

* Method: print

* Signature: ()V

*/

/*JNIEXPORT void JNICALL Java_com_simon_Helloworld_print(JNIEnv *, jobject)*/

JNIEXPORT jstring JNICALL Java_com_simon_HelloWorld_printJNI(JNIEnv *env, jobject obj)

{

LOGI("Hello World From libhelloworld.so!");

return env->NewStringUTF("Hello World!");

}

static const char *classPathName = "com/simon/HelloWorld";

static JNINativeMethod methods[] = {

{"printJNI", "()Ljava/lang/String;", (void*)Java_com_simon_HelloWorld_printJNI },

};

/*

* Register several native methods for one class.

*/

static int registerNativeMethods(JNIEnv* env, const char* className,

JNINativeMethod* gMethods, int numMethods)

{

jclass clazz;

clazz = env->FindClass(className);

if (clazz == NULL) {

LOGE("Native registration unable to find class '%s'", className);

return JNI_FALSE;

1 2 3  下一页

Tags:Android JNI 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接