标签:
本文有2个模块 :
A 构建JNI环境
*写JAVA本地方法
public static native int sum(int a,int b);
*新增jni文件夹 写JNI粘合层 利用javah反编译出.h文件,复制.h至jni文件夹
javah -jni packagename.classname
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_lean_base_Calculate */
#ifndef _Included_org_lean_base_Calculate
#define _Included_org_lean_base_Calculate
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_lean_base_Calculate
* Method: sum
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_org_lean_base_Calculate_sum
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus
}
#endif
#endif*复制.h文件,修改成.c代码
#include <stdint.h>
#include <jni.h>
#include "org_lean_base_Calculate.h"
/* Header for class org_lean_base_Calculate */
/*
* Class: org_lean_base_Calculate
* Method: sum
* Signature: (II)I
*/
jint JNICALL Java_org_lean_base_Calculate_sum
(JNIEnv *env, jclass clazz, jint a, jint b)
{
}*创建C/C++实现的 .h .c文件 并通过JNI粘合层调用.
#include <stdint.h> extern uint64_t sum(unsigned int a,unsigned int b);
jint JNICALL Java_org_lean_base_Calculate_sum
(JNIEnv *env, jclass clazz, jint a, jint b)
{
return sum(a,b);
}LOCAL_MODULE := LeanBase (System.loadLibrary("LeanBase");)
LOCAL_SRC_FILES := org_lean_base_Calculate.c calculate.c (多个c文件由\分开)
B 让JNI粘合层调用JAVA
*写被调用的一个方法,通过id类反射调用
public static void say(){
Log.v("Lean","Calculate was called !");
}jint JNICALL Java_org_lean_base_Calculate_sum
(JNIEnv *env, jclass clazz, jint a, jint b)
{
jmethodID say_id=(*env)->GetStaticMethodID(env,clazz,"say","()V");
(*env)->CallStaticVoidMethod(env,clazz,say_id);
return sum(a,b);
}
标签:
原文地址:http://blog.csdn.net/qq285016127/article/details/45029059