将标头和本机库添加到Android项目

时间:2019-11-26 09:13:38

标签: android cmake ninja

我有一些C代码必须集成到我的Android项目中。它取决于一个库(.so),我也有.h文件。

我将这些库复制并包含目录到项目的cpp程序包中,以使它们更易于查找。

为了简化起见,我尝试从Android Studio提供的HelloJNI项目开始,并按照说明here进行操作。

这是CMakeLists.txt:

#given from HelloJNI
cmake_minimum_required(VERSION 3.4.1)

add_library(hello-jni SHARED
            hello-jni.c)

# Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
                      android
                      log)
#my own additions now:
add_library( # Specifies the name of the library.
        libgdndk

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        IMPORTED)
set_target_properties( # Specifies the target library.
        libgdndk

        # Specifies the parameter you want to define.
        PROPERTIES IMPORTED_LOCATION

        # Provides the path to the library you want to import.
        ${CMAKE_BINARY_DIR}/libs/${ANDROID_ABI}/libgdndk.so )
include_directories(${CMAKE_BINARY_DIR}/inc/)
target_link_libraries( hello-jni libgdndk app-glue ${libgdndk} )

这会导致错误:

ninja: error: 'libs/armeabi-v7a/libgdndk.so', needed by 'C:/workspace/android/HelloJNI/app/build/intermediates/cmake/arm7/debug/obj/armeabi-v7a/libhello-jni.so', missing and no known rule to make it

2 个答案:

答案 0 :(得分:1)

您似乎将导入的库链接到hello-jni目标两次。另外,也不需要在${}库的target_link_libraries()命令中使用libgdndk。您已经为该库定义了CMake目标libgdndk,因此您可以执行以下操作:

target_link_libraries( hello-jni libgdndk app-glue )

答案 1 :(得分:0)

我终于从lib的发行商那里得到了一些帮助,(有效的)结果看上去与我尝试过的代码非常相似,所以也许只是库的位置有问题。

add_library( gdndk SHARED IMPORTED )
include_directories( $ENV{userprofile}/AppData/Local/Android/sdk/extras/blackberry/dynamics_sdk/sdk/libs/handheld/gd/inc)
set_target_properties(gdndk PROPERTIES IMPORTED_LOCATION $ENV{userprofile}/AppData/Local/Android/sdk/extras/blackberry/dynamics_sdk/sdk/libs/handheld/gd/libs/${ANDROID_ABI}/libgdndk.so )
target_link_libraries( hello-jni gdndk )