gpt4 book ai didi

android - 如何将 "something.a"库文件添加到我的 C++ Android Gradle 项目?

转载 作者:太空狗 更新时间:2023-10-29 13:12:00 26 4
gpt4 key购买 nike

我有一个名为 somelibrary/lib/c++/armeabi-v7a/libsomelibrary.a 的库。如何将它添加到我的 Android 项目中的 Gradle 文件中?

显然,该库还包含 somelibrary/include/somelibrary/*.h 下的 header ,但这是简单的部分,因为我只需添加一行 cppFlags.addAll(['-I ' + file('somepath/somelibrary/include')]) 到我的 build.gradle

但是我如何将 .a 文件也添加到项目中,以便链接适用于所有二进制格式,不仅是 armeabi-v7a,还有 arm64-v8a、armeabi 和 x86?该库包含所有这些二进制格式的 .a 文件版本。除此之外,它还包含两个不同的 c++ 标准库的版本:“c++”和“gnuSTL”。我没有库的源代码。

最佳答案

这将取决于使用的 gradle 版本,如果是 build:gradle-experimental: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 文件。

希望这对您有所帮助。

干杯。

乌奈。

关于android - 如何将 "something.a"库文件添加到我的 C++ Android Gradle 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39491376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com