android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )

android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )

ID:14195679

大小:45.50 KB

页数:7页

时间:2018-07-26

android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )_第1页
android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )_第2页
android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )_第3页
android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )_第4页
android jni实例(android 学习资料 集成测试 及实例程序源代码 ,jni实例程序 )_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。