2015-01-30 2 views
-2

В моем C++ стороны у меня есть:Простого вызова JNI не работает

extern "C" { 
     JNIEXPORT void JNICALL test(JNIEnv*, jobject){} 
} 

Моего Acivity имеет заявленный способ:

public native void test(); 

Однако, когда я называю тест я получаю нативный метод ошибки не найдено. В чем проблема ?

+3

Полное имя класса вашей деятельности должно быть частью этого экспорта. Охота на '' [java] [jni] [android] родной метод не найден "' будет предлагать * богатство информации. Возможный дубликат http://stackoverflow.com/questions/21100542/native-method-not-found. – WhozCraig

ответ

1

JNI не ищет функции test. Имя, которое он ищет, имеет форму Java_packagename_classname_functionname. Например, если ваш класс

package your.package; 

public class Activity { 
    static { 
    System.loadLibrary("your_library"); 
    } 

    public native void test(); 
} 

Тогда ваша библиотека должна содержать функцию

extern "C" JNIEXPORT void JNICALL Java_your_package_Activity_test(JNIEnv *, jobject) { } 

... при условии, что test не перегружена. Если test перегружен, используйте программу javah для создания заголовка для вас, потому что вы не хотите делать это вручную.

javah your.package.Activity 

создаст файл your_package_Activity.h, содержащий функциональные подписи вам нужно. Обратите внимание, что для этого требуется класс Activity, то есть должен быть файл your/package/Activity.class в пути к классу.

+0

Точно, это была проблема – hahaha1256

Смежные вопросы