JNI c调用Java 返回值为String
Posted 祥云湾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JNI c调用Java 返回值为String相关的知识,希望对你有一定的参考价值。
Java定义:
public String getSignatureInfo()
try
PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), PackageManager.GET_SIGNATURES);
android.content.pm.Signature[] signs = packageInfo.signatures;
android.content.pm.Signature sign = signs[0];
byte[] signature = sign.toByteArray();
X509Certificate cert = parseSignature(signature);
return getMessageDigest("SHA1", signature);
catch (Exception e)
e.printStackTrace();
return null;
c代码:
JNIEXPORT jint JNICALL Java_com_letv_jr_safesignaturelibrary_JrSignature_getCLangString(JNIEnv *env, jobject obj)
//得到类
jclass clazz=(*env)->GetObjectClass(env,obj);
if(clazz==0)
return;
//缓存类
targetClass=(jclass)(*env)->NewGlobalRef(env,clazz);
if(targetClass==0)
return;
//缓存对象
targetObject=(jobject)(*env)->NewGlobalRef(env,obj);
if(targetObject==0)
return;
//缓存方法
targetMethodID=(*env)->GetMethodID(env,clazz,"getSignatureInfo","()Ljava/lang/String;");
if(targetMethodID==0)
return;
//拿到Java返回值
jstring pring=(jstring)(*env)->CallObjectMethod(env,obj,targetMethodID);
//转换成char型
char *print=(char *)(*env)->GetStringUTFChars(env,pring,0);
if (strcmp(secret, print) == 0)
return 0;
else
return 1;
以上是关于JNI c调用Java 返回值为String的主要内容,如果未能解决你的问题,请参考以下文章
JNI内通过参数形式从C/C++中传递string类型数据至Java层
#yyds干货盘点#Android C++系列:JNI调用 Java 类的构造方法和父类的方法