Android 动态加载Jni方法

来源:互联网 发布:java log4j xml配置 编辑:程序博客网 时间:2024/05/19 00:13

   用Androidstudio新建一个项目,在main目录下创建jni目录,创建一个Test.cpp c++文件。


·

extern "C" {jstring nativeGetHelloString(JNIEnv *env, jobject obj) {    return env->NewStringUTF((char *) " This is calling from JNI suckers!");}static JNINativeMethod gMethods[]={        {"nativeGetHelloString", "()Ljava/lang/String;", (void *)nativeGetHelloString},};static const char* className="com/android/cgcxy/jnidynamicload/TestJni02";static int registerNativeMethods (JNIEnv *env){    jclass clazz;    clazz = env->FindClass(className);    if (clazz == NULL) {       // LOGD("failed to load the class %s", className);        return JNI_FALSE;    }    if(env->RegisterNatives(clazz, gMethods, sizeof(gMethods)/sizeof(gMethods[0])) < 0){        return JNI_FALSE;    }    return JNI_TRUE;}jint JNI_OnLoad(JavaVM* vm, void* reserved) {    JNIEnv* env = NULL;    jint result = -1;    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)    {       // LOGE("ERROR: GetEnv failed\n");        goto bail;    }    if (registerNativeMethods(env) < 0) {       // LOGE("ERROR: jnitest native registration failed\n");        goto bail;    }    result = JNI_VERSION_1_4;    bail:    return result;}}


编写.mk文件生成.so


LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := demoLOCAL_SRC_FILES := Test.cppinclude $(BUILD_SHARED_LIBRARY)


原创粉丝点击