Android java层通过jni调用native层的使用

java层代码

package com.example.test;
package android.util.Log;
public class Test {
// 加载jni
static {
	try {
		System.loadLibrary(“healthmonitor_jni”);
	} catch (SecurityException ex) {
		Log.e(TAG, “System.loadLibrary SecurityException “ + ex);
	} catch (NullPointerException ex) {
		Log.e(TAG, “System.loadLibrary NullPointerException “ + ex);
	} catch (UnsatisfiedLinkError ex) {
		Log.e(TAG, “System.loadLibrary UnsatisfiedLinkError “ + ex);
	}
}

public Test () {
    Log.d(TAG, "Test construct");
    // 调用jni接口
    native_test();
}

// 声明jni接口
private native void native_test();
}

jni代码

#include <jni.j>
#include <stdio.h>
#include <nativehelper/JNIHelp.h>
#include <Utils/Log.h>

#define JAVA_CLASSNAME_TEST "com.example.test.Test"

using namespace std;
using namespace android;

static void com_example_test(JNIEnv *env, jobject thiz) {
	ALOGD("to call native method");
}

static JNINativeMethod sMethods[] = {
{“native_test”,()V”, (void )com_example_test}
};

// This function only registers the native methods
static int register_HealthMonitor_jni(JNIEnv *env) {
	return jniRegisterNativeMethods(env, JAVA_CLASSNAME_HEALTHMONITOR, 
	sMethods, NELEM(sMethods));
}

// 可以不重写该函数,会使用默认
jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) {
	JNIEnv env = NULL;
	jint result = -1;

	if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
	    goto bail;
	}
	assert(env != NULL);

	if (register_HealthMonitor_jni(env) < 0) {
	    goto bail;
	}

	/* success -- return valid version number */
	result = JNI_VERSION_1_4;
	
	bail:
	return result;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值