Статическая компоновка библиотеки в Android Studio 3.x и CMake

Во-первых, это моя ошибка.

Build command failed.
Error while executing process /Users/{user}/Library/Android/sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /Users/{user}/Desktop/android/app/.externalNativeBuild/cmake/debug/arm64-v8a --target native-lib}
ninja: error: 'src/main/jniLibs/zlib/arm64-v8a/lib/libz.a', needed by '../../../../build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so', missing and no known rule to make it

У меня есть статически связанная предварительно собранная библиотека zlib.a для каждого ARCH (armeabi, armeabi-v7a, arm64-v8a, x86, x86_64), и я разместил библиотеку вот так.

app/src/main/jniLibs/zlib/${ANDROID_ABI}/include/zlib.h
app/src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a

Вот мой CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED src/main/cpp/native-lib.cpp)

add_library(libz STATIC IMPORTED)

set_target_properties(libz PROPERTIES IMPORTED_LOCATION src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a)

include_directories(src/main/jniLibs/zlib/${ANDROID_ABI}/include)

find_library(log-lib log)

target_link_libraries(native-lib libz ${log-lib})

в файле Java,

static {
    System.loadLibrary("libz");
    System.loadLibrary("native-lib");
}

Я понятия не имею об этой проблеме. Вроде нормально. Я ведь не трогаю build.gradle? Что мне не хватает? Что проблема?

0
0
427
1

Ответы 1

Свойство IMPORTED_LOCATION должно быть абсолютный путь.

Используйте ${CMAKE_CURRENT_SOURCE_DIR} для ссылки на каталог с обрабатываемым в данный момент CMakeLists.txt:

set_target_properties(libz PROPERTIES
  IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a)

Другие вопросы по теме