#include #include #include #include #include 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_qihealonelibrary_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"); } }