版权声明:本文为匆忙拥挤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 数据类型的参数列表。