And*_*ltz 26 gradle android-gradle-plugin
我在gradle中定义一个任务:
task releaseCandidate(type: Exec) {
commandLine 'git', 'checkout', 'develop'
// Increment version code in Manifest
String manifest = new File('AndroidManifest.xml').getText('UTF-8')
Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
Matcher matcher = pattern.matcher(manifest)
matcher.find()
int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
manifest = manifest.replaceAll(
"android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
)
new File('AndroidManifest.xml').write(manifest, 'UTF-8')
commandLine 'git', 'diff'
}
Run Code Online (Sandbox Code Playgroud)
只有当我明确地将其称为时,我才想执行它gradle releaseCandidate
.但是,当我运行任何其他任务时,例如gradle assembleDebug
,它还会运行任务releaseCandidate.我不希望这种行为发生.没有任务取决于releaseCandidate,反之亦然.
我的项目是一个Android应用程序,所以我使用的是android
gradle插件.
Opa*_*pal 51
一个常见的陷阱.向任务添加操作,否则代码将在配置阶段运行.带动作的示例任务:
task sample << {
}
Run Code Online (Sandbox Code Playgroud)
正如我所见,您宁愿需要编写自定义任务而不是使用Exec
类型.我想commandLine
两次定义是无效的.
编辑
您可以阅读这篇文章,以了解一切如何运作.
Leo*_*ngs 17
您正在混合任务配置和groovy代码.作为任务定义主体一部分的所有内容都将在配置阶段执行.这task task1 << { code }
是一个简写
task task1 {
doLast {
code
}
}
Run Code Online (Sandbox Code Playgroud)
commandLine
是Exec Task的一部分,但是你的其他代码不是并且应该被包装成一个,doLast
它将首先执行命令行,然后执行你的附加代码.如果你需要另一个执行官commandLine
那么你将需要另一个任务.
task releaseCandidate(type: Exec) {
commandLine 'git', 'checkout', 'develop'
doLast {
// Increment version code in Manifest
String manifest = new File('AndroidManifest.xml').getText('UTF-8')
Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
Matcher matcher = pattern.matcher(manifest)
matcher.find()
int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
manifest = manifest.replaceAll(
"android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
)
new File('AndroidManifest.xml').write(manifest, 'UTF-8')
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11630 次 |
最近记录: |