2017-11-17 95 views
0

所以我相信这是一个非常愚蠢的错误,但我需要你的帮助,因为我不是一个gradle专家。自定义gradle任务即使在同步过程中也得到执行

任务: 从文件中读取versionCode将+1添加到它并保存回去。

task executeOrderSixtySix { 
def versionPropsFile = file('versionCodes.properties') 
if (versionPropsFile.canRead()) { 
    def Properties versionProps = new Properties() 

    versionProps.load(new FileInputStream(versionPropsFile)) 

    def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1 
    versionProps['DEV_VERSION'] = versionNumber.toString() 
    versionProps.store(versionPropsFile.newWriter(), null) 

    //  'assembleDebug' 

} else { 
    throw new GradleException("Nyeeeh on versionCodes.properties!") 
}} 

所以,当我必须做一个内部降我想先运行此任务,由1增加devVersion号码,然后运行“组装”任务建立的所有工件。

问题: 即使我只是同步摇篮文件,导致版本码始终增加,该任务也会执行。

我不想在同步期间增加versionCode,只为QAdrop开发版本,我还必须组装每个APK。

您能否帮我解决问题并告诉我为什么这个任务会被调用/执行以及谁能阻止它?

+0

我加入这一个临时解决办法,如果( 'executeOrderSixtySix' 在gradle.startParameter.taskNames){ ......},其工作正常,但我做的相信应该有更好的出路。 – Karoly

回答

1

您需要在任务块内有doLast块。 build.gradle文件是一个配置脚本,因此它在读取配置时声明任务并在执行时声明该操作。

任何在doLast块之前或之后的任务中都会在配置期间运行。 doLast块中的代码本身在执行时运行。

task executeOrderSixtySix { 
    doLast { 
     def versionPropsFile = file('versionCodes.properties') 
     if (versionPropsFile.canRead()) { 
      def Properties versionProps = new Properties() 

      versionProps.load(new FileInputStream(versionPropsFile)) 

      def versionNumber = versionProps['DEV_VERSION'].toInteger() + 1 
      versionProps['DEV_VERSION'] = versionNumber.toString() 
      versionProps.store(versionPropsFile.newWriter(), null) 

      //  'assembleDebug' 

     } else { 
      throw new GradleException("Nyeeeh on versionCodes.properties!") 
     } 
    } 
} 

编号:https://www.oreilly.com/learning/write-your-own-custom-tasks-in-gradle

+0

谢谢,会尝试。我可以从这里调用基本的构建任务?比如assembleDebug? – Karoly

+0

您可以使用dependsOn来定义此任务的依赖关系。如果你想在assembleDebug后面运行这个命令,那么你可以编写'task executeOrderSixtySix(dependsOn:assembleDebug)' – Emma

+0

我想先运行,所以这个任务增加了versionCode编号,并且assembleDebug会从文件中选择新的编号! – Karoly