jni基本操作 1. java 层创建 native 方法,并生成对应 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 数据类型的参数列表。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值