安卓JNI开发总结

开发流程

  1. 编写c++头文件
  2. 编写java代码
  3. 编写jni代码
  4. 联调:编译问题、load问题、接口回调问题等

java层和jni层之间的调用

  1. java调用jni(native)方法
    • java层要做的事情
      • 在libs文件夹中放so文件
      • System.LoadLibrary(“libraryname”)
      • 定义native方法
      • 在java代码中直接调用
    • native层要做的事情
      • register注册,分动态注册和静态注册:RegisterNatives
      • 实现注册时相应的native方法,native方法中调用c++代码,实现功能或返回相应值。
  2. jni(native)调用java代码
    • java层要做的事情
      • 编写相应方法实现某些功能或获取某些数据
      • 完成后一般不能改动包名、类名、方法名、参数名、参数类型,返回值类型等,如需改动,jni层也要做出相应修改。
    • native层要做的事情
      • 对于会频繁使用的类首先cache缓存相应类、变量及方法,或者对于只使用一次的类在使用时再获取相应id。FindClass、GetMethodID、GetFieldID。
      • 根据相应id调用到java方法NewObject、CallXXXMethod、CallStaticXXXMethod

类型对应

  • 数据结构

    • 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(…)
  • 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(…)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值