为特定的flavor版本设置debuggable true

时间:2017-08-15 15:18:04

标签: android gradle

如何定义在releaseBuildConfig中启用了debuggable = true,但仅针对特定的一组风格:

这是示例代码,包括试用版(不起作用):

flavorDimensions "project", "environment"

productFlavors {
    basic  {
        dimension "project"
    }

    advanced {
        dimension "project"
    }

    flavorDevelopment {
        dimension "environment"
        applicationId "ch.myproject.app.development"
        debuggable true  // this does not work
    }

    flavorTest {
        dimension "environment"
        applicationId "ch.myproject.app.test"
        debuggable true  // this does not work

    }

    flavorIntegration {
        dimension "environment"
        applicationId "ch.myproject.app.integration"
        debuggable true  // this does not work
    }

    flavorProduction {
        dimension "environment"
        applicationId "ch.myproject.app.production"
        // just here debuggble has to be on the default (in buildTypes.debug  = on  AND in buildTypes.release = off )
        // this is working
    }

“debuggable true”语句在上面的代码示例中不起作用。 但它应该给你一个印象,我试图做的。

我唯一有效的发行版本就是flavorProduction。 我正在使用默认行为,它正常工作。

但所有其他内部版本都有flavorDevelopment,flavorTest,flavor Integration,以及我想要启用的调试功能。

我尝试了第二种方法:

    applicationVariants.all { variant ->
    // setting all releases expecting the Production one to debuggable
    if (!variant.buildType.name.contains("ProductionRelease")) {
        variant.buildType.debuggable = true
    }
}

但是我收到了消息:

Error:(132, 0) Cannot set readonly property: debuggable for class: com.android.build.gradle.internal.api.ReadOnlyBuildType

有人知道如何使用gradle配置它吗?

先谢谢卢克

2 个答案:

答案 0 :(得分:7)

debuggablethe BuildType object的属性,而不是the ProductFlavor object的属性,因此(如您所见),在产品风格中编写debuggable true将无效

通常,您将拥有debug构建类型和release构建类型,然后您将拥有flavorProductionDebugflavorProductionRelease等构建变体。听起来这对你来说还不够,而且你需要保持debugrelease构建类型之间的不同,同时还要debuggable true

要实现此目的,您可以制作第三种构建类型。

buildTypes {
    debug { ... }
    release { ... }
    releaseDebuggable {
        initWith release
        debuggable true
    }
}

现在,您的releaseDebuggable构建类型与您的release构建类型完全相同,但可调试!

这会产生为您的所有产品口味创建fooReleaseDebuggable构建变体的副作用。如果您要取消flavorProductionReleaseDebuggable以外的所有内容,可以使用the variantFilter interface

答案 1 :(得分:1)

有一种方法可以实现这一点,只需将可调试属性设置为在每个预期产品风格源集中的清单中为true。

第1步:创建产品口味的源集 在app / src / [flavor-name]中设置新源并在其中创建 AndroidManifest.xml 。如下所示:

enter image description here

第2步:在清单中定义可调试

enter image description here

工具:ignore =“HardcodedDebugMode”用于抑制警告。

就是这样,你很高兴。无需触摸 build.gradle 文件。