C ++クラスを作成し、そのクラスを使用する別のC ++クラスndkのJNIメソッドを含むクラスandroid

Amjad Khan 07/27/2017. 1 answers, 51 views
android android c++ android-ndk android-ndk native

Androidでは、ネイティブAndroidの2つのcppクラスを接続する際の問題に直面しています。 私はそれがうまく動作する単一のクラスでテストしました。

しかし、私は別のファイルを作成し、現在のcppファイルとリンクする際に問題に直面しています。

MainClass.cpp

#include #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);
} 

native-handler.cpp

#include #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;
} 

native-handler.h

#ifndef SAMPLE_NATIVE_HANDLER_H
#define SAMPLE_NATIVE_HANDLER_H

#include #include 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 *) 'への未定義の参照

この行では、classNativeHandler.getType(env、context);を返します。

だから私は.soファイルを作ることができません。 私を案内してください

1 Comments
Joe C 07/27/2017
この質問はJavaと何が関係していますか?

1 Answers


taskinoor 07/27/2017.

あなたはnative-handler.cppコンパイルしていません。 NDKがコンパイルするようにLOCAL_SRC_FILESに指定する必要があります。

LOCAL_SRC_FILES := ../cpp/mainClass.cpp ../cpp/native-handler.cpp

3 comments
Amjad Khan 07/27/2017
今すぐファイルをコンパイルすることができますが、{JNIがアプリケーションで検出したエラー:削除されたローカル参照0x7f5bc55a3dの使用}のようにアプリケーションを実行するとエラーが発生します。
taskinoor 07/27/2017
ClassNativeHandler::getType内部では、ローカルjstring jstringObjectを定義して、無効なローカル参照エラーを引き起こす可能性のあるグローバルjstringObjectを効果的にシャドウします。
Amjad Khan 07/27/2017
nullになった場所に再度ポインティングするときにメモリに格納されないため、 ClassNativeHandler::getTypeエラーが発生するlocatic変数jstring jstringObjectを使用しているjstring jstringObject

Related questions

Hot questions

Language

Popular Tags