在较新版本的Android Studio中,我们可以在/ jni文件夹中构建.cpp和.c文件,而无需任何android.mk文件。这可以通过在build.gradle文件中放置类似以下行的内容来实现:
defaultConfig {
..
ndk {
moduleName "niceprocess"
cFlags "-std=c++11 -fexceptions"
ldLibs "log"
stl "gnustl_shared"
abiFilter "armeabi-v7a"
}
}
}
这似乎递归地构建了它找到的jni文件夹中的所有内容,并将其置于' niceprocess'模块。
我的主要问题是 - 有没有办法控制哪些模块将使用哪些文件构建,并构建多个模块,每个模块具有不同的cFlags,并且能够#include来自另一个模块的标头。
我知道这可以通过一个android.mk完成,但我想知道是否有可能使用gradle系统。
答案 0 :(得分:2)
不,没有办法控制将使用哪些文件以及许多其他内容构建哪些模块。截至目前,Android Studio的gradle插件仅支持NDK构建的一个非常基本的案例 - 只有一个没有任何依赖的模块,完全从位于'jni'文件夹中的源文件集编译。
您可以自行评估 - 只需查看NdkOptions.java和NdkCompile.groovy。在第一个文件中,您可以看到在gradle脚本中NDK支持的唯一选项是'moduleName','cFlags','ldLibs','stl'和'abiFilters'。在第二个文件中,您可以看到Android.mk如何使用该选项生成,而没有任何机会自定义它超过该选项允许的范围。
如果您需要对本机源构建进行更多智能控制,则需要在gradle脚本中禁用NDK支持并使用ndk-build的显式调用。这样,您需要在Android.mk中将源文件添加到Android Studio中的源代码树中后手动指定源文件集,这不太方便,但您可以更好地控制模块,依赖项,构建选项等。