c++调用java
项目例子
void QNativeUtils::downloadApp(const char * appUrl, const char * version, const char * desc){
JniMethodInfo t;
if(JniHelper::getStaticMethodInfo(t, JAVA_CLASS, "downloadApp", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"))
{
jstring jAppUrl = t.env->NewStringUTF(appUrl);
jstring jVersion= t.env->NewStringUTF(version);
jstring jDesc= t.env->NewStringUTF(desc);
t.env->CallStaticVoidMethod(t.classID, t.methodID, jAppUrl, jVersion, jDesc);
t.env->DeleteLocalRef(jAppUrl);
t.env->DeleteLocalRef(jVersion);
t.env->DeleteLocalRef(jDesc);
t.env->DeleteLocalRef(t.classID);
}
}
int QNativeUtils::getVersionCode(){
JniMethodInfo t;
if(JniHelper::getStaticMethodInfo(t, JAVA_CLASS, "getVersionCode", "()I"))
{
jint ret = t.env->CallStaticIntMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
return ret;
}
return 0;
}
几个点:
1.string类型转换
c++转java
jstring jAppUrl = t.env->NewStringUTF(appUrl);
java转c++
std::string ret = JniHelper::jstring2string(str);
2.需手动释放的类型
引用类型,数组: jstring,jobject ,jobjectArray,jintArray ,jclass ,jmethodID
t.env->DeleteLocalRef(t.classID);
3.不要手动释放
基本类型: jint , jlong , jchar