Android JNI之静态注册

听闻少年二字,当与平庸相斥。这篇文章主要讲述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(); }

【Android JNI之静态注册】则其对应的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的方法实现了。
 

    推荐阅读