#include <string.h>#include <android/log.h>#include <assert.h>#include <stdlib.h>#include "com_example_myapp_JniTest.h" #define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,"com.example.myapp", __VA_ARGS__)const jint apksign = -344438290;JNIEXPORT jstring JNICALL Java_com_example_myapp_JniTest_getKey(JNIEnv *env, jclass j){   return (*env)->NewStringUTF(env, "Hello from JNI !");}jint getSignHashCode(JNIEnv *env) {    //get application context.  jclass activityThread = (*env)->FindClass(env,"android/app/ActivityThread");    jmethodID currentActivityThread = (*env)->GetStaticMethodID(env,activityThread, "currentActivityThread","()Landroid/app/ActivityThread;");    jobject at = (*env)->CallStaticObjectMethod(env,activityThread, currentActivityThread);    jmethodID getApplication = (*env)->GetMethodID(env,activityThread, "getApplication", "()Landroid/app/Application;");    jobject context = (*env)->CallObjectMethod(env,at, getApplication);// // //get Context class  jclass context_clazz = (*env)->GetObjectClass(env,context);// // //getPackageManager method ID  jmethodID methodID_getPackageManager = (*env)->GetMethodID(env,context_clazz, "getPackageManager",                                                            "()Landroid/content/pm/PackageManager;");// //get PackageManager object  jobject packageManager = (*env)->CallObjectMethod(env,context,                                                   methodID_getPackageManager);// //get PackageManager class  jclass pm_clazz = (*env)->GetObjectClass(env,packageManager);// // //getPackageInfo method ID  jmethodID methodID_pm = (*env)->GetMethodID(env,pm_clazz, "getPackageInfo",                                             "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");// //getPackageName method ID.  jmethodID methodID_pack = (*env)->GetMethodID(env,context_clazz, "getPackageName",                                               "()Ljava/lang/String;");// // //get package name.  jstring application_package = (jstring) (*env)->CallObjectMethod(env,context, methodID_pack);    const char *str = (*env)->GetStringUTFChars(env,application_package, 0);// // //get PackageInfo object.  jobject packageInfo = (*env)->CallObjectMethod(env,packageManager,                                                methodID_pm, application_package, 64);// //get PackageInfo class.  jclass packageinfo_clazz = (*env)->GetObjectClass(env,packageInfo);    jfieldID fieldID_signatures = (*env)->GetFieldID(env,packageinfo_clazz, "signatures",                                                  "[Landroid/content/pm/Signature;");// //get signatures array.  jobjectArray signature_arr = (jobjectArray) (*env)->GetObjectField(env,packageInfo,                                                                    fieldID_signatures);// //get Signature element 0.  jobject signature = (*env)->GetObjectArrayElement(env,signature_arr, 0);// // //get signature hashcode  jclass signature_clazz = (*env)->GetObjectClass(env,signature);    jmethodID methodID_hashcode = (*env)->GetMethodID(env,signature_clazz, "hashCode", "()I");    jint hashCode = (*env)->CallIntMethod(env,signature, methodID_hashcode);// // //compare hashcode.  if (hashCode != apksign) {        LOGI(" %d != %d\n", hashCode, apksign);        exit(0);    }    else  {        LOGI(" %d == %d\n", hashCode, apksign);    }    return hashCode;}JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {    JNIEnv *env = NULL;        if ((*vm)->GetEnv(vm,(void **) &env, JNI_VERSION_1_6) != JNI_OK) {// if (vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) {  LOGI("load library error 1");                return JNI_ERR;            }        assert(env != NULL);        getSignHashCode(env);    LOGI(" %d != %d\n", 1000, 100);    return JNI_VERSION_1_6;}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android ScrollView的使用
  2. Android(安卓)Intent Action 大全(转)
  3. FIDO框架分析3(FIDO UAF Android客户端)
  4. h5页面点击按钮,触发手机自带的发短信
  5. Android如何获取视频预览图(或首帧)和获取
  6. Android AppCompatActivity的ActionBar之
  7. 【Android-tips】 Unable to execute dex
  8. android10.0连接wifi后提示“已连接,但无
  9. 添加并客制化Statusbar中图标显示顺序
  10. android编译时出现'Unable to resolve ta