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

Android JNI开发入门之二

 2010-12-18 08:04:03 来源:WEB开发网   
核心提示:4、函数映射表的定义非常的怪异,你可以参考Android JNI 使用的数据结构JNINativeMethod详解和JNI标准手册相关类型的部分,Android JNI开发入门之二(3),通过对比你会发现C++的实现同样功能的共享库比C加入更多的代码,另外你可能会有疑问既然Java虚拟机能用通过函数名访问到相应的Nat

4、函数映射表的定义非常的怪异。你可以参考

Android JNI 使用的数据结构JNINativeMethod详解和JNI标准手册相关类型的部分。

通过对比你会发现C++的实现同样功能的共享库比C加入更多的代码,另外你可能会有疑问既然Java虚拟机能用通过函数名访问到相应的 Native code函数,为什么还要提供注册映射函数表呢?没错!作为一个HelloWorld程序,确实简单为第一要务!如果Java虚拟机能用函数名能访问到相 应的函数的话,我是不会多此一举来注册映射函数表。在实践中我发现:

标准JNI不能通过标准函数名找到C++实现的Helloworld共享库中的函数,但是C实现的helloworld共享没有这个问题。我不知道为什么会这样,请达人指教。没有办法才提供注册映射函数表。

下面提供一个helloworld共享库的Makefile——Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:=com_simon_Helloworld.cpp

LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)

LOCAL_MODULE := libhelloworld

LOCAL_SHARED_LIBRARIES := libutils

LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)

和前文《Android JNI开发入门之一》的Android.mk文件相比也就是修改了一下源文件,没有什么可说。编译生成libhelloworld.so文件,允许前文HelloWorld Android应用程序,你将会得到和前文相同的结果。

JNI的进一步学习

通过上面的例子我们已经初步掌握了Android编写JNI程序的方法。这也只能算是Android JNI入门而已,有很多JNI相关的内容我们在例子中并没有涉及到,比如:

1、我们并没有提到怎样在Native代码中回调Java的函数。

2、每个Native的函数中前两个参数是什么意思?

如果想用JNI进行Android应用开发我们需要更深入的学习。为了大家共同进步,我这里也可以提供一些相关的资料和方法。

如果我们想深入学习JNI首先要先熟悉标准的JNI。推荐大家学习《Java Native Interface: Programmer’s Guide and Specification》,权威的标准JNI学习文档。

前文提到Google没有Android JNI编程提供文档,但是在网上Simon也找到了一篇非常好的文档供大家参考——JNI Examples for Android。这篇文章中举了一个例子包含了Android JNI开发的方方面面,想深入学习Android JNI开发的朋友请仔细研读。

总结

俗话说得好“问道有先后,如是而已”,Simon也是刚刚才开始学习Android JNI编程,对JNI的理解上面难免有一些地方有错误,欢迎朋友们指正。

上一页  1 2 3 

Tags:Android JNI 开发

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