JNI开发流程(androidstudio)

来源:互联网 发布:淘宝中切片图片上传 编辑:程序博客网 时间:2024/06/03 09:12

一、ndk下载安装并配置环境

下载解压得到如下目录(本人用的是r10版本):


目录介绍(主要需要知道的目录):

  * docs:帮助文档

  * build/tools:linux的批处理文件

  * platforms:编译c代码需要使用的头文件和类库

  * prebuilt:预编译使用的二进制可执行文件

  * sample:jni的使用例子

  * source:ndk的源码

  * toolchains:工具链

  * ndk-build.cmd:编译打包c代码的一个指令

配置环境变量(主要是为了方便能够使用一些jni命令):

   在系统变量Path加入ndk的解压根目录


  检测ndk环境变量配置是否成功cmd输入ndk-build回车:


到此我们ndk环境配置就算完成。

二、androidstudio之jni:

打开androidstudio创建项目这个大家总会吧,没什么可说的。然后关联ndk:点击File选择Project Structure点击SDK Location我们可以看到Androd NDK location这个条目,然后这个路径就选择我们ndk的解压根目录。


然后我们还需要配置一些东西:首先是gradle.properties文件里面加入

android.useDeprecatedNdk=true
表示对老版本ndk的兼容,这个我们把项目从eclipse导入到androidstudio的时候大家都知道吧,as会自动帮我们加上这一行代码。这个我们手动写一下就好了。下面我们开始写代码:
把工程切换到Project在项目包下创建一个JNI的类在类里面定义一个native本地方法sayHello

在main目录下创建jni文件夹
接着创建c源文件New C/C++ Source File
双击打开文件开始写c程序,由于本人对c语言学习还不够技术积累有限,目前也就能看得懂一些简单的c程序(/ □ \),一般在公司开发需要使用jni技术的会有专门的程序员写好c或c++的源代码和文档给我们,我们在这里根据文档进行开发就是了。这里我就写了一个简单的例子:
#include<stdio.h>#include<stdlib.h>#include<jni.h>/** * jstring :返回值 * Java_全类名_方法名 * JNIEnv* env:里面有很多方法 * jobject jobj:谁调用了这个方法就是谁的实例 * 当前就是JNI.thi */jstring Java_com_zhang_ndkdemo_JNI_sayHello(JNIEnv* env,jobject jobj){//jstring     (*NewStringUTF)(JNIEnv*, const char*);    char* text = "I am from c!!!";    return  (*env)->NewStringUTF(env,text);}

上述代码相信稍微会一点c语言都能够看得懂吧,就是返回一个字符串。需要注意的地方就是
Java_com_zhang_ndkdemo_JNI_sayHello这个方法名,我们直接找到刚才我们创建的JNI类找到那个sayHello方法右键方法名选择Copy Reference
粘贴进来然后把"."改成"_"最前面加上Java_就好了,这个就是方法名,注意别写错了。
下一步打开app的build.gradle在android空间的defaultConfig空间里加入
ndk{    moduleName "Hello" //so文件: lib+moduleName+.so    abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的类型}
然后build工程,我们在Project视图下app->build->intermediates->ndk->lib目录下会生成三个so文件,如果没有生成请重新检查代码再build工程。
下一步我们开始调用c程序,在此之前需要在静态代码块里面加载动态链接库:
在MainActivity里面调用:
TextView tv = (TextView) findViewById(R.id.tv); JNI jni = new JNI(); tv.setText(jni.sayHello());

运行效果:
到此我们的androidstudio下jni开发的一个简单的例子就算完成了。是不是觉得和在eclipse里面开发jni简单多了呢?
补充:
还有个办法利用java命令生成.h文件:
进入我们项目目录:
敲入javah加上java类的全路径:
我们看到项目目录下会生成这个.h文件
然后把这个文件拷贝到jni目录下,创建c源文件第一行引用刚刚那个.h文件:
后面就是写c函数实现业务逻辑跟上面还是一样。
附件:
Dev-Cpp:一个在c语言工具点击打开链接

0 0
原创粉丝点击