我有几个 C++ 项目,我目前使用 Android.mk 文件和 ndk-build 构建它们。因为这不是很好调试,所以我想将这个 c++ 项目作为模块包含在我的 android studio 项目中。这个 android studio 项目目前是一个 android java 库,它使用来自 ndk-build 的 .so。
我通过创建一个新的 android 库模块并导入 c++ 代码、设置 header 和库路径来进行调试。这个模块看起来像这样:
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion = 23
buildToolsVersion = '23.0.2'
defaultConfig {
minSdkVersion.apiLevel = 4
targetSdkVersion.apiLevel = 23
}
}
android.ndk {
moduleName = 'module_name'
toolchain = 'gcc'
stl "gnustl_static"
ldFlags.addAll(["-L/LIB_PATH"])
ldLibs.addAll(["android", "log", "whatever_lib"])
cppFlags.addAll(['-std=c++11',
"-I" + "/SEARCH_PATHS"])
}
android.productFlavors {
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
}
android.sources {
main {
java.source.srcDirs += []
res.source.srcDirs += []
assets.source.srcDirs += []
jniLibs.source.srcDirs += []
jni.source{
srcDirs += [
NATIVE_PROJECT_PATH + "include/",
NATIVE_PROJECT_PATH + "src/",
]
}
}
}
}
这工作正常,但我在 module/build/output/aar/libname_release.aar/lib/abi/lib.so 中得到了 .so,这不是一个好地方,因为我会直接需要 .so 而无需解压缩 aar .
是否有任何可能的方法让这个模块只在给定路径创建 .so 并让另一个模块构建和使用它?
最佳答案
当然问了没多久就找到了办法。 http://tools.android.com/tech-docs/new-build-system/gradle-experimental#TOC-NDK-Dependencies
您可以使用“应用插件:'com.android.model.native'”代替“应用插件:'com.android.model.library'”,并且在具有依赖项的模块中,您可以使用:
sources {
main {
jni {
dependencies {
project ":dependency_module"
}
}
}
}
关于android - 是否有可能在 Android Studio 中构建一个带有 .so 作为输出的 native 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521846/