如何在Android Studio中使用ndk-build的自动调用

时间:2015-01-27 23:53:36

标签: android android-studio android-ndk

在较新版本的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系统。

1 个答案:

答案 0 :(得分:2)

不,没有办法控制将使用哪些文件以及许多其他内容构建哪些模块。截至目前,Android Studio的gradle插件仅支持NDK构建的一个非常基本的案例 - 只有一个没有任何依赖的模块,完全从位于'jni'文件夹中的源文件集编译。

您可以自行评估 - 只需查看NdkOptions.javaNdkCompile.groovy。在第一个文件中,您可以看到在gradle脚本中NDK支持的唯一选项是'moduleName','cFlags','ldLibs','stl'和'abiFilters'。在第二个文件中,您可以看到Android.mk如何使用该选项生成,而没有任何机会自定义它超过该选项允许的范围。

如果您需要对本机源构建进行更多智能控制,则需要在gradle脚本中禁用NDK支持并使用ndk-build的显式调用。这样,您需要在Android.mk中将源文件添加到Android Studio中的源代码树中后手动指定源文件集,这不太方便,但您可以更好地控制模块,依赖项,构建选项等。