android JNI, как преобразовать файл CMAKE в JNI Android .mk с поддержкой файлов - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть рабочий проект Cmake android, и я перемещаю его в новое приложение, в котором я не могу использовать Cmake. Мне нужно преобразовать его для использования Android JNI / Android .mk & Application.mk. Однако у меня возникли проблемы с двумя каталогами файлов поддержки. У одного есть пространство имен jni, у другого, в основном, заголовки. К сожалению, преобразование не кажется таким простым, как предполагают документы.

Структура файла

src/main/cpp
            deps/otherlib/include
            deps/jni/include
            Android.mk
            Application.mk
            main.cpp logger.h
            foobar_handler.cpp
            foobar_handler.hpp
            foo_test.hpp
            foo_test.cpp   

Когда я пытаюсь синхронизировать c файлы, все библиотечные файлы в deps / jni / include показывает неразрешенные ссылки на что-либо в угловых скобках. IE #include <jni/bar.hpp>

Давненько я ничего не делал с C ++. Я заметил, что все файлы jni cpp имеют namespace jni Я думаю, что мне не хватает шага для его работы в моем Android .mk. CMAKE компилируется нормально, но я не могу его использовать. Я попытался добавить его в LOCAL_EXPORT_C_INCLUDES, но безуспешно.

Android .mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)


LOCAL_MODULE := native_crash_handler

LOCAL_SRC_FILES := \
    main.cpp logger.h \
    foobar_handler.cpp \
    foobar_handler.hpp \
    foo_test.hpp \
    foo_test.cpp


LOCAL_C_INCLUDES := $(LOCAL_PATH)

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)

LOCAL_CFLAGS := -fexceptions -fno-omit-frame-pointer
LOCAL_CFLAGS += -Wall -Werror

CXX11_FLAGS := -std=gnu++11
LOCAL_CFLAGS += $(CXX11_FLAGS)

LOCAL_EXPORT_CPPFLAGS := $(CXX11_FLAGS)

LOCAL_LDLIBS := -llog




include $(BUILD_SHARED_LIBRARY)

CMakelists.txt

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
        foobar_handler

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        main.cpp
        logger.h
        foobar_handler.cpp
        foobar_handler.hpp
        foo_test.hpp
        foo_test.cpp
)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log
)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
        foobar_handler

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
)

target_include_directories(
        foobar_handler PRIVATE
        deps/otherlib/include
        deps/jni/include
)

Application.mk

APP_STL := c++_shared
APP_CFLAGS += -DASIO_STANDALONE
APP_CPPFLAGS += -std=c++14 -fexceptions -frtti
APP_LDFLAGS += -llog -lgcov --coverage
...