欢迎来到天天文库
浏览记录
ID:14195679
大小:45.50 KB
页数:7页
时间:2018-07-26
《android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Android的SDK中没有包括JNI的支持,而且对如何支持JNI也没有任何文档说明。不过既然整个Android平台是开源的,我们可以通过Google发布的源代码来找到一些线索(比如frameworks/base/media/jni/目录),依葫芦画瓢的实现上层JAVA程序通过JNI来调用NativeC程序中的函数。依照下面的步骤可以实现一个非常简单的JNI的实例程序:1. 首先编写C模块,实现动态库。(关于如何在Android中编译C模块的更多细节,请参考《Android编译环境(1)-编译NativeC的helloworld模块》。)在development目录下添加新目录helloli
2、b,并添加hellolib.c和Android.mk文件。hellolib.c的内容如下:#include#defineLOG_TAG"TestLib"#undefLOG#include JNIEXPORTvoidJNICALLJava_com_test_TestHelloLib_printHello(JNIEnv*env,jobjectjobj){ LOGD("HelloLIB!");}注意这里的函数名需要按照JNI的规范(因此也可以用javah-jni工具来生成头文件,来保证函数名的正确性),Java_com_test_TestHelloL
3、ib_printHello的命名对应后面在java代码中,package名字是com.test,类名是TestHelloLib,native函数名是printHello。另外,LOGD及#defineLOG_TAG"TestLib"等打印log的方式是采用了Android所提供的LOG机制,这样才能通过Android的logcat工具看到log。用于编译C模块的Android.mk文件内容如下:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:= hellolib.cLOCAL_C_INCLUDES:= $(
4、JNI_H_INCLUDE) LOCAL_SHARED_LIBRARIES:= libutilsLOCAL_PRELINK_MODULE:=falseLOCAL_MODULE:=libhelloinclude$(BUILD_SHARED_LIBRARY)该文件中的一些变量分别对应的含义如下:LOCAL_SRC_FILES-编译的源文件LOCAL_C_INCLUDES-需要包含的头文件目录LOCAL_SHARED_LIBRARIES-链接时需要的外部库LOCAL_PRELINK_MODULE-是否需要prelink处理(参考prelink的详细介绍:《动态库优化——Prelink(预连接
5、)技术》,Android的Toolchain,prelink工具:《AndroidToolchain与BionicLibc》)LOCAL_MODULE-编译的目标对象BUILD_SHARED_LIBRARY-指明要编译成动态库。 接下来回到Android顶层目录,并执行makelibhello来编译:#cd$(YOUR_ANDROID)&&makelibhellotargetthumbC:libhello<=development/hellolib/hellolib.ctargetSharedLib:libhello(out/target/product/generic/obj/S
6、HARED_LIBRARIES/libhello_intermediates/LINKED/libhello.so)targetNon-prelinked:libhello(out/target/product/generic/symbols/system/lib/libhello.so)targetStrip:libhello(out/target/product/generic/obj/lib/libhello.so)Install:out/target/product/generic/system/lib/libhello.so 编译结果可得到位于out/target/pro
7、duct/generic/system/lib/目录的动态共享库libhello.so 2.编写Java模块,来通过JNI方式调用C接口。具体Eclipse环境的搭建请参考AndroidSDK文档中的详细说明,及HelloAndroid程序的创建过程,这里仅给出我们需要修改的TestHelloLib.java文件:packagecom.test;importandroid.app.Activity;impor
此文档下载收益归作者所有