2015-11-18 29 views
0

我想應用程序簽名在本地使用這些代碼:(source獲取JNI應用程序簽名中的散列碼

// For class Context 
    jclass native_clazz = (*env)->GetObjectClass(env, context); 

    // Get the getPackageManager method ID 
    jmethodID methodID_func = (*env)->GetMethodID(env, native_clazz, 
      "getPackageManager", "()Landroid/content/pm/PackageManager;"); 

    // Access manager application package 
    jobject package_manager = (*env)->CallObjectMethod(env, thiz, methodID_func); 

    // For class PackageManager 
    jclass pm_clazz = (*env)->GetObjectClass(env, package_manager); 

    // Get the getPackageInfo method ID 
    jmethodID methodID_pm = (*env)->GetMethodID(env, pm_clazz, 
      "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"); 

    // To obtain the application package information 
    jobject package_info = (*env)->CallObjectMethod(env, package_manager, 
      methodID_pm, (*env)->NewStringUTF(env, "com.example.hellojni"), 64); 

,但我得到這個:

error: 'context' undeclared (first use in this function) 

如何獲得上下文本土? 我如何返回簽名hashcode作爲字符串?

+0

_ 「我如何在本地獲取上下文?」_您需要將Java代碼傳遞給您的C代碼(即「Activity」或「Application」實例)。 – Michael

回答

0

可以上下文發送到JNI的參數例如

jstring Java_packagename_stringFromJNI(JNIEnv* env, jobject thiz , jobject context) 

當你調用這個方法在你的活動:

public native String stringFromJNI(Context context); 

...

Log.d(TAG, "Receive: " + stringFromJNI(this));