【问题标题】:Gradle/android: single ndk build for multiple flavors?Gradle/android:为多种口味构建单个 ndk?
【发布时间】:2017-09-15 15:32:36
【问题描述】:

我有一个带有以下内容的 build.gradle 文件设置(我显然已经排除了不重要的部分):

android { defaultConfig { ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86' } }
productFlavors {
    flavor1 { ... }
    flavor2 { ... }
    flavor3 { ... }
    flavor4 { ... }
    flavor5 { ... }
}
buildTypes {
    debug {
        externalNativeBuild { ndkBuild { cFlags '-DDEBUG' } }
        ...
    }
    release {
        externalNativeBuild { ndkBuild { cFlags '-DRELEASE' } }
        ...
    }
}
externalNativeBuild {
    ndkBuild {
       path 'jni/Android.mk'
    }
}

工作,但它为每个flavor+buildType 编译本机代码。所以不仅debug和release,还有flavor1Debug、flavor2Release等,需要很长时间

我如何告诉 gradle 只为这两种构建类型执行 externalNativeBuild,并将它们用于所有类型?

【问题讨论】:

  • 我在 cmake 构建时遇到了类似的问题。添加 cmake 构建后,Gradle 配置需要将近一小时。我们确实有很多口味,我们的 C++ 库和 cmake 配置也很大。

标签: android gradle android-ndk android-gradle-plugin android-productflavors


【解决方案1】:

确实如此,如果您查看文件.externalNativeBuild/ndkBuild/flavor1Debug/armeabi/ndkBuild_build_command.txt,您会看到与我的类似的内容:

Executable : ~/Library/Android/sdk/ndk-bundle/ndk-build
arguments : 
NDK_PROJECT_PATH=null
APP_BUILD_SCRIPT=~/proj/jni/Android.mk
APP_ABI=armeabi
NDK_ALL_ABIS=armeabi
NDK_DEBUG=1
APP_PLATFORM=android-21
NDK_OUT=~/app/build/intermediates/ndkBuild/flavor1/debug/obj
NDK_LIBS_OUT=~/app/build/intermediates/ndkBuild/flavor1/debug/lib
APP_SHORT_COMMANDS=false
LOCAL_SHORT_COMMANDS=false
-B
-n
jvmArgs : 

对于每个 buildVariant 以此类推。您可以做些什么来减少构建时间?

  1. 将耗时部分提取到一个静态库(或一组静态库)中,只留下集成ndkBuild的最终链接。将这些静态库用作$(PREBUILT_STATIC_LIBRARY)

  2. 完全禁用集成的ndkBuild,并设置

    jniLibs.srcDir 'src/main/libs'
    

    禁用集成 ndkBuild 的最简单方法是指向

    jni.srcDirs = []
    

    但您也可以保留 Android Studio 对您的 cpp 文件的索引,但禁用 gradle 任务:

    tasks.all { task ->
        if (task.name.startsWith('compile') && task.name.endsWith('Ndk')) {
            task.enabled = false
        }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2016-01-19
    • 2014-12-16
    • 2014-05-21
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多