【问题标题】:How to use the automatic invocation of ndk-build in Android StudioAndroid Studio中如何使用ndk-build的自动调用
【发布时间】:2015-01-27 23:53:35
【问题描述】:

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

【问题讨论】:

    标签: android android-studio android-ndk


    【解决方案1】:

    不,没有办法控制将使用哪些文件构建哪些模块以及许多其他内容。到目前为止,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的源代码树中,这不是很方便,但是你可以更好地控制模块,它的依赖关系,它的构建选项等。

    【讨论】:

    • 这有改变吗?我试图管理在 Android Studio 中使用 Gradle 构建的 ABI。
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 2022-01-03
    • 2023-03-08
    • 2016-07-02
    • 1970-01-01
    • 2015-08-20
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多