Android JNI之静态注册

这篇说静态注册,所谓静态注册,就是native的方法是直接通过方法名的规定格式和Java端的声明处代码对应起来的,对于规则如下:

JNIEXPORT <返回值> JNICALL Java_<包路径(.换成_)>_<类名>_<方法名>(JNIEnv *, jobject<,方法参数>)

 

假设在HelloJni中声明了方法staticLoad(), 如下所示:

package com.example.zhanghaiqiang.hellojni;

public class HelloJni {
    static{
        System.loadLibrary("main");
    }

    public native void staticLoad();
}

则其对应的native方法名为

JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_AndroidJni_dynamicLog
  (JNIEnv *, jobject)

当然,这个规则并不需要死记,jdk中的javah自动就帮我们做这个事了,cd到java目录下,执行  javah <包路径>.<类名>  ,就会在当前目录下生成对应的natvie类 的头文件,比如上面的HelloJni,执行javah后得到的com_example_zhanghaiqiang_hellojni_HelloJni.h文件内容就会像这样:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_zhanghaiqiang_hellojni_HelloJni */

#ifndef _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#define _Included_com_example_zhanghaiqiang_hellojni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif

/*
 * Class:     com_example_zhanghaiqiang_hellojni_HelloJni
 * Method:    staticLog
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_example_zhanghaiqiang_hellojni_HelloJni_staticLog
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

随后,把这个文件拷到预设的jni目录下,copy一份并改名为.c或者.cpp源文件(当然你也可以直接把这个.h文件改成源文件),然后就可以开始写native的方法实现了。

 

转载于:https://www.cnblogs.com/duanzi6/p/7473122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值