【问题标题】:How Android Studio build different archs for native code?Android Studio 如何为原生代码构建不同的拱门?
【发布时间】:2016-12-19 01:01:53
【问题描述】:
在 Android Studio 2 及以上版本中,您可以使用 CMake 编写原生构建脚本。它会自动为您构建所有受支持的拱门,这很棒。
但并不是网上所有的库源代码都是由 CMake 构建的。他们中的大多数仍在使用旧的make 系统。
我有一个使用make 构建系统的库。我已经设法建立了不同的archs。如何告诉 Android Studio 中的 CMake 构建系统我希望它链接到哪个版本的库?
我检查了https://developer.android.com/ndk/guides/cmake.html,但没有类似ARCH 的变量。
或者,也许我可以将库放在某个地方,Android Studio 中的 CMake 就能将其拾取?
【问题讨论】:
标签:
android
android-ndk
cmake
【解决方案1】:
由于您已经为每个拱门编译了库,您可以将它们存储在 app/src/main/jniLibs/{arch} 例如:armeabi/armeabi-v7a/arm64-v8a
然后将帖子末尾的行添加到您的应用程序 build.gradle。
productFlavours 用于配置编译变体,因此您可以正确链接已编译的库。
android.ndk {
moduleName = "your_library_jni"
cppFlags.add("-fexceptions")
cppFlags.add("-std=c++11")
cppFlags.add("-I" + file("src/main/jni").absolutePath)
}
android.productFlavors {
create("armeabi") {
ndk.with{
abiFilters.add("armeabi")
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi/"
ldLibs.add(libsDir + "libyour_module.so")
}
}
create("armv7-v7a") {
ndk.with {
abiFilters.add("armeabi-v7a")
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi-v7a/"
ldLibs.add(libsDir + "libyour_module.so")
}
}
create("arm64-v8a") {
ndk.with{
abiFilters.add("arm64-v8a")
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "/src/main/jniLibs/arm64-v8a/"
ldLibs.add(libsDir + "libyour_module.so")
}
}
}