char* RELEASE_SIGN = "your release sign";
JNIEXPORT jboolean JNICALL Java_edu_scnu_jsj_androidsecurity_jnis_JUtil_verifySign
(JNIEnv *env, jobject, jobject contextObject, jint signHashCode) {
jclass native_class = env->GetObjectClass(contextObject);
jmethodID pm_id = env->GetMethodID(native_class, "getPackageManager",
"()Landroid/content/pm/PackageManager;");
jobject pm_obj = env->CallObjectMethod(contextObject, pm_id);
jclass pm_clazz = env->GetObjectClass(pm_obj);
// getPackageInfo ID
jmethodID package_info_id = env->GetMethodID(pm_clazz, "getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
jclass native_classs = env->GetObjectClass(contextObject);
jmethodID mId = env->GetMethodID(native_classs, "getPackageName", "()Ljava/lang/String;");
jstring pkg_str = static_cast<jstring>(env->CallObjectMethod(contextObject, mId));
// package info
jobject pi_obj = env->CallObjectMethod(pm_obj, package_info_id, pkg_str, 64);
// PackageInfo calss
jclass pi_clazz = env->GetObjectClass(pi_obj);
// signature ID
jfieldID signatures_fieldId = env->GetFieldID(pi_clazz, "signatures",
"[Landroid/content/pm/Signature;");
jobject signatures_obj = env->GetObjectField(pi_obj, signatures_fieldId);
jobjectArray signaturesArray = (jobjectArray) signatures_obj;
//jsize size = env->GetArrayLength(signaturesArray);
jobject signature_obj = env->GetObjectArrayElement(signaturesArray, 0);
jclass signature_clazz = env->GetObjectClass(signature_obj);
//check out hashCode
jmethodID string_id = env->GetMethodID(signature_clazz, "toCharsString",
"()Ljava/lang/String;");
jstring str = static_cast<jstring>(env->CallObjectMethod(signature_obj, string_id));
char *c_msg = (char *) env->GetStringUTFChars(str, 0);
if (strcmp(c_msg, RELEASE_SIGN) == 0)//
{
return JNI_TRUE;
}else {
return JNI_FALSE;
}
}