0

在过去的一个小时里,我一直在尝试在 gradle.properties 中设置一些变量名称,例如 FLAVOR_NAME,然后在 build.gradle 中使用它来获得一种动态的风味名称。还没有成功。甚至可以有一个动态的风味名称吗?我的意思是:

$FLAVOR_NAME{
     versionName FLAVOR_VERSION
     versionCode FLAVOR_CODE
}
4

1 回答 1

2

@Eloy_007,

虽然您的问题与问题相似,但您的问题中存在一些细微差别,我认为以下内容将予以回答。

首先,您应该阅读一篇很棒的文章,作者 (Coby Plain) 介绍了如何为使用风味提供更好的框架。此外,android10/Android-CleanArchitecture repo有一个非常好的结构来导入 gradle 属性。查看buildsystem/dependencies.gradlepresentation/build.gradle寻求指导。

也就是说,下面是使用半动态/导入风格时导入属性的快速示例:

在 gradle 文件中,我们可以引用一个外部文件,该文件将我们所有的相关属性定义在一起,并且可能使用一些简单的 groovy 魔术来连接字符串等。

build.gradle:

apply from: "properties.gradle" // load in properties from some other file

// ... plugins, etc.

android {
    // some other sections
    productFlavors {
        dev {
            // you may want to keep some non-imported flavors.
            // maybe you're working with flavor dimension here
        }

        // ... maybe more standard flavors

        flavors.each {name, flavor -> 
            def wrapEscaped = { s -> "\"${s}\""} // simple function to wrap strings
            "$name" {
                applicationId flavor.applicationId
                versionName "${some_version_number}"

                buildConfigField "String", "MAJOR_KEY", wrapEscaped(flavor.majorKey)
                buildConfigField "String", "ANOTHER_ONE", wrapEscaped(flavor.anotherOne)
                buildConfigField "int", "PILLOW_COUNT", flavor.pillowCount

                // ... additional configs
            }
        }
    }
}

然后在引用中properties.gradle定义flavors如下:

ext {
  config = [
      baseId : "io.wethebest.mobile"
  ]

  flavors = [
      free    : [
          applicationId: config.baseId + ".free",
          majorKey     : "COCOA BUTTER",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 1,
      ]
      simple : [
          applicationId: config.baseId + ".simple",
          majorKey     : "A HAMMOCK",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 10,
      ],
      paid   : [
          applicationId: config.baseId,
          majorKey     : "A JETSKI",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 100000000,
      ]
  ]
}

至少,这允许您在文件之外定义您的口味,build.gradle以便您可以最大限度地减少您必须筛选的垃圾量。另外,主键,它保持build.gradle文件的修订历史干净。

HTH,祝你好运!

于 2016-12-10T01:06:06.780 回答