android - 如何使用 Gradle 对您的 Android 应用程序代码进行版本控制
问题描述
在你的 build.gradle (:app)
我使用 Gradle 6.5 和插件 4.13
android {
compileSdkVersion 30
def _versionCode=1
def versionPropsFile = file('version.properties')
Properties versionProps = new Properties()
if(versionPropsFile.exists())
versionProps.load(new FileInputStream(versionPropsFile))
def _patch = (versionProps['PATCH'] ?: "0").toInteger() + 1
def _major = (versionProps['MAJOR'] ?: "0").toInteger()
def _minor = (versionProps['MINOR'] ?: "0").toInteger()
List<String> runTasks = gradle.startParameter.getTaskNames()
def value = 0
for (String item : runTasks)
if ( item.contains("assembleRelease")) {
value = 1
}
_versionCode = (versionProps['VERSION_CODE'] ?: "0").toInteger() + value
if(_patch==99999)
{
_patch=0
_minor=_minor+1
}
if(_major==99){
_major=0
_major=_major+1
}
versionProps['MAJOR']=_major.toString()
versionProps['MINOR']=_minor.toString()
versionProps['PATCH']=_patch.toString()
versionProps['VERSION_CODE']=_versionCode.toString()
versionProps.store(versionPropsFile.newWriter(), null)
def _versionName = "${_major}.${_versionCode}.${_minor}.${_patch}"
defaultConfig {
applicationId "za.co.zone.cupio"
minSdkVersion 26
targetSdkVersion 30
versionCode _versionCode
versionName _versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments += [
"room.schemaLocation" : "$projectDir/schemas".toString(),
"room.incremental" : "true",
"room.expandProjection": "true"]
}
}
}
//the rest of "android {}"
}
然后您访问 EG 中的变量 versionCode 和 versionName。分段
val versionName: String = BuildConfig.VERSION_NAME
val displayVersion = "Version : $versionName"
// update layout !
version.text = displayVersion
version.properties
将在 {appfolder}\app 中创建一个文件,该文件可能如下所示:
#Sun Apr 11 14:03:56 CAT 2021
MAJOR=1
MINOR=0
VERSION_CODE=1
PATCH=313
Android 商店不喜欢版本代码 < 1 因此确保 VERSION_CODE=1 任何值都可以工作 < 0 结果将显示为版本:1.1.0.313
解决方案
推荐阅读
- php - 有没有办法加快包含 PHP 的 HTML 页面的加载时间?
- r - R 组合两个 For 循环(嵌套 For 循环)
- python - Python Jinja2循环索引使id唯一
- javascript - 有没有办法在现有的 HTML 元素中编写对象
- bluetooth - PS3 控制器和控制台配对如何工作?
- jenkins - 如何登录用户 Jenkins 管道
- redux - 从商店获取状态时,我得到一个对象而不是字符串
- android - Kotlin 错误:java.lang.RuntimeException:java.lang.reflect.InvocationTargetException
- sql-server-2008 - Codeigniter 插入数据 MSSQL
- c++ - leetcode中的c ++内存泄漏相加两个数字