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

文章目录

  • 系列文章
  • 创建 java native 方法
  • 通过 javah 生成的对应 jni 函数
    • 成员方法对应的:
    • 静态方法对应的:
    • 总结


系列文章

jni基本操作 1. java 层创建 native 方法,并生成对应 jni 函数
jni基本操作 2. 操作java中的属性
jni基本操作 3. 操作java中的方法
jni基本操作 4. 加载与卸载函数,动态注册与反注册本地方法
jni基本操作 5.多线程临界区(类似 java 的同步代码块)处理


创建 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。
javah 操作的是.class 文件,所以在AndroidStudio中,添加了 native mehtod()后,需要 build 下工程,使编译生成相应的 .class文件

成员方法对应的:

//非静态方法 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 数据类型的参数列表。


你可能感兴趣的:(Android,JNI/NDK,JNI&Android,NDK)