我需要写一个gradle脚本来在每次提交时自动版本化我的应用程序。我还需要在测试人员的应用程序中包含提交散列作为参考。
我对自动版本控制通常的工作方式感到困惑。有人可以解释自动归因过程吗?
将以下代码添加到build.gradle
def gitCommitHash = 'git rev-parse --verify --short HEAD'.execute().text.trim()
defaultConfig{
... otherConfigs
buildConfigField("String", "GIT_HASH", "\"${gitCommitHash}\"")
}
现在你可以通过BuildConfig.GIT_HASH
来获取git哈希
玩得高兴
一个理想的解决方案是从项目的git状态中获取版本。这样,版本控制就不依赖于你记住增加一个变量,或者改变gradle或config文件中的任何文本。另一个优点是版本名和代码到一个特定代码状态的可追溯性。
你可以在http://ryanharter . com/blog/2013/07/30/automatic-versioning-with-git-and-grad le/找到一个描述性的例子
这个想法是使用getVersionName函数获取git信息,并在gradle脚本中使用该函数:
/*
* Gets the version name from the latest Git tag
*/
def getVersionName = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
kts:
val gitDescribe: String by lazy {
val stdout = ByteArrayOutputStream()
rootProject.exec {
commandLine("git", "describe", "--tags")
standardOutput = stdout
}
stdout.toString().trim()
/* 'g' doesn't belong to the commit id and stands for 'git'
v0.1.9-1-g3a259e0 -> v0.1.9-1-3a259e0
if you like this to be removed then */
//.replace("-g", "-")
}
当然,您需要有可用的命令行git(因为将执行命令git描述--tags
以生成信息)。
另一种方法(也基于从git获取版本信息)可以将该逻辑外部化到gradle插件中-例如:
要使用的版本取决于您要应用哪种版本控制策略。
我遇到了类似的问题,但是不想修改versionName来包含git散列。我们希望保持类似于1.2.2的版本,但是仍然有可能在UI中显示git散列。
我在这里修改了另一个答案中的代码,以使用buildConfigField任务生成可在Java代码中引用的BuildConfig.GitHash值。
在模块的 build.gradle 文件的 android
部分上方添加以下内容:
def getGitHash = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = stdout
}
return stdout.toString().trim()
}
然后将以下行添加到构建的android
部分的defaultConfig
。gradle,即版本名
下方:
buildConfigField "String", "GitHash", "\"${getGitHash()}\""
这将在自动生成的BuildConfig中生成以下行。java文件:
// Fields from default config.
public static final String GitHash = "e61af97";
现在,您可以使用BuildConfig.gitshash
在Java代码中获得git哈希。
null null 结果(只是基于我的例子): 我们不需要在每个模块中添加相同的代码行。 大多数项目只与依赖项列表有区别。 我试图用Gralde KTS复制同样的东西,并收到以下困难: null null 其他链接: 插件应用的Gradle KTS问题。 共享常数提取的Gradle KTS问题。
我也发现过类似的问题,但没有一个问题对我想做的事情很有效。我正在用Android Studio和gradle进行开发,我的构建文件中有几种口味,每种都有一个版本名。有没有办法在APK文件中包含味道的版本名?
问题内容: 我参与了一个将项目从Oracle迁移到MySQL的项目。在Oracle中,当通过命令行运行批处理时,我能够创建一个引用或包含其他外部SQL脚本文件的SQL脚本。我有一个名为CreateAllTables.sql的脚本,在内部看起来像这样: 我已经知道MySQL命令行“源”命令,但是我的目标是通过一个命令行调用来调用一个包含其他脚本的主.sql脚本文件,如下所示: 所以我的问题是我该如何
我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g
我在中使用了,但在探索外部库时,我看到了两个版本的support-v4库(23.3.0和24.0.0)。我如何找到哪个依赖项使用了Support-V4:24.0.0库?我如何强制gradle只添加23.3.0版本? 这是我在build.gradle中的依赖项列表: 我使用来避免其他人添加支持库但未发生任何更改。
我正在尝试编译一个APK,它在一个JAR文件中使用一个遗留库。 我已经做了其他的问题,但没有一个对我有帮助:1、2、3和4。我甚至在github上发现了一个与我的痛苦gradle/gradle/issues/1184相关的未解决问题--没有列出本地文件依赖关系...这很糟糕,因为我花了很多时间思考文件依赖项没有被包括在内。 总之,这是我项目的build.gradle文件: 这是应用程序的构建.Gr