JNI_OnLoad动态注册函数

这篇博客介绍了如何在Android中使用JNI_OnLoad动态注册本地方法,避免了传统Java JNI方式需要每次都通过javah生成头文件的步骤。文章详细阐述了在C/C++文件中定义本地方法,创建JNINativeMethod数组,并在JNI_OnLoad方法中通过FindClass和RegisterNatives进行动态注册的过程。还提供了一个完整的JNI_OnLoad案例,包括Java和C++的代码示例。
摘要由CSDN通过智能技术生成

在应用层加载so的时候,虚拟机首先回去/自动执行JNI_OnLoad(…),

传统java Jni方式:
1.编写带有native方法的Java类
2.使用javah命令生成.h头文件
3.编写代码实现头文件中的方法
但是上述每次都需要通过javah依据java类的全类名生成对应的native函数全名称,其实我们可以使用RegisterNatives方法把c/c++中的方法隐射到Java中的native方法

使用JNI_OnLoad步骤
在c/c++文件中定义并实现对应java中声明的本地方法,方法名称随意,但是参数类型和参数个数必须一样
创建声明JNINativeMethod类型的数组,值为需要动态加载映射的本地方法

实现JNI_OnLoad方法,主要分为下面两步:
通过FindClass获取所需的映射的java类
通过jint RegisterNatives(jclass clazz, const JNINativeMethod* methods, jint nMethods) 方法动态注册

JNI_OnLoad案例

1.创建JniOnloadTest.java 即定义的native方法,用来供java层调用
package com.jni.test;

/**

  • Created by liuhang on 18-7-22.
    */

public class JniOnloadTest {
public native int javaAdd(int x, int y);
public native String javaSayHi();
static {
System.loa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值