Tạo một lớp C ++ và sử dụng lớp đó trong lớp C ++ khác Có chứa các phương thức JNI trong ndk android

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

Trong Android, tôi đang đối mặt với các vấn đề trong việc kết nối hai lớp cpp trong Android bản địa. Tôi đã thử nghiệm với lớp duy nhất nó hoạt động tốt.

nhưng khi tôi đã tạo một tập tin khác và bây giờ phải đối mặt với một vấn đề trong liên kết nó với tập tin cpp hiện tại.

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) 

Lỗi: tham chiếu không xác định đối với `ClassNativeHandler :: getType (_JNIEnv *, _jobject *) '

trên dòng này trả về classNativeHandler.getType (env, context);

Vì vậy, tôi không thể xây dựng tệp .so. Xin vui lòng hướng dẫn cho tôi

1 Comments
Joe C 27/07/2017
Câu hỏi này phải làm gì với Java?

1 Answers


taskinoor 27/07/2017.

Bạn chưa biên dịch native-handler.cpp . Bạn cần phải xác định nó trong LOCAL_SRC_FILES để NDK biên dịch nó.

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

3 comments
Amjad Khan 27/07/2017
Bây giờ tôi có thể biên dịch tập tin, nhưng có lỗi khi chạy ứng dụng như {JNI DETECTED ERROR IN APPLICATION: sử dụng tham chiếu cục bộ đã xóa 0x7f5bc55a3d}
taskinoor 27/07/2017
Bên trong ClassNativeHandler::getType bạn đã định nghĩa jstring jstringObject địa phương có hiệu quả che jstringObject toàn bộ jstringObject có thể gây ra lỗi tham chiếu cục bộ không hợp lệ.
Amjad Khan 27/07/2017
Nó không được lưu trữ trong bộ nhớ khi chỉ một lần nữa đến vị trí nhận được null để nhận được lỗi trên ClassNativeHandler::getType nào đang sử dụng biến jstring jstringObject

Related questions

Hot questions

Language

Popular Tags