在构建时从 Gradle 设置静态变量

2024-03-28

我有一个 Android 项目,在 git 下管理。 Git 有 2 个分支(还有更多……但重要的是那两个),branch-a 和branch-b。 是否可以设置 gradle 来确定项目是从哪个分支构建的并设置public static String在项目的一类中根据分支来评估?

Thanks.


是的,您可能有一个gradle.properties文件在你的两个分支中(你可以阅读有关属性here https://docs.gradle.org/current/userguide/build_environment.html),包含一些属性,例如buildBranchName。但分配给该属性的值在每个分支中都会有所不同。例如,在 brach1 中,您在 build.gradle 脚本所在的目录中有一个 gradle.properties 文件,并且它有一个

buildBranchName=branch1

里面的财产。同时,branch2中的gradle.properties文件包含:

buildBranchName=branch2

然后,由于您有一个 android 项目,您可以使用BuildConfig类生成选项可将此变量传递到您的应用程序源中。你可以阅读相关内容here http://toastdroid.com/2014/03/28/customizing-your-build-with-gradle/,在“增强您的 BuildConfig”部分。您所需要的只是为您的构建类型向此自动生成的类添加一些属性,就像:

android {
    ...
    buildTypes {
        debug {
            buildConfigField "String", "BUILD_BRANCH", buildBranchName
        }
        ...
    }    
}

然后,在构建过程中,最后一堂课BuildConfig将被生成并且它将有一个BUILD_BRANCH字段,您可以将其用作此类的简单静态字段。

此外,如果有些项目有非 android 项目,则有一个plugin https://github.com/mfuerstenau/gradle-buildconfig-plugin,它允许对所有 java 项目执行相同的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在构建时从 Gradle 设置静态变量 的相关文章

  • JUnit 5 中的参数化 beforeEach/beforeAll

    我想为一个小型的类似数据库的应用程序编写一个测试 此应用程序使用查询 查询应返回正确的结果 这在 JUnit 5 中很容易实现 比如 BeforeEach void before database prepareDatabase Test
  • 如何对 Android 画布上的剪辑边界进行抗锯齿处理?

    我用的是安卓系统android graphics Canvas http developer android com reference android graphics Canvas html class 画一个戒指 http code
  • Android 模拟器出现错误:冷启动:快照不存在

    我在使用 Android 模拟器 7 8 天后就遇到了问题 起初它根本没有运行 现在重新安装模拟器解决了这个问题 但又产生了新的问题 每当我运行模拟器时 都会花费很长时间 大约 5 6 分钟 然后显示错误 Cold Boot Snapsho
  • 在 Apache POI 4.0 中为 XSSFWorkbook 创建自定义颜色样式

    要在 Apache POI 3 7 及更低版本中为 XSSFWorkbook 应用自定义颜色 可以执行以下操作 java awt Color c new java awt Color 1 2 3 XSSFCellStyle xcs xssf
  • 面向 Clojure 用户的 Java

    我一直在断断续续地使用 Lisp 并且正在赶上 clojure clojure的好处是我可以自然地使用所有的java函数 而clojure的坏处也是我必须自然地了解java函数 例如 我不得不花一些时间 谷歌搜索 来查找 Java 中的平方
  • Java 泛型和数字

    为了看看我是否可以清理一些数学代码 主要是矩阵代码 我尝试使用一些 Java 泛型 我有以下方法 private
  • ZipInputStream.getNextEntry() 如何工作?

    假设我们有这样的代码 File file new File zip1 zip ZipInputStream zis new ZipInputStream new FileInputStream file 假设您有一个包含以下内容的 zip
  • 如何解决此问题 目标 S+(版本 31 及更高版本)要求 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

    一直试图解决这个问题但无法解决 这是 udacity 课程 我尝试使用挂起意图创建通知 但挂起意图可变存在问题 我尝试用这种方式 视图模型 private val REQUEST CODE 0 private val TRIGGER TIM
  • 无法拦截Android应用程序的流量

    最近 我正在尝试测试和拦截来自开发的应用程序的流量罗莫比尔 我设置了一个代理burp 当然 我已经在我的设备上安装了 burp 证书 因此我可以拦截设备上的其他应用程序 但我无法在 burp suite 上看到相关应用程序的流量 相反 该应
  • Git“预接收”挂钩和“git-clang-format”脚本可以可靠地拒绝违反代码风格约定的推送

    让我们立即从一个片段开始pre receive我已经写过的钩子 bin sh format bold 033 1m format red 033 31m format yellow 033 33m format normal 033 0m
  • 如何指定 Gradle 包装器下载位置?

    我们将项目转移到了 gradle 并在 Jenkins 上持续构建 我们使用 gradle 包装器和 Jenkings gradle 插件 通过查看控制台输出 我发现每次构建都会下载 gradle 11 24 42 Downloading
  • 如何获取屏幕触摸的 x,y 坐标?

    当我的应用程序运行时 每当有人触摸屏幕时 是否有一种简单的方法来获取 x y 坐标 只是想将它们存储在一些整数中 覆盖onTouchEvent MotionEvent event 然后打电话event getX and event getY
  • 如何强制 JTable 在包含阿拉伯字符的情况下不反转文本?

    我有以下文字 word 但是当它显示在我的 JTable 上时 它看起来像这样 word 在每个 JLabel 或 TextArea 或任何其他输入中 它确实看起来像原始文本 word 仅在 JTable 上我遇到这样的问题 我不在乎它是否
  • 在 Google Play 中更新 APK 而不更改扩展文件

    我的 Google Play 控制台中有一个 草稿 APK 它已连接到 APK 扩展文件 版本号为9 扩展文件为 main 9 com something something obb 现在 我正在尝试在发布之前更新 APK 我增加了版本代码
  • 防止 git 在签署提交期间询问 GnuPG 密码

    Git 总是要求我在使用签名提交时输入密码来解锁我的密钥 git commit S m message 如何将密码存储在缓存中 以便我不必在签署提交时每次都输入密码 Git 永远不会掌握 GnuPG 密码 您必须依赖 GnuPG 的缓存密码
  • 以编程方式启用和禁用自动旋转?

    有很多很酷的小部件可以在手机上启用和禁用自动旋转 禁用它会在手机上的所有应用程序中关闭它 他们如何实现这一目标有什么想法吗 这应该可以为你解决问题 import android provider Settings public static
  • 通过JVMTI识别异常

    我正在使用 JVMTI 为 Java 应用程序编写一个检测工具 我已经看到 JVMTI 检测何时抛出异常以及何时捕获异常http docs oracle com javase 7 docs platform jvmti jvmti html
  • 从 Java 8 流中获取每个第 n 个元素

    假设我有一个这样的列表 1 2 3 4 5 6 7 8 9 10 是否可以使用 Java 8 流从该列表中获取每个第二个元素以获得以下内容 1 3 5 7 9 或者甚至可能是每三个元素 1 4 7 10 基本上 我正在寻找一个函数来获取流的
  • 添加 2 个 BigDecimal 值 [重复]

    这个问题在这里已经有答案了 class Point BigDecimal x BigDecimal y Point double px double py x new BigDecimal px y new BigDecimal py vo
  • 将图像上传到服务器 PHP Android

    我现在迷失了尝试将图像上传到我的服务器 我可以在 Android 设备上拍照并获取我的位置 我有以下代码将文件上传到服务器 public Boolean postFunction File image String tag postFunc

随机推荐

  • 如何在 iOS 7 中让 NSTimer 在后台运行超过 180 秒?

    我已经尝试过 但在 iOS 7 和 Xcode 4 6 2 中工作时间不超过 180 秒 请帮我 UIBackgroundTaskIdentifier bgTask UIBackgroundTaskInvalid UIApplication
  • 存储对相机胶卷图像的引用 - Swift 4

    我有一个非常简单的要求 但显然超出了我的能力范围 我想做的就是允许用户从相机胶卷中选择图像 然后在我的应用程序中存储对该图像的 引用 然后 我可以在需要时从相机胶卷中加载图像 我不想复制图像并将其保存在其他地方 因为我觉得这会浪费手机上的空
  • 如何为 Go 服务器应用程序设置 Let's Encrypt

    我有自己的域 其中包含用 Go 编写的 Web 服务 我使用内置的 Go Web 服务器 前面没有 Nginx 或 Apache 我想开始通过 HTTPS 提供服务 并且我意识到 Let s Encrypt 即将成为实现这一目标的方法 谁能
  • 为什么 C++17 中的全局内联变量和静态内联成员需要防护?

    从 C 17 开始 可以使用以下命令初始化标头中的全局变量和静态成员inline关键词 虽然我理解为什么函数中的静态变量需要受到保护 因为即使在多线程上下文中初始化也应该只发生一次 但我不明白为什么这些新的内联变量也受到保护 您可以在这里看
  • 使用实体框架数据模型添加验证属性

    前言 2015 年 2 月如果您仍在使用实体框架 EDMX 请帮自己一个忙 并使用实体框架代码优先进行结账 不同之处在于 您的表是从模型类创建的 而不是在 EDMX 中 模型类是使用表创建的 这是一个更简单的解决方案 而且这个问题中的问题甚
  • 如何从exe中找出目标框架名称和版本?

    我有一些使用 net Framework 4 5 或 net core 2 1 或 net core 3 1 创建的 exe 文件 我想仅使用 C 应用程序从此 DLL 获取框架名称和版本信息 我在下面编写了一段代码 该代码非常有用 并且适
  • 使用 Nodejs 和 Express 进行视频流传输

    我正在尝试使用nodejs 和express 将视频流式传输到html5 视频播放器 据我所知 很多人以前都这样做过 但是很少有人使用过express 在我发现的情况下 大多数人说这样做 var express require expres
  • EBCDIC 十六进制字符串的 Python 字节表示

    我有一个十六进制字符串 Hex E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B 作为字节对象 它看起来像这样 b xe
  • 如何将 Char 转换为 Int?

    所以我有一个String看起来像的整数 82389235 但我想迭代它以将每个数字单独添加到MutableList 然而 当我按照我认为的方式处理它时 var text 82389235 for num in text numbers ad
  • JavaScript 中的“name”关键字是什么?

    当我输入这段看似无辜的代码片段时 values name gedit 突出显示name作为关键字 然而 name未由链接到的页面列出关于保留关键字问题的答案 https stackoverflow com questions 26255 r
  • 检查文件中是否存在一行

    如何检查文件中是否存在一行 如果该行不存在 我还想将该行写入该文件 这是我目前的尝试 logfile open ip log a while 1 line logfile readline line replace n print line
  • 定义派生类型数组

    我正在尝试使用参数声明初始化派生类型 当我编译时 出现以下错误 1 处的 INTEGER 4 数组构造函数中的元素是 CHARACTER 1 用户定义的种类值ip and dp被发现于fasst global 他们是 integer par
  • WCF服务超时

    我有一个公开 wcf 服务的插件 如果我使用 WCStorm 测试此服务 一切正常 我立即得到答复 当我尝试使用加载插件的应用程序中的服务时 我会超时 ProgrammingMaster ServiceClient aClient new
  • 类型错误:中间件不是函数

    我正在尝试在我的reactjs 应用程序中应用redux 由于这些错误 我无法继续 我确信我已经安装了我需要的所有依赖项 这是我的 package json 的相关部分 dependencies react redux 5 0 6 redu
  • 安装其他package.json依赖项

    简单的问题 是否可以在 package json 中引用另一个 package json 并安装其依赖项 谢谢 是的 这是可能的 并且这是由以下自动完成的npm install 如果你有pkg a这取决于pkg b 包括pkg a在您的依赖
  • 在 python 中快速/优化 N-gram 实现

    python 中哪种 ngram 实现速度最快 我试图分析 nltk 与 scott 的 zip http locallyoptimal com blog 2013 01 20 elegant n gram Generation in py
  • Pygame-旋转精灵并同时跟随路径

    我正在尝试制作一个被抛出的球的动画 我希望它旋转并同时遵循平滑的抛物线路径 然而 我似乎无法得到pygame transform rotate 要合作 到目前为止 这是我尝试过的 import pygame screen pygame di
  • MySQLi 更新准备好的语句不更新数据库

    所以我有这个更新语句 当我转储 POST 变量时 我得到了我想要的输出 stmt dbConnectionW gt prepare UPDATE members SET fname mysqli real escape string dbC
  • 如何在 VS Code 中从命令行打开远程文件夹?

    我可以使用以下命令启动 VS Code 打开本地文件夹code path to folder 是否可以通过在命令行上指定计算机和文件夹来打开远程计算机上的文件夹 通过远程 SSH 扩展 从 Linux 或 Mac 终端上的 cli code
  • 在构建时从 Gradle 设置静态变量

    我有一个 Android 项目 在 git 下管理 Git 有 2 个分支 还有更多 但重要的是那两个 branch a 和branch b 是否可以设置 gradle 来确定项目是从哪个分支构建的并设置public static Stri