首页 > 解决方案 > 将标头和本机库添加到 Android 项目

问题描述

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

我将 libs 和 include 目录复制到项目的 cpp 包中,以使它们更容易找到。

为了更容易,我尝试从 Android Studio 提供的 HelloJNI 项目开始,并按照此处的说明进行操作。

这是 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

标签: androidcmakeninja

解决方案


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

target_link_libraries( hello-jni libgdndk app-glue )

推荐阅读