, Обратите особое внимание на скрипт cmake CMakeLists.txt и скрипты gradle app / build.gradle и gen-libs / build.gradle. Я надеюсь это тебе поможет
я есть большая библиотека файлов C, которая использует OpenSSL, и я очень плохо знаком с работой с нативными библиотеками, и особенно плохо знаком с работой с Android. Мне удалось реализовать эту библиотеку на iOS без проблем.
Я искал в Интернете учебники / информацию о том, как это сделать, но до сих пор я не нашел ничего, что мог бы понять. Это все очень смущает меня.
По сути, я пытаюсь выяснить, как скомпилировать библиотеку файлов C в нативную библиотеку, используя NDK, и использовать скомпилированную библиотеку с приложением imy android.
Из того, что я понимаю, мне нужен собственный файл cmake для самого андроида, но я не знаю, с чего начать, и документация, которую я нашел, невероятно трудна для понимания.
Итак, мне нужна помощь в понимании процесса компиляции библиотеки в следующей усадьбе:
Скомпилируйте библиотеку, связав ее с openssl и libcrypto, используя Gradle и CMakeLists.txt, и свяжите окончательную библиотеку с моим проектом Android Studio.Быть в состоянии сделать вызовы к собственным функциям в этих библиотеках из моего кода Java. (Я понимаю, что для этого требуется JNI Java Wrapper)(Мне уже удалось собрать libssl и libcrypto для всех архитектур, которые требуются для Android, но я не уверен, что делать с.a
/.so
файлы.)
Любая помощь в этом вопросе была бы невероятно признательна.
Спасибо
РЕДАКТИРОВАТЬ:
Мне удалось создать несколько библиотечных файлов со следующим.
Структура файла:
.idea
app
build
gradle
jni <--- I made this folder specifically fo this.
Android.mk <-- This is the important file.
include
openssl
<openssl header files>
libs
arm64-v8a
libcrypto.a
libcrypto.so
libssl.a
libssl.so
armeabi
libcrypto.a
libcrypto.so
libssl.a
libssl.so
armeabi--v7a
libcrypto.a
libcrypto.so
libssl.a
libssl.so
mips
libcrypto.a
libcrypto.so
libssl.a
libssl.so
mips64
libcrypto.a
libcrypto.so
libssl.a
libssl.so
x86
libcrypto.a
libcrypto.so
libssl.a
libssl.so
x86_64
libcrypto.a
libcrypto.so
libssl.a
libssl.so
src <--- These are example files that i used to build this with.
myc_files.c
myother_c_files.c
myc_heades.h
myother_c_headers.h
Затем я использовал следующее в Android.mk для генерации некоторых библиотек, запустивndk-build
.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Select from arm64-v8a armeabi armeabi-v7a mips mips64 x86 x86_64
ARCH := armeabi
APP_UNIFIED_HEADERS := true
#APP_ABI := $(ARCH)
# TARGET_ARCH := $(ARCH)
TARGET_PLATFORM := android-14
SRC_DIR := $(LOCAL_PATH)/src
HDR_DIR := $(LOCAL_PATH)/include
LIB_DIR := $(LOCAL_PATH)/libs
LOCAL_C_INCLUDES := $(HDR_DIR)
LOCAL_MODULE := myclib
LOCAL_SRC_FILES := $(SRC_DIR)/myc_files.c $(SRC_DIR)/myother_c_files.c
LOCAL_LDLIBS += -L$(LIB_DIR)/$(ARCH) -lssl -lcrypto
include $(BUILD_STATIC_LIBRARY)
Библиотеки были помещены вPROJECT/obj/local
а такжеЯ понятия не имею, куда идти отсюдаили, если этот файл Android.mk на самом деле правильно собрал библиотеки.