更新Studio 3.4后,无法为自变量找到方法leftShift()

时间:2019-04-22 10:43:45

标签: android gradle groovy android-gradle build.gradle

在将Studio 3.4和Gradle版本更新为5.1.1之后,我在执行任务时遇到了错误,因为找不到方法leftShift()

我的任务:

task incrementBetaVersion << {
    println("Incrementing Beta Version Number...")
    incrementVersionNumber('BetaVersionNumber')
    println("Incrementing Beta Version Number...")
    incrementVersionName('BetaVersionName')
}

该行中的左移位运算符<<出现错误。

如何解决此错误?

5 个答案:

答案 0 :(得分:15)

要解决此错误,请更改如下代码。

task incrementBetaVersion  {
    doLast {
        println("Incrementing Beta Version Number...")
        incrementVersionNumber('BetaVersionNumber')
        println("Incrementing Beta Version Number...")
        incrementVersionName('BetaVersionName')
    }
}

左shitf运算符表示doLast { }

更多信息在这里: https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614

答案 1 :(得分:7)

  

<<(LeftShift())运算符在4.x Gradle中已弃用,在5.x Gradle版本中已删除。

用于解决Could not find method leftShift() for arguments on task of type org.gradle.api.DefaultTask

只需从任务中删除“ <<”并在doLast{}中添加方法

引用https://discuss.gradle.org/t/could-not-find-method-leftshift-for-arguments-on-task-of-type-org-gradle-api-defaulttask/30614/2

答案 2 :(得分:5)

解决此错误非常简单。

只需将<<替换为doLast

请参阅下面的更新代码,今天我已修复了我的cordova Android项目。

task cdvPrintProps {
   doLast {
       println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
       println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
       println('cdvVersionCode=' + cdvVersionCode)
       println('cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit)
       println('cdvMinSdkVersion=' + cdvMinSdkVersion)
       println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
       println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
       println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
       println('cdvBuildArch=' + cdvBuildArch)
       println('computedVersionCode=' + android.defaultConfig.versionCode)
       android.productFlavors.each { flavor ->
           println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
       }
   }
}

答案 3 :(得分:3)

之所以发生,是因为“左移”运算符已被doLast {}取代。

<< has deprecated in 4.x and removed in 5.0 version

现在您必须更改代码:

task incrementBetaVersion << {
    println("Incrementing Beta Version Number...")
    incrementVersionNumber('BetaVersionNumber')
    println("Incrementing Beta Version Number...")
    incrementVersionName('BetaVersionName')
}

task incrementBetaVersion  {
    doLast {
        println("Incrementing Beta Version Number...")
        incrementVersionNumber('BetaVersionNumber')
        println("Incrementing Beta Version Number...")
        incrementVersionName('BetaVersionName')
    }
}

答案 4 :(得分:0)

我在使用MockMaker模拟非最终类的Kotlin项目中遇到此错误。

解决方案是将旧语法更改为新语法:

task createTestResources {
    description = "Allows Mocking non-final classes and data classes in a Kotlin project"
    doLast {
        def mockMakerFile = new File("$projectDir/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker")
        if (System.env.MOCK_MAKER != null) {
            logger.info("Using MockMaker ${System.env.MOCK_MAKER}")
            mockMakerFile.parentFile.mkdirs()
            mockMakerFile.createNewFile()
            mockMakerFile.write(System.env.MOCK_MAKER)
        } else {
            logger.info("Using default MockMaker")
        }
    }
}

请注意,有些事情已经改变,例如包括doLast块,以及从任务签名中删除<<。现在对我有用。希望它也对您有用:-)