【问题标题】:Edit property based on library variant gradle android基于库变体 gradle android 编辑属性
【发布时间】:2015-11-05 14:20:51
【问题描述】:

我有一个带有原生部分的 android 项目。我想根据 buildType 和 productFlavor 使用不同的标志构建我的本机代码,例如:

android {
    project.ext.buildFlags = ['-j16', 'all']
    buildTypes {
        debug { project.ext.buildFlags.add('NDK_DEBUG=1')}
    }
    productFlavors {
        pretty {project.ext.buildFlags.add('PRETTY')}
        ugly {project.ext.buildFlags.add('UGLY')}
    }

    task buildNativeCode(type: Exec) {
        commandLine 'ndk-build', project.ext.buildFlags
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn buildNative
    }
}

所以,对于丑陋的调试,我想用“UGLY”和“NDK_DEBUG”标志构建我的本机库,用“PRETTY”和“NDK_DEBUG”标志构建漂亮的调试等等。但是,无论选择何种配置,它们总是被添加。据我所知,这是在项目评估期间完成的,我不知道如何正确设置它。现在我最终创建了许多内容几乎相同的 buildNativeXXX 任务。我希望避免代码重复。

【问题讨论】:

    标签: android-ndk android-gradle-plugin build.gradle


    【解决方案1】:

    之后您可以使用以下命令来修改任何任务:

    afterEvaluate {
        productFlavors.each { productFlavorName ->
            buildTypes.each { buildTypeName ->
    
            project.ext.buildFlags.add('NDK_DEBUG=1')
    
            if (productFlavorName.equals("pretty")) {
               //enter code here
                project.ext.buildFlags.add('PRETTY')
            } else {
                project.ext.buildFlags.add('UGLY')
            }
        }
        }
    }
    

    现在您可以完全控制 gradle 如何为您添加 buildFlags。 :)

    如果你想使用 buildConfig 变量,你可以使用:

    applicationVariants.all { variant ->
                variant.buildConfigField "String", "COMMIT_HASH", "HASH123456789"
    }
    

    【讨论】:

    • 恐怕这行不通。 (除了您应该比较 productFlavors 和 buildTypes 的 .name 属性这一事实之外)。它将遍历每个 productFlavor 和 BuildType。因此,即使我选择了uglyRelease,我的buildFlags 列表中也会有NDK_DEBUG=1、PRETTY 和UGLY。
    猜你喜欢
    • 2015-08-04
    • 2015-05-23
    • 1970-01-01
    • 2016-01-03
    • 2019-01-26
    • 1970-01-01
    • 2011-01-05
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多