Дополнительная причина этой ошибки: ваше недокорированное имя собственного метода не должно содержать подчеркивания!
Например, я хотел экспортировать функцию C с именем AudioCapture_Ping()
. Вот моя экспортная декларация в C:
JNI_EXPORT int Java_com_obsidian_mobilehashhost_MainActivity_AudioCapture_Ping(JNIEnv *pJniEnv, jobject object); //Notice the underscore before Ping
Вот мой класс Java, импортирующий функцию:
package com.obsidian.mobileaudiohashhost;
...
public class MainActivity extends Activity {
private native int AudioCapture_Ping(); // FAILS
...
Я не мог заставить Android динамически связываться с моим собственным методом, пока не удалил подчеркивание:
JNI_EXPORT int Java_com_obsidian_mobilehashhost_MainActivity_AudioCapturePing(JNIEnv *pJniEnv, jobject object);
package com.obsidian.mobileaudiohashhost;
...
public class MainActivity extends Activity {
private native int AudioCapturePing(); // THIS WORKS!
...