2017-07-27 18 views
0

Androidでは、ネイティブAndroidで2つのcppクラスを接続する際の問題に直面しています。私はそれがうまく動作する単一のクラスでテストしました。C++クラスを作成し、そのクラスを使用する他のC++クラスでndkのJNIメソッドを含むクラスandroid

しかし、私は別のファイルを作成し、現在の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 *)」この行 戻りclassNativeHandler.getType上

(ENV、コンテキスト) `への未定義参照。

したがって、.soファイルをビルドできません。私を案内してください

+0

この質問はJavaと何が関係していますか? –

答えて

1

native-handler.cppをコンパイルしていません。 LOCAL_SRC_FILESに指定する必要がありますので、NDKがコンパイルするようにしてください。

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

+0

ファイルをコンパイルできるようになりましたが、{JNI DETECTED ERROR in APPLICATION:削除されたローカル参照0x7f5bc55a3dの使用}のようなアプリケーションを実行するとエラーが発生します。 –

+0

'ClassNativeHandler :: getType'の中で、ローカル' jstring jstringObject' 'jstringObject'は無効なローカル参照エラーを引き起こす可能性があります。 – taskinoor

+0

nullになった場所に再度ポインティングするときにメモリに格納されないため、エラーが発生する** ClassNativeHandler :: getType ** locai変数を使用しているもの** jstring jstringObject ** –

関連する問題