如何将"something.a"库文件添加到我的C++ Android Gradle 项目中?
How do I add a "something.a" library file to my C++ Android Gradle project?
我有一个叫做somelibrary/lib/c++/armeabi-v7a/libsomelibrary.a
的库。我如何将它添加到我的Android项目中的Gradle文件?
显然,库也包含标题下的somelibrary/include/somelibrary/*.h
,但这是简单的部分,因为我可以只是添加一行cppFlags.addAll(['-I' + file('somepath/somelibrary/include')])
到我的build.gradle
。
但是我如何也添加。a文件到项目,使链接工作在所有二进制格式,不仅是armeabi-v7a,而且arm64-v8a, armeabi和x86?该库包含所有这些二进制格式的。a文件的版本。除此之外,它还包含两个不同的c++标准库的版本:"c++"answers"gnustl"。我没有库的源代码
这取决于你使用的gradle版本,比如build:gradle-experimental:0.7.3'
在应用构建中。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文件。
希望,这有帮助。
欢呼。
Unai .
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- OpenCV Android C++ imwrite not found
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- Android Studio 中带有静态库的原生C++代码
- 如何在 Android Studio 4 中编译 C/C++ 原生代码
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Android 在编译二进制文件时重建静态库
- 我只想在Android 4.4中使用C++11库
- 无法将标准库导入本机 android 项目中的头文件
- Android Java USB for native cpp
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++
- 在Android原生C++中使用Facemark opencv contrib
- 最小的CMake构建为Android
- 更新后的Android Studio现在需要Clang,不再链接到GCC的库
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机