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
- JNI开发流程(androidstudio)
- JNI NDK (AndroidStudio+CMake )开发第一个项目的流程
- AndroidStudio下jni开发
- AndroidStudio使用jni开发
- AndroidStudio Jni 开发初识
- AndroidStudio jni 开发
- AndroidStudio建立完整JNI开发工程流程及Java通过JNI调用C函数
- AndroidStudio Plugins 开发流程
- AndroidStudio集成ndk、开发JNI
- AndroidStudio JNI 开发哪些事儿
- Androidstudio中JNI开发初探
- Androidstudio中JNI基本开发
- jni教程(AndroidStudio)
- androidStudio JNI开发之c调java的流程和注意事项
- JNI笔记 JNI开发流程
- AndroidStudio下JNI开发(easy+1.0)之自动编译
- AndroidStudio下JNI开发(easy+1.0)之Logcat
- AndroidStudio下JNI开发(easy+1.0)之签名
- Node Js 使用Protobuf
- 面试微软等公司必备的书
- eclipse下运行自定义maven命令
- 行测-言语类题目总结
- SpringBoot16 之 Listener and Filter
- JNI开发流程(androidstudio)
- elasticsearch-倒排索引原理
- 通过Android 源码分析ScrollView ‘ScrollView can host only one direct child’错误问题
- Mac 上安装 mariadb
- 质因数
- 数据结构实验之串一:KMP简单应用
- 64位寄存器图
- mysql中tinyint、smallint、int、bigint的区别
- MySQL基础学习总结