jni基本操作 1. java 层创建 native 方法,并生成对应 jni 函数

版权声明:本文为匆忙拥挤repeat(stone)原创文章,转载请注明出处 —— http://blog.csdn.net/jjwwmlp456 https://blog.csdn.net/jjwwmlp456/article/details/89290538


创建 java native 方法

即声明 带有 native 关键字的方法

package com.stone.ndk.jni;
public class JniActivity {
	public native String helloWorld();
	private native static String helloWorld2(String content);
}

方法的访问修饰符,任何都是可以的,可以在 native 代码中被使用的。

方法可以是 成员或静态的。


通过 javah 生成的对应 jni 函数

javah 是个 jdk 中的命令,操作 java 字节码文件,生成含有 native 函数的头文件。

Android Studio 和 Intellj Idea 可以使用 External Tool 添加 javah。

成员方法对应的:

//非静态方法 jobject ,方法所在类的实例对象
JNIEXPORT jstring JNICALL Java_com_stone_ndk_jni_JniActivity_helloWorld
        (JNIEnv *env, jobject obj) {
    return (*env)->NewStringUTF(env,"stone->use c");
}

静态方法对应的:

//静态方法 jclass, 方法所在类的类对象
JNIEXPORT jstring JNICALL Java_com_stone_ndk_jni_JniActivity_helloWorld2
        (JNIEnv *env, jclass clz, jstring content) {
    return env->NewStringUTF(env,"stone->use cpp");
}

总结

发现都具有 JNIEXPORT 返回类型 JNICALL Java_包名_类名_方法名(JNIEnv *env, 原有参数列表...)

成员方法第二个参数类型是 jobject ,表示方法所在对象;

静态方法第二个参数类型是 jclass,表示方法所在的类对象。

若 java 方法中有参数,则在 jni 函数中第三个参数起,生成相应 jni 数据类型的参数列表。


猜你喜欢

转载自blog.csdn.net/jjwwmlp456/article/details/89290538