ruby
ruby

Reputation: 157

Getting UnsatisfiedLinkError for jni application in android

I have an application in android with ndk to get the signature and conver to md5. I have generate jni folder using the javah command and the .so files also with ndk build command. But in java class not able to get the jni refered method. showing as red color and app is getting crashed with the below error

No implementation found for java.lang.String com.sign.signcapture.MainActivity.getToken() (tried Java_com_sign_signcapture_MainActivity_getToken and Java_com_sign_signcapture_MainActivity_getToken__)
10-21 13:04:18.232: D/AndroidRuntime(9040): Shutting down VM
10-21 13:04:18.232: E/AndroidRuntime(9040): FATAL EXCEPTION: main
10-21 13:04:18.232: E/AndroidRuntime(9040): Process: com.sign.signcapture, PID: 9040
10-21 13:04:18.232: E/AndroidRuntime(9040): java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.sign.signcapture.MainActivity.getToken() (tried Java_com_sign_signcapture_MainActivity_getToken and Java_com_sign_signcapture_MainActivity_getToken__)
10-21 13:04:18.232: E/AndroidRuntime(9040):     at com.sign.signcapture.MainActivity.getToken(Native Method)
10-21 13:04:18.232: E/AndroidRuntime(9040):     at com.sign.signcapture.MainActivity.onCreate(MainActivity.java:17)
10-21 13:04:18.232: E/AndroidRuntime(9040):     at android.app.Activity.performCreate(Activity.java:6575)

code is MainActivity.java:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  //  ((TextView) findViewById(R.id.java_sign)).setText(getPackage());
    ((TextView) findViewById(R.id.jni_sign)).setText(getToken());

}
static {
    System.loadLibrary("check-sign");

}
public native String getToken();
// public native String getPackage();
}

check-sign.c

 jstring Java_com_sign_signcapture_MainActivity__getToken(JNIEnv *env, jobject obj,
                                                                        jobject context) {
    char* signValue = getSignatureMd5(env, obj);
    return (*env)->NewStringUTF(env, signValue);
}

Upvotes: 0

Views: 154

Answers (1)

Michael
Michael

Reputation: 58507

You've got a typo in your C function name:

Java_com_sign_signcapture_MainActivity__getToken

                          Right here --^     Remove the extra _

Upvotes: 1

Related Questions