文章目录
实现每次重新构建项目后,自动将版本号
等信息写入release.xml
文件中
在根目录下 新建 common.gradle
//用来存放应用中的所有配置变量,统一管理,而不再是每个moudle里都自己写一份,修改起来更加的方便
ext {
android = [compileSdkVersion: 29,
buildToolsVersion: '29.0.0',
applicationId : 'com.hongx.gradle_project2',
minSdkVersion : 19,
targetSdkVersion : 29,
versionCode : 3,
versionName : '2.0.0',
versionInfo : 'App的第1个版本,上线了一些最基础核心的功能.',
multiDexEnabled : true,
manifestPlaceholders: [UMENG_CHANNEL_VALUE: 'yingyongbao']]
signConfigs = ['storeFile' : 'hongx.jks',
'storePassword': '123456',
'keyAlias' : 'hongx',
'keyPassword' : '123456']
java = ['javaVersion': JavaVersion.VERSION_1_7]
dependence = ['libAppcompat' : 'androidx.appcompat:appcompat:1.1.0',
'libConstraintlayout' : 'androidx.appcompat:appcompat:1.1.0']
}
在根目录下新建releaseinfo.gradle
import groovy.xml.MarkupBuilder
/**
* 描述:版本发布文档自动维护脚本
* 流程描述: 1、请求本次版本相关信息
* 2、将版本相关信息解析出来
* 3、将解析出的数据生成xml格式数据
* 4、写入到已有的文档数据中
**/
ext {
versionName = rootProject.ext.android.versionName
versionCode = rootProject.ext.android.versionCode
versionInfo = rootProject.ext.android.versionInfo
println("project cur versionName = ${versionName}")
destFile = file('releases.xml')
if (destFile != null && !destFile.exists()) {
destFile.createNewFile()
}
}
task writeTask {
inputs.property('versionCode', this.versionCode)
inputs.property('versionName', this.versionName)
inputs.property('versionInfo', this.versionInfo)
outputs.file this.destFile
doLast {
//将输入的内容写入到输出文件中去
def data = inputs.getProperties()
File file = outputs.getFiles().getSingleFile()
def versionMsg = new VersionMsg(data)
//将实体对象写入到xml文件中
def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw)
if (file.text != null && file.text.size() <= 0) {
//没有内容
xmlBuilder.releases {
release {
versionCode(versionMsg.versionCode)
versionName(versionMsg.versionName)
versionInfo(versionMsg.versionInfo)
}
}
//直接写入
file.withWriter { writer -> writer.append(sw.toString())
}
} else {
//已有其它版本内容
xmlBuilder.release {
versionCode(versionMsg.versionCode)
versionName(versionMsg.versionName)
versionInfo(versionMsg.versionInfo)
}
//插入到最后一行前面
def lines = file.readLines()
def lengths = lines.size() - 1
file.withWriter { writer ->
lines.eachWithIndex { line, index ->
if (index != lengths) {
writer.append(line + '\r\n')
} else if (index == lengths) {
writer.append('\r\r\n' + sw.toString() + '\r\n')
writer.append(lines.get(lengths))
}
}
}
}
}
}
class VersionMsg {
String versionCode
String versionName
String versionInfo
}
//task readTask {
// //指定输入文件为上一个task的输出
// inputs.file this.destFile
// doLast {
// //读取输入文件的内容并显示
// def file = inputs.files.singleFile
// println file.text
// }
//}
//
//task taskZ {
// dependsOn writeTask, readTask
// doLast {
// println '输入输出任务结束'
// }
//}
this.project.afterEvaluate { project ->
def buildTask = project.tasks.getByName('build')
if (buildTask == null) {
throw GradleException('the build task is not found')
}
buildTask.doLast {
writeTask.execute()
}
}
根目录下的build.gradle文件中引入common.gradle
apply from: this.file('common.gradle')
app的build.gradle文件中引入releaseinfo.gradle
apply plugin: 'com.android.application'
apply from: this.rootProject.file('releaseinfo.gradle')
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
multiDexEnabled rootProject.ext.android.multiDexEnabled //突破应用方法数65535的一个限制
manifestPlaceholders = rootProject.ext.android.manifestPlaceholders
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
//为应用程序添加第三方库依赖
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation rootProject.ext.dependence.libAppcompat
implementation rootProject.ext.dependence.libConstraintlayout
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
执行
./gradlew build
命令
这样每次就自动将版本信息写入到release.xml文件中