android - Android应用程式名称作为变量而不是静态字符串

标签 android jenkins gradle android-build-flavors android-flavors

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

$FLAVOR_NAME{
     versionName FLAVOR_VERSION
     versionCode FLAVOR_CODE
}

最佳答案

@ Eloy_007,

虽然您的问题类似于this one,但您的问题中有一些细微差别,我认为以下内容将回答。

首先,有一个great article that you should read,作者(Coby Plain)着手提供一个更好的框架来处理 flavor 。另外,android10/Android-CleanArchitecture repo具有用于导入gradle属性的非常好的结构。查看buildsystem/dependencies.gradlepresentation/build.gradle以获得指导。

也就是说,下面是使用半动态/导入的 flavor 时导入属性的简要示例:

在gradle文件中,我们可以引用一个外部文件,该文件具有我们所有定义的相关属性,并且可以使用一些简单的常规魔术来连接字符串等。
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文件的之外定义 flavor ,以便最小化必须筛选的碎屑量。另外,主键可保持build.gradle文件的修订历史记录整洁。

祝您好运!

关于android - Android应用程式名称作为变量而不是静态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41068492/

相关文章:

java - 处理 fragment ListView 时出错,找不到符号 'list'

javascript - 错误 : spawn cmd ENOENT at Process. ChildProcess._handle.onexit(内部/child_process.js:240:19)

docker - Jenkins 管道 - groovy.lang.MissingPropertyException

Jenkins Groovy 无法通过 https 端口使用 oauth token 克隆 gitlab 存储库

git - 从 Jenkins 管道捕获 shell 脚本输出

java - 如何使用 gradle 创建可重用源的 Jar 库?

android - 如何创建显示星期日期的周历

Android Studio/Gradle 找不到用于测试的 AppCompat 资源

android - 无法解析 Maven 库

java - Dagger 2 注入(inject)子类