Я хочу использовать динамическую регистрацию в нативном методе, поэтому мне нужно установить функцию JNI_onLoad
. Я просто пишу функцию, чтобы получить сумму двух чисел. Но он не может правильно построить. Как исправить ошибку?Android JNI ndk-build error: 'jni' не объявлен
Это мой файл * .cpp, я называю этот файл
jni.cpp
#include <jni.h> extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); jni::jclass& nativeClass = jni::FindClass(env, "com/test/NativeClass"); #define MAKE_NATIVE_METHOD(name, sig) jni::MakeNativeMethod<decltype(name), name>(#name, sig) jni::RegisterNatives(env, nativeClass, MAKE_NATIVE_METHOD(nativeAddTest, "(II)I") ); return JNI_VERSION_1_6; } jlong nativeAddTest(JNIEnv *env, jni::jobject* obj, jni::jint a, jni::jint b) { return a+b; }
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := jni.cpp LOCAL_LDLIBS := -L/ndk-path/sources/cxx-stl/stlport/libs/armeabi include $(BUILD_SHARED_LIBRARY)
Когда я использую
ndk-build
команду, это неправильно. Но я действительно dont't konw причина ...D:\WorkSpaces\Test\app\src\main\jni>ndk-build [x86] Compile++ : test <= jni.cpp D:/WorkSpaces/Test/app/src/main/jni/jni.cpp: In function 'jint JNI_OnLoad(JavaVM*, void*)': D:/WorkSpaces/Test/app/src/main/jni/jni.cpp:9:5: error: 'jni' has not been declared jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); ^ D:/WorkSpaces/Test/app/src/main/jni/jni.cpp:9:18: error: 'env' was not declared in this scope jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6); ....
Это, похоже, не может найти jni.h, но у меня уже есть #include<jni.h>
Это файл 'jni.h' файла? Я добавляю эту строку, но у нее также есть ошибка сборки. LOCAL_C_INCLUDES: = D: \ Android \ android-ndk-r10e \ platform \ android-21 \ arch-arm \ usr \ include' – kevin4z
Попробуйте это: http: // stackoverflow .com/questions/13466777/jni-h-no-such-file-or-directory – Striker