创建一个 C++ class 并在另一个 C++ Class 中使用 class ,其中包含 ndk android 中的 JNI 方法
Create a C++ class and Use that class In Another C++ Class Which contain JNI methods in ndk android
在 Android 中,我在本机 Android 中连接两个 cpp class 时遇到问题。我已经用单个 class 测试过它工作正常。
但是当我创建了另一个文件并且现在在将它与当前 cpp 文件链接时遇到问题。
MainClass.cpp
#include <jni.h>
#include "native-handler.h"
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_fragment_SampleFragment_setTitle(JNIEnv *env,jobject instance,jobject context) {
ClassNativeHandler classNativeHandler;
return classNativeHandler.getType(env,context);
}
原生-handler.cpp
#include <jni.h>
#include "native-handler.h"
jstring jstringObject;
jstring ClassNativeHandler::getType(JNIEnv *env, jobject contextObject) {
jstring jstringObject = env->NewStringUTF("Hello world");
return jstringObject;
}
void ClassNativeHandler::setType(jstring string) {
myType = string;
jstringObject = string;
}
原生-handler.h
#ifndef SAMPLE_NATIVE_HANDLER_H
#define SAMPLE_NATIVE_HANDLER_H
#include <iostream>
#include <string>
class ClassNativeHandler
{
private:
jstring myType;
public:
void setType(jstring string);
jstring getType(JNIEnv *env, jobject contextObject);
jstring getHeaderName(JNIEnv *env);
};
#endif //SAMPLE_NATIVE_HANDLER_H
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Native
LOCAL_SRC_FILES := ../cpp/mainClass.cpp
LOCAL_C_INCLUDES := ../cpp/native-handler.h
LOCAL_LDLIBS := -lz -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
错误:对 `ClassNativeHandler::getType(_JNIEnv*, _jobject*)' 的未定义引用
在这一行
return classNativeHandler.getType(环境,上下文);
所以我无法构建 .so 文件。请指导我
您还没有编译 native-handler.cpp
。您需要在 LOCAL_SRC_FILES
中指定它以便 NDK 编译它。
LOCAL_SRC_FILES := ../cpp/mainClass.cpp ../cpp/native-handler.cpp
在 Android 中,我在本机 Android 中连接两个 cpp class 时遇到问题。我已经用单个 class 测试过它工作正常。
但是当我创建了另一个文件并且现在在将它与当前 cpp 文件链接时遇到问题。
MainClass.cpp
#include <jni.h>
#include "native-handler.h"
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_fragment_SampleFragment_setTitle(JNIEnv *env,jobject instance,jobject context) {
ClassNativeHandler classNativeHandler;
return classNativeHandler.getType(env,context);
}
原生-handler.cpp
#include <jni.h>
#include "native-handler.h"
jstring jstringObject;
jstring ClassNativeHandler::getType(JNIEnv *env, jobject contextObject) {
jstring jstringObject = env->NewStringUTF("Hello world");
return jstringObject;
}
void ClassNativeHandler::setType(jstring string) {
myType = string;
jstringObject = string;
}
原生-handler.h
#ifndef SAMPLE_NATIVE_HANDLER_H
#define SAMPLE_NATIVE_HANDLER_H
#include <iostream>
#include <string>
class ClassNativeHandler
{
private:
jstring myType;
public:
void setType(jstring string);
jstring getType(JNIEnv *env, jobject contextObject);
jstring getHeaderName(JNIEnv *env);
};
#endif //SAMPLE_NATIVE_HANDLER_H
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Native
LOCAL_SRC_FILES := ../cpp/mainClass.cpp
LOCAL_C_INCLUDES := ../cpp/native-handler.h
LOCAL_LDLIBS := -lz -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
错误:对 `ClassNativeHandler::getType(_JNIEnv*, _jobject*)' 的未定义引用
在这一行 return classNativeHandler.getType(环境,上下文);
所以我无法构建 .so 文件。请指导我
您还没有编译 native-handler.cpp
。您需要在 LOCAL_SRC_FILES
中指定它以便 NDK 编译它。
LOCAL_SRC_FILES := ../cpp/mainClass.cpp ../cpp/native-handler.cpp