Есть несколько вещей, которые я должен упомянуть здесь.
- Я предлагаю переключиться на
gradle+clang
для построения вашего кода.Android.mk
как-то стареет, и лучше использовать новые системы сборки, если вы начинаете новый проект. - Убедитесь, что ваша предварительно собранная библиотека может использоваться в Android.Если это не так, вам нужно сначала построить его.Например, я собрал openssl, потому что не смог найти подходящую готовую библиотеку.
Если вы используете gradle+cmake
, вот простой файл CMakeLists.txt
для ваших готовых библиотек:
cmake_minimum_required(VERSION 3.4.1)
add_library( core-api
SHARED
src/main/cpp/mysource.c )
# prebuilt libraries
add_library( crypto-lib
STATIC
IMPORTED )
set_target_properties( crypto-lib
PROPERTIES IMPORTED_LOCATION
${CMAKE_CURRENT_SOURCE_DIR}/../prebuilt/crypto/${ANDROID_ABI}/lib/libcrypto.a )
include_directories( src/main/cpp/
../prebuilt/crypto/common/include/
../prebuilt/crypto/${ANDROID_ABI}/include/ )
# other libraries
find_library( log-lib
log )
target_link_libraries( core-api
crypto-lib
${log-lib} )
И это gradle
файл, который использует это CMakeLists.txt
:
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.sdkVersion
defaultConfig {
minSdkVersion 14
targetSdkVersion 27
externalNativeBuild {
cmake {
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_STL=c++_static"
cFlags "-D__STDC_FORMAT_MACROS", "-fno-integrated-as"
}
}
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
externalNativeBuild {
cmake {
cFlags "-Wall","-DDEBUG"
}
}
debuggable true
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}