如何在build.gradle的buildType中获得味道?

时间:2017-11-29 02:09:12

标签: android gradle android-gradle

我有我的gradle文件,如下所示,我在调试版本中将我的应用程序签名为Debug,在发布版本中签署了Release。它有两种风味,即开发和生产。

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

productFlavors {
    develop {
        // Do something
    }
    production {
        // Do something
    }
}

但是,我正在考虑签署Debug for Develop flavor(发布)。我怎么能实现这一点(即访问buildType中的flavor类型变量)?

2 个答案:

答案 0 :(得分:0)

编辑:我认为这可能是一个更清洁的解决方案

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
    release-develop {
        initWith buildTypes.release
        signingConfig signingConfigs.debug
    }
}

你也可以使用:

productFlavors.develop.signingConfig signingConfigs.debug

在发布版本类型中。

原始答案:

这样的事情应该可以解决问题。

层次结构是buildTypes - > defaultConfig - > productFlavors

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

defaultConfig {
    signingConfig signingConfigs.release
}

productFlavors {
    develop {
        signingConfig signingConfigs.debug
        // Do something
    }
    production {
        // Do something
    }
}
  • developDebug :使用调试变体
  • 中的调试密钥签名
  • developRelease :使用开发风格的调试键签名
  • productionDebug :使用调试变体的调试密钥签名
  • productionRelease :使用defaultConfig中的发布密钥签名,因为它未在发布版本中定义。

答案 1 :(得分:0)

据我所知,您想要这样的东西:

developDebug: signingConfigs.debug
productionDebug: signingConfigs.debug
developRelease: signingConfigs.debug
productionRelease: signingConfigs.release

您可以通过以下方式实现:

android {
  productFlavors {
    develop {
        // Do something
    }
    production {
        // Do something
    }
  }
  buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    // Make an unfinished release build type
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    // Finish the release build type flavor specific
    def runTasks = gradle.startParameter.taskNames.toString().toLowerCase()
    if (runTasks.contains("develop")) {
      release {
        signingConfig signingConfigs.debug
      }
    } else if (runTasks.contains("production")) {
      release {
        signingConfig signingConfigs.release
      }
    }
  }
}