JNI知识积累

一、如何用命令生成jni头文件:

1:命令行切换到工程目录下

2:javah -classpath bin\classes -jni [类名:com.test.xxx]

3:在jni目录查看该文件

二、jni类型签名规则:

java类型

类型签名

byte

B

char

C

boolean

Z

long

J

float

F

double

D

short

S

int

I

L[类名];

数组

[[元素类型签名]

三、jni中重要的函数和方法:

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {

//TODO GAME C++层初始化

return JNI_VERSION_1_6;

}

这个方法是我们在java层调用:System.loadLibrary("xxxx");函数时会触发。vm:就是我们java层的虚拟机,我们可以通过vm实现c/c++java的交互。

例如我可以通过vm创建一个String

JNIEnv *env;

vm->AttachCurrentThread(&env, NULL);

jclass cls = env->FindClass("java/lang/String"); // 类名

jmethodID struct = env->GetMethodID(cls, "<init>""()V");// 通个默认的构 造方法创建String

jobject stringObject= env->NewObject(cls, struct);

 

 

 

 

四、如何在c/c++中调用java代码:

 

public class Test {

public void jniTest(){

System.out.println("中文才是最屌的……");

}

}

第一步:创建要调用的类

JNIEnv *env;

vm->AttachCurrentThread(&env, NULL);

jclass cls = env->FindClass("com/tencent/Test"); // 类名

第二步:获取方法ID

JmethodID methodID env->GetMethodID(cls,"jniTest","()V");

第三步:执行要调用的方法

env->CallVoidMethod(cls ,methodID);


五、jni中如何快速实现jstringstring的转换:

1、jstringstring

std::string jstring2string(JNIEnv *env,jstring s){

jboolean isCopy;

const char* cs = env->GetStringUTFChars(s, &isCopy);

std::string c_s = cs;

env->ReleaseStringUTFChars(s, cs);

return c_s;

}

2、stringjstring

std::string string2jstring(JNIEnv *env,std::string s){

return env->NewStringUTF(s.c_str());

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值