码迷,mamicode.com
首页 > 移动开发 > 详细

Android--JNI简单的实例解析

时间:2016-04-13 13:15:29      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

最近项目迭代了几个版本,目前比较轻松,虽然项目闲了,但是人不能太闲,否则就废了。千里之行始于足下、量变引起质变、学而不思则罔.......好了好了好了.....编不下去了,让我们直入正题吧,还是再说一句吧,欢迎大家交流学习,共同进步,欢迎扔搬砖,就算是你扔我也不接技术分享

一、新建一个Android项目,和以前自己建项目是一模一样滴

二、创建一个JNICall.java类:

技术分享

创建一个本地方法,这个方法作为我们调用C/C++程序的接口,另外我们通过static的方式,静态的去加载.so文件。

三、添加本地支持

选中项目,右键---->Android Tools---->Add Native Support,如图:

技术分享

这时会弹出一个Add Android Native Support对话框,此时我们输入我们的要加载的so文件的名称就ok啦:

技术分享

此时项目会多出一个,jni文件夹,里面包含了一个my_jni.cpp和Android.mk文件,如图:

技术分享

其中my_jni.cpp文件中只有一行代码,引入了jni库:

技术分享

下面我们来看看Android.mk文件:

技术分享

这个自动生成MakeFile文件中有多个属性:

LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。

include$(CLEAR_VARS)代表清除之前的依赖类库

LOCAL_MODULE是要编译的库的名称,就是我们在Add Android Native Support对话框中输入的名称。编译器会自动在前面加上lib,在后面加上.so。

LOCAL_SRC_FILES是要编译的C/C++文件。

include$(BUILD_SHARED_LIBRARY)代表编译出来的是动态库,其中include $(BUILD_STATIC_LIBRARY),编译出的是静态库 。

四、编译JNI,下面我们需要生成.h的头文件:

找到Android项目中的bin文件夹,找到classes文件夹,eclipse为我们自动生成的字节码文件都在这个文件夹下面,首先在命令行中使用cd命令切换到该目录下,然

后使用javah命令,生成我们想要得到的.h头文件:

技术分享

这个头文件生成的名字,我们是可以修改的,只要合法就可以,让我们来看一下生成的.h文件:

技术分享

五、编写生成本地库的cpp文件:

技术分享

这里我们需要引入头文件,关键的是我们来看一下方法名的格式:

Java_com_example_jnidemo_JNICall_myJni

         Java:固定的写法,必须如此

         com_example_jnidemo:为包含native方法的包名

         JNICall:为包含native方法的类名

         myJni:为native方法名

这几个方法名我们一定要对应起来,否则会出现错误:java.lang.UnsatisfiedLinkError: Native method not found

六、生成.so文件(这一步不是必须的,因为我们可以在运行的时候,eclipse可以自动会和项目一块编译生成.so文件,当然了我们也可以自己单独编译,下面介绍一下单独编译的过程)

首先通过命令cd进入到项目所在的目录,然后通过ndk-build命令生成.so文件:

技术分享

说明so文件生成了,刷新一下项目,然后我们来看一下目录的变化:

技术分享

七:调用native方法:

技术分享

八、运行项目,效果如图:

技术分享


目前为止,一个简单的JNI程序已经完成了




Android--JNI简单的实例解析

标签:

原文地址:http://blog.csdn.net/u014544193/article/details/51135699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!