我只想在Gradle开始构建进度之前运行一个单独的应用程序(exe)。我的目标是让我的exe(已经编写)自动生成一个包含内部版本号的依赖文件,我在UI中显示。以上所有内容都很简单,但我对Gradle几乎一无所知。
这个问题已被提出,但答案是Gradle的简洁片段,使用Gradle任务,并没有解释太多。
我想在不同的项目中使用相同的exe,因此需要一个命令参数来指定auto-gen文件的位置;
“buildnum.exe /someworkspace/someproject/somefolder/version.java”
如何让它运行?我正在使用典型的build.gradle脚本;
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
答案 0 :(得分:3)
您可以使用Exec任务:
task buildNum(type: Exec, description: 'My Build num exe') {
commandLine 'buildnum.exe',
'/someworkspace/someproject/somefolder/version.java'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNum
}
答案 1 :(得分:1)
运行某些控制台命令的示例:
task cleanApks(type: Delete) { sdkUpdate() } def sdkUpdate() { println executeSdkCommand('javac -version') println executeSdkCommand('android list sdk --all') } String executeSdkCommand(String cmd) { new ByteArrayOutputStream().withStream { os -> ExecResult result = exec { executable = 'cmd' workingDir = "${System.getenv("ANDROID_HOME")}/tools" args = ['/c', cmd] standardOutput = os } return os.toString() } } dependencies { cleanApks.dependsOn 'clean' compile fileTree(dir: 'libs', include: ['*.jar']) }
答案 2 :(得分:1)
对于那些不熟悉Gradle的人(像我一样),底部是我的模块的完整build.gradle脚本,这样你就可以看到工具的集成位置和方式,我们刚刚给出了片段。 Exec命令在与build.grade文件相同的文件夹中运行exe,因此请使用工具和源的相对路径。
这是VersionUtils.java,我的模块中的源文件,其中包含模块的BuildNum。
package ca.mmist;
public class VersionUtils
{
public static final int nSkyUtilsCRC = 1078887142;
public static final int nSkyUtilsBuild = 228;
}
我真正想要的是BuildNum仅在需要构建的依赖性发生变化时才会增加。因此,我修改了BuildNum.exe以找到VersionUtils.java中的'src'文件夹,然后递归扫描每个子文件夹,查找 .java; .xml; .jar; .lib并使用每个源文件的FileWriteTime和FileSize生成CRC32。因此,当我重新编写VersionUtils.java(首先进入VersionUtils .~java)来增加BuildNo时,我比较了它们,如果它们是相同的,我可以简单地丢弃临时文件。否则我交换(删除并重命名)文件,从而导致使用新的BuildNo重建我的模块。 (听起来比在一小时内编码更痛苦。)
无论如何,现在QA很高兴他们可以准确地验证软件的构建版本,而不依赖于人来记住修改Manifest中的Version标签。
apply plugin: 'com.android.library'
android {
compileSdkVersion 16
buildToolsVersion "19.1.0"
task buildNum(type: Exec, description: 'BuildNum.exe') {
commandLine '../../../Tools/Bin/buildnum.exe', 'src/main/java/ca/mmist/VersionUtils.java'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNum
}
defaultConfig {
minSdkVersion 10
targetSdkVersion 16
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:18.+'
compile files('libs/maplink.jar')
}