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;
}
}
//------------------------------------------------------------------------------
假如这里的getSignatureInfo()方法是静态的方法。
(1)获取方法签名应该用方法:GetStaticMethodID();
(2)调用的静态方法的地方则是:CallStaticObjectMethod();