0

I'm trying to get packageInfo and hence the Signature of the app from Cpp code. Im facing JNI Error and Fatal Signal 6.

My code is:

    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 1");
    jclass android_content_Context =env->GetObjectClass(activity); 
    jmethodID midGetPackageName = env->GetMethodID(android_content_Context, "getPackageName", "()Ljava/lang/String;"); 
    jstring packageName = (jstring)env->CallObjectMethod(activity, midGetPackageName);
    jboolean copy = false;
    const char *nativeString = env->GetStringUTFChars(packageName, &copy);
    __android_log_write(ANDROID_LOG_ERROR, "Tag", nativeString);

    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 2");
    jmethodID midGetPackageManager = env->GetMethodID(android_content_Context, "getPackageManager", "()Landroid/content/pm/PackageManager;"); 
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 3");
    jobject packageManager = env->CallObjectMethod(activity, midGetPackageManager);
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 4");
    jclass android_content_pm_packageManager = env->GetObjectClass(packageManager); 
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 5");
    jmethodID midGetPackageInfo = env->GetMethodID(android_content_pm_packageManager, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 6");
    packageManager = env->CallObjectMethod(activity, midGetPackageManager);
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 6a");   
    jobject packageInfo = env->CallObjectMethod(packageManager, midGetPackageInfo);
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 7");
    jclass android_content_pm_packageInfo = env->GetObjectClass(packageInfo);
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 8");
    jfieldID midSignatureField = env->GetFieldID(android_content_pm_packageInfo, "signatures", "[Landroid/content/pm/Signature");
    __android_log_write(ANDROID_LOG_ERROR, "Tag", "Step 9");

Im getting following error:

05-07 17:01:05.827: E/Tag(2357): Step 1
05-07 17:01:05.827: E/Tag(2357): in.verificationapp
05-07 17:01:05.827: E/Tag(2357): Step 2
05-07 17:01:05.827: E/Tag(2357): Step 3
05-07 17:01:05.827: E/Tag(2357): Step 4
05-07 17:01:05.827: E/Tag(2357): Step 5
05-07 17:01:05.827: E/Tag(2357): Step 6
05-07 17:01:05.827: E/Tag(2357): Step 6a
05-07 17:01:05.827: E/dalvikvm(2357): JNI ERROR (app bug): accessed stale local reference 0x4002d0b1 (index 46124 in a table of size 13)
05-07 17:01:05.827: E/dalvikvm(2357): VM aborting
05-07 17:01:05.827: A/libc(2357): Fatal signal 6 (SIGABRT) at 0x00000935 (code=-6), thread 2357 (ertverification)

Any idea wht is going twong?

Karthik
  • 108
  • 1
  • 6

2 Answers2

0

You need to rearrange/recreate all your Objects in your code before using them:

Example:

if(__obj_xyz == null)
{
//Re-initialize that variable before (re)using it.
}

Reference Link: JNI ERROR (app bug): accessed stale local reference 0xbc00021 (index 8 in a table of size 8)

I hope this helps.

Community
  • 1
  • 1
Salman Khakwani
  • 6,684
  • 7
  • 33
  • 58
0

Figured out the issue.

In line,

    jobject packageInfo = env->CallObjectMethod(packageManager, midGetPackageInfo);

I missed last optional parameter based on the signature

    jobject packageInfo = env->CallObjectMethod(packageManager, midGetPackageInfo, packageName);
Karthik
  • 108
  • 1
  • 6