安卓JNI开发总结
来源:互联网 发布:数据可视化分析 编辑:程序博客网 时间:2024/05/18 03:10
开发流程
- 编写c++头文件
- 编写java代码
- 编写jni代码
- 联调:编译问题、load问题、接口回调问题等
java层和jni层之间的调用
- java调用jni(native)方法
- java层要做的事情
- 在libs文件夹中放so文件
- System.LoadLibrary(“libraryname”)
- 定义native方法
- 在java代码中直接调用
- native层要做的事情
- register注册,分动态注册和静态注册:RegisterNatives
- 实现注册时相应的native方法,native方法中调用c++代码,实现功能或返回相应值。
- java层要做的事情
- jni(native)调用java代码
- java层要做的事情
- 编写相应方法实现某些功能或获取某些数据
- 完成后一般不能改动包名、类名、方法名、参数名、参数类型,返回值类型等,如需改动,jni层也要做出相应修改。
- native层要做的事情
- 对于会频繁使用的类首先cache缓存相应类、变量及方法,或者对于只使用一次的类在使用时再获取相应id。FindClass、GetMethodID、GetFieldID。
- 根据相应id调用到java方法NewObject、CallXXXMethod、CallStaticXXXMethod
- java层要做的事情
类型对应
数据结构
- long - J
- int - I
- short - S
- float - F
- double - D
- void -V
- boolean - Z
- byte - B
- char - C
- int[] - [I
- int[][] - [[I
- String - Ljava/lang/String;
方法
- void fun1( ) - V
- boolean fun2(int param) - (I)B
- int fun3(String param) - (Ljava/lang/String;)I
- long fun4(int param1,String param2) - (ILjava/lang/String;)J
- String fun5(int[] param1,String param2) - ([ILjava/lang/String;)Ljava/lang/String;
常用方法
- java调用jni(native)方法
- register
- env->RegisterNatives(…)
- register
- jni(native)调用java代码
- cache
- env->FindClass(…)
- env->GetMethodID(…)
- env->GetFieldID(…)
- 调用
- env->NewObject(jclass, jmethodID initMethodID,[param…])–该方法相当于调用java类的构造函数
- env->CallVoidMethod(jobject, jmethodID,[param…])
- env->CallIntMethod(…)
- env->CallBooleanMethod(…)
- env->CallObjectMethod(…)
- env->CallStaticVoidMethod(…)
- env->CallStaticIntMethod(…)
- env->CallStaticBooleanMethod(…)
- env->CallStaticObjectMethod(…)
- cache
阅读全文
0 0
- 安卓JNI开发总结
- 安卓JNI开发-01
- 安卓jni开发demo
- 安卓开发之JNI编程详解
- 安卓开发什么时候使用jni
- 【安卓开发】JNI常用接口 - 2
- 【安卓开发】JNI常用接口 - 3
- 【安卓开发】JNI常用接口 - 4
- 【安卓开发】JNI常用接口 - 5
- 安卓开发 java调用jni
- 安卓开发 Jni新手初步尝试
- 安卓JNI--Android studio 1.5 JNI开发初探
- 安卓开发总结
- 【安卓开发】JNI开发常用接口 - 1
- 安卓JNI/NDK开发1(开发前了解)
- 安卓开发中学习使用ndk开发jni注意事项
- 安卓开发-标签总结
- 安卓开发-函数总结
- [MYSQL -20]更新和删除数据
- 全局变量、static全局变量、全局常量使用方法
- linux之top
- caffe blob类用法详解
- maven常见问题总结
- 安卓JNI开发总结
- thinking in java——初始化与清理
- Android 仿今日头条、网易新闻的频道管理
- 面试准备之-海量数据处理题目
- Hibernate中fetch和lazy介绍
- 面向对象基础
- React组件属性类型(propTypes)
- FFTW 库使用
- 一起来看MyBatis(七)