У меня есть библиотека под названием somelibrary/lib/c++/armeabi-v7a/libsomelibrary.a
, Как добавить его в файлы Gradle в моем проекте Android?
Очевидно, что библиотека также содержит заголовки под somelibrary/include/somelibrary/*.h
но это легкая часть, потому что я могу просто добавить строку cppFlags.addAll(['-I' + file('somepath/somelibrary/include')])
к моему build.gradle
,
Но как мне добавить файл .a в проект, чтобы связывание работало во всех двоичных форматах, не только armeabi-v7a, но также arm64-v8a, armeabi и x86? Библиотека содержит версии файла .a для всех этих двоичных форматов. И в дополнение к этому, он также содержит версии для двух разных стандартных библиотек c ++: «c ++» и «gnustl». У меня нет исходного кода библиотеки.
Это будет зависеть от того, какую версию Gradle используют, в случае сборки: gradle-экспериментальный: 0.7.3 ‘
В файле приложения build.gradle:
Сначала определите ваш библиотечный репозиторий
repositories {
libs(PrebuiltLibraries) {
your_lib {
headers.srcDir "${your_lib_path}/include"binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${your_lib_path}/your_library.a")
}
}
}
}
Определите свой ndk-модуль
android.ndk
{
moduleName = "your_ndk_module"platformVersion = 9
toolchain "gcc"debuggable true
cppFlags.add("-fexceptions")
cppFlags.add("-std=c++11")
stl = "gnustl_static"}
определить источники библиотеки
android.sources {
main {
jni {
dependencies {
library "your_lib" linkage "static"}
}
}
}
определить вкус продукта
android.productFlavors
{create("arm") {
ndk.abiFilters.add("armeabi")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
}
Весь код:
apply plugin: 'com.android.model.application'
def your_lib_path = file(project(':app').projectDir).absolutePath + "/your_lib_path"model {
repositories {
libs(PrebuiltLibraries) {
your_lib {
headers.srcDir "${your_lib_path}/include"binaries.withType(StaticLibraryBinary) {
staticLibraryFile = file("${your_lib_path}/your_library.a")
}
}
}
}
//define your ndk-module:
android.ndk {
moduleName = "your_ndk_module"platformVersion = 9
toolchain "gcc"debuggable true
cppFlags.add("-fexceptions")
cppFlags.add("-std=c++11")
stl = "gnustl_static" // Which STL library to use: gnustl or stlport
}
//define your android sources
android.sources {
main {
jni {
dependencies {
library "your_lib" linkage "static"}
}
}
}
//define your product flavours:
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
ndk.ldLibs.addAll(["your_lib"])
}
}
}
Вам нужно будет изменить файл Gradle в соответствии с версией Gradle.
Надеюсь это поможет.
Приветствия.
Унаи.
Других решений пока нет …