1. 程式人生 > >JNI c呼叫Java 返回值為String

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

Java定義: public String getSignatureInfo() { try { PackageInfo packageInfo = mContext.getPackageManager().getPack

Java Servlet呼叫WebService返回null的問題

這幾天,這處理Jaave Servlet呼叫WebService的時候,碰到返回值為空的問題,但是,新建的Java專案,使用同樣的方法呼叫,缺能夠返回正確的值。 Servlet中的程式碼: package dbconn; import java.io.BufferedInputStream;

######springmvc中方法返回String時@responseBody不能返回json物件。

引用 2 樓 tzdwsy 的回覆: RequestMappingR中加上produces=“application/json”試試 這樣寫只是返回前臺後不報錯,但是資料格式依然不是json的,它只是在返回的資料上打了個引號;“channelId=2” 真正的解決方法應該是這樣的

python呼叫C動態庫匯出函式的返回指標型別時,在64位python環境下被截斷解決方法

          class my_void_p(c_void_p):               pass                      def sslog_create_instance():               #直接指定 restype=c_void_p在64位上還是會發生地址截

C#呼叫C++的Dll(引數和返回char* TCHAR*)

想要在C#和C++之間進行字串傳遞會涉及到兩件事情: 1.C#的string和C++的字串首指標要怎麼對應.   2.字串分為ANSI和UNICODE. C++ 標頭檔案介面: //FilePolice.h //引數和返回值為Ansi extern "C" __dec

c#中 命令copy 已退出,返回1

col .cn 文件 返回 copy nbsp spa round img 後期生成時間命令行,可以指定生成目錄,是否刪除.pdb文件 c#中 命令copy 已退出,返回值為1

JNIc/c++呼叫java建構函式

有時候c/c++是面向過程編碼,很多有用工具類都沒有,要編碼人員自己實現,如果可以呼叫java大量存在的類豈不是更省事更簡潔。 下面是通過呼叫java的Date類產生是時間戳。 public class JniConsTest { //c訪問java建構函式,並返回物件

JNI-通過C++呼叫JAVA

1、背景     在Report_Center_Task_Proc上報訊息執行緒中,我們在訊息佇列裡面獲取到資料後,把資料簡單解析後通過java介面g_jniEnv->CallVoidMethod上報資料,那什麼在c++程式碼中怎麼呼叫java函式方法的呢? &nb

C++函式指標、指標函式、返回函式指標的函式淺談

C++函式指標、指標函式、返回值為函式指標的函式淺談 引言 函式指標、指標函式是C中重要而容易混淆的概念,博主將通過兩個例項來說明這兩個截然不同的概念。 而返回值為函式指標的指標函式就更難理解了,放在文章的最後來介紹。 函式指標 函式指標是一種特殊的 指標,它指向函式的入口。

android jni開發中c++ 呼叫java 方法

    最近幾天搞fbreader 電子書的二次開發,其中需要 c++ 呼叫 java方法解密電子書,所以l老虎吃天,硬著頭皮看c++程式碼。  具體的思路如下,其實也就這幾步:      1. jni 中用到 java反射的方法

呼叫介面獲取token時,返回{"desc":"CurTime is illegal","code":414}

原因:伺服器時間跟網路時間不同步!!! 即時通訊,第三方為網易雲介面:https://api.netease.im/nimserver/uer/create.action 呼叫介面獲取token時,返回值為{"desc":"CurTime is illegal",

java.util.LinkedHashMap cannot be cast to com.*** resetTemplate的GET請求返回帶泛型的型別

原因:             resetTemplate的GET請求返回值為帶泛型的型別不可以直接使用,因為他內部封裝成了一個LinkedHashMap,所以我們直接用的時候就會報錯 解決:  

C++中的RVO優化,針對返回物件時臨時物件的優化

摘要: RVO (return value optimization) 和NRVO (named return value optimization) 是C++在處理一個函式返回類物件並將返回值賦給另一個物件時,為了減少拷貝構造次數以及析構次數而採用的一種編譯器優化技術。 當函式的返回值

Android JNI-c/c++呼叫java方法

在使用ndk開發的時候,java呼叫c/c++方法是必須要的。但是很多時候,c/c++有callback需要反饋給java的時候(比如IM通訊登入成功資訊和一些異常資訊),就需要c/c++呼叫java方法了。 在看這篇文章之前,必須對JNI有一些基礎的瞭解,比

Android JNI 通過C/C++呼叫JAVA方法

#include "video1_TestNative.h"   #include <iostream>  using namespace std;   JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, job

Linux下C++呼叫Java簡單例項(jni

假設工作目錄為/home1. Java端1)  mkdir leixf && cd leixf2) 建立SubClass.java檔案,內容如下:package leixf;public class SubClass {private String name

JNI進階一 (C++呼叫java屬性和方法,javap的使用)

一、C/C++函式分析://獲取jclass物件,引數:this的意思,就是native方法所在的類1.GetObjectClass(jobject) //獲取普通屬性id,第一個引數:類物件, 第二個引數:屬性名,第三個引數:屬性簽名(不知道的同學點選這裡)2.GetFie

Android Studio3.0開發JNI流程------Java呼叫C++以及C++呼叫Java

上一章講解了JNI中一些函式表的說明,這節開始講解Java與C++互調的過程。 在Android Studio3.0中建立一個支援JNI開發的Android程式。 編寫activity_main.xml佈局: <?xml version="1.0

QSqlTableModel呼叫rowCount函式返回0 解決辦法

先貼程式碼: //公告模組 void SysKaoqi::showElse() {msgText->show();model->setTable("message");QModelIndex index;int numRows = model->rowCo

【軟體開發底層知識修煉】二十五 ABI之函式呼叫約定二之函式返回結構體時的約定

上一篇文章學習了幾種函式呼叫約定的區別,點選連結檢視上一篇文章:【軟體開發底層知識修煉】二十四 ABI之函式呼叫約定 本篇文章繼續學習函式呼叫約定中,關於函式返回值的問題。當函式返回值為結構體時,函式返回值是如何來傳給呼叫者的。