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 类的构造方法和父类的方法

JNI调用C语言

Android JNI之调用JAVA方法的返回值签名

JNI AttachNativeThread在Linux上始终失败,返回值为-1

java jni 调用 c 代码, c 中 unsigned char* 数据 如何传给java?