Android JNI之静态注册
Posted 行走的段子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的方法实现了。
以上是关于Android JNI之静态注册的主要内容,如果未能解决你的问题,请参考以下文章