Как добавить & quot; что-то.a & quot; файл библиотеки для моего C ++ Android Gradle проекта?

У меня есть библиотека под названием 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». У меня нет исходного кода библиотеки.

3

Решение

Это будет зависеть от того, какую версию 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.

Надеюсь это поможет.

Приветствия.

Унаи.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector