android studio rcs,Android Studio Gradle Pre Build Step

问题

I would simply like to run a separate application (exe) prior to Gradle beginning the build progress. My goal is have my exe (already written) auto-gen a dependancy file containing a build number, which I display in the UI. All of the above is easy, but I know almost nothing of Gradle.

This question has been asked, but the answers are terse snippets of Gradle, using Gradle tasks, and do not explain much.

I want to use the same exe in different projects, so it takes a command argument to specify the location of the auto-gen file;

"buildnum.exe /someworkspace/someproject/somefolder/version.java"

How to I get this to run? I'm using a typical build.gradle script;

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:1.1.0'

}

}

allprojects {

repositories {

jcenter()

}

}

回答1:

You can use an Exec task:

task buildNum(type: Exec, description: 'My Build num exe') {

commandLine 'buildnum.exe',

'/someworkspace/someproject/somefolder/version.java'

}

tasks.withType(JavaCompile) {

compileTask -> compileTask.dependsOn buildNum

}

回答2:

Example to run some console commands:

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'])

}

回答3:

For those unfamiliar with Gradle (like me), at the bottom is the full build.gradle script for my Module so you can see where and how the tool is integrated, as again we were just given snippets. The Exec command runs the exe in the same folder as the build.grade file, so use relative paths to the tool and source.

This is VersionUtils.java, a source file in my Module which contains the BuildNum for the Module.

package ca.mmist;

public class VersionUtils

{

public static final int nSkyUtilsCRC = 1078887142;

public static final int nSkyUtilsBuild = 228;

}

What I really wanted was for the BuildNum to only increment when a dependancy changed requiring a build. So, I modified BuildNum.exe to find the 'src' folder in the VersionUtils.java, and then recursively scan each subfolder looking for .java;.xml;.jar;.lib and generate a CRC32 using the FileWriteTime and FileSize of each source file. So when I re-write VersionUtils.java (first into VersionUtils.~java) to increment the BuildNo, I compare the CRCs and if they are the same, I can simply discard the temp file. Otherwise I swap (delete and rename) the files, thereby causing a rebuild of my Module with a new BuildNo. (Sounds more painful than it was to code up in an hour.)

Anyway, now QA is happy they can validate precisely what build of the Software shipped without relying on a human to remember to modify the Version tags in the Manifest.

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')

}

来源:https://stackoverflow.com/questions/30439466/android-studio-gradle-pre-build-step

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值