android jni开发流程
16lz
2021-01-26
jni开发的流程:
第一步:先在java代码中声明一个native的方法
/** * 第一步 * @return */public native String fromC();
第二步:
在Eclipse的工程目录下创建一个文件夹 名称jni
第三步: 编写c代码
#include <stdio.h> //引入标准输入输出的头文件#include "jni.h" //如果头文件在编译环境里 直接指定<> 如果文件在当前目录下""//实现java里面未实现的方法/** *JNIEnv* env java虚拟机的环境,指针 *jobject 调用这个c代码的java对象,如果在MainActivity里面调用的方法。obj代表就是MainActivity对象 */
<pre name="code" class="java" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 22px;">//Java_com_example_jnidemo1_MainActivity_fromCJava是固定格式 后面是包名 再后面是方法jstring Java_com_example_jnidemo1_MainActivity_fromC(JNIEnv* env,jobject obj){//第三步 c代码;char* str = "hello from c !!";//在jni规范里面 在jni环境的结构体里面//jstring (*NewStringUTF)(JNIEnv*, const char*);//转化成了java的字符串return (*(*env)).NewStringUTF(env,str);}
第四步:配置Android.mk文件
#指定编译的文件夹 指定当前文件目录LOCAL_PATH := $(call my-dir)#编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。include $(CLEAR_VARS)#编译出来模块的名称LOCAL_MODULE := hello# 编译的源代码的名称LOCAL_SRC_FILES := hello.c#编译一个动态库,静态库#静态库 文件名.a 包含所有的函数并且函数运行的依赖,体积大,包含所有的API#动态库 文件名.so 包含函数,不包含函数运行的依赖,体积小,运行的时候,去操作系统寻找需要的APIinclude $(BUILD_SHARED_LIBRARY)
第五步:ndk-build.cmd指令编译c代码
第六步:在java代码里面,把动态链接库加载到jvm虚拟机 static{ System.loadLibrary("库文件名称不带前缀,后缀名"); }
static{System.loadLibrary("hello");}
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString str = fromC();Toast.makeText(MainActivity.this, str, 1).show();}});}
这个小项目我已经传到github上面了,有需要的可以下载看看
github:https://github.com/zhouwei5200/JNIDemo
更多相关文章
- Android(安卓)Studio使用---眼花缭乱的插件使用技巧
- Android(安卓)Studio 使用 System.loadLibrary()的一些问题
- Android(安卓)代码控制手机数据网络的开关(5.0以上)
- 学习:Android生命周期
- Android之使用网络技术
- Dalvik——基本Dalvik VM调用
- android中的数据存储 收藏
- android 系统重启关机 方法 非常好的一篇文章
- Android实现中文按拼音排序方法