#include <jni.h>
|
#include <string>
|
#include <android/log.h>
|
#include <string.h>
|
#include <jni.h>
|
|
static jclass contextClass;
|
static jclass signatureClass;
|
static jclass packageNameClass;
|
static jclass packageInfoClass;
|
|
const char* RELEASE_SIGN = "308202b8308201a0020101300d06092a864886f70d01010b05003022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a5301e170d3233313132303035333131325a170d3438313131333035333131325a3022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a530820122300d06092a864886f70d01010105000382010f003082010a0282010100a0924f3d618e4a622def691e16e54ce5bdfd035bd73e7cb947d2bf3bd0c00afa26e52963e0299fc06d76d153be696c5285d630577e1dcb2b740a72b6d904482217de308fb91c8435441ed05e844ced1e5c3446d82cb8f38751049df26a42adcfc33f1f12c2ce03f676e5d148aad800ace89670b87835e2c02a8570a0b6740d9c0669d4cb3c597d0b2dd49fc0904e885773b6d3a87d9f1e73eb526e0d1a9e9e3c48d986938286cd824151b5a6214faf89d3e699524511b23c86d3b110a7f0bb56a6d2436f69816538a62a38cb1fee6eb685d267cc200df8af51b936bd280beaa2023f75678d77a11ac6de734b30af63d394c8b63bccf2115a47ea15c9212c740d0203010001300d06092a864886f70d01010b05000382010100307cafa9b14be91ba6424cfcc6aed75b069a1c4d6eb646eab0de93f372f236f5f0a6097499df99391075d6ced18d419a2b15adb041890e2b56a3bfbd6be40efee99c5c713ba8ea1d45da09b67916106116e96eb735271c4d53e0739f753145cbc42e149ad3d9507d422ec1c6f1a7f792a4542f9a64f0de3d4f4af69f0fb3390ef3577dcf8844cf744426d173b0934d879148062c5ca64022dc99af370dbfeaf2b5d4a279b20c54a361bca12c25bf185c2885519bbbc36e46ddb083080f0cc5b1f2eafe964ebce5071b0ae7d92a34a9193861b996d2c0299b1993f41063a27038199365a6e3cb27a02ffa9facdc48a63713eb5fbf90e9fd73056aba16b28e5fee";
|
const char *AUTH_KEY = "8b989c546f9ae3eb48ae977b4d4f11c99ae43217436200a0f6d0c4517150e0e6";
|
|
//extern "C" JNIEXPORT jstring
|
//
|
//JNICALL
|
//Java_com_yglx_testjni_MainActivity_getKey(
|
// JNIEnv *env,
|
// jobject /* this */) {
|
// return env->NewStringUTF(AUTH_KEY);
|
//}
|
|
JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM* vm,void* reserved){
|
|
JNIEnv* env = NULL;
|
jint result=-1;
|
if(vm->GetEnv((void**)&env, JNI_VERSION_1_4) != JNI_OK)
|
return result;
|
|
contextClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/Context"));
|
signatureClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/Signature"));
|
packageNameClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/PackageManager"));
|
packageInfoClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/PackageInfo"));
|
|
__android_log_print(ANDROID_LOG_DEBUG, "jw", "sss");
|
return JNI_VERSION_1_4;
|
}
|
|
|
|
extern "C"
|
JNIEXPORT jstring
|
Java_com_dayu_rechargeqh_tools_BaseNFCHelper_getSafeKey(JNIEnv *env, jobject instance,jobject contextObject) {
|
jmethodID getPackageManagerId = (env)->GetMethodID(contextClass, "getPackageManager","()Landroid/content/pm/PackageManager;");
|
jmethodID getPackageNameId = (env)->GetMethodID(contextClass, "getPackageName","()Ljava/lang/String;");
|
jmethodID signToStringId = (env)->GetMethodID(signatureClass, "toCharsString","()Ljava/lang/String;");
|
jmethodID getPackageInfoId = (env)->GetMethodID(packageNameClass, "getPackageInfo","(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
|
jobject packageManagerObject = (env)->CallObjectMethod(contextObject, getPackageManagerId);
|
jstring packNameString = (jstring)(env)->CallObjectMethod(contextObject, getPackageNameId);
|
jobject packageInfoObject = (env)->CallObjectMethod(packageManagerObject, getPackageInfoId,packNameString, 64);
|
jfieldID signaturefieldID =(env)->GetFieldID(packageInfoClass,"signatures", "[Landroid/content/pm/Signature;");
|
jobjectArray signatureArray = (jobjectArray)(env)->GetObjectField(packageInfoObject, signaturefieldID);
|
jobject signatureObject = (env)->GetObjectArrayElement(signatureArray,0);
|
|
const char* signStrng = (env)->GetStringUTFChars((jstring)(env)->CallObjectMethod(signatureObject, signToStringId),0);
|
__android_log_print(ANDROID_LOG_DEBUG, "jw_sign","%s",signStrng);
|
__android_log_print(ANDROID_LOG_DEBUG, "jw_sign2","%s",signStrng+1023);
|
|
__android_log_print(ANDROID_LOG_DEBUG,"jw_rels","%s",RELEASE_SIGN);
|
__android_log_print(ANDROID_LOG_DEBUG,"jw_","sdf:%zd,sfs:%zd",strlen(signStrng),strlen(RELEASE_SIGN));
|
|
if(strcmp(signStrng,RELEASE_SIGN)==0)//签名一致 返回合法的 api key,否则返回错误
|
{
|
return (env)->NewStringUTF(AUTH_KEY);
|
}else
|
{
|
return (env)->NewStringUTF("error");
|
}
|
}
|