简体   繁体   English

问题 build.gradle 和自定义任务

[英]Issue on build.gradle and custom task

In order to manage my build pipeline for Android app, I have added a task and custom functions in build.gradle to I can trigger an increment of the build version.为了管理 Android 应用程序的构建管道,我在build.gradle中添加了一个任务和自定义函数,以触发构建版本的增量。

For now, I have this file version.properties in the root project dir and I have added at the end of the build.gradle in the project dir, the below code:现在,我在根项目目录中有这个文件version.properties ,我在项目目录中的build.gradle末尾添加了以下代码:

Version.properties版本.properties

major = 0
minor = 4
patch = 0
build = 1

build.gradle build.gradle

def readVersion() {
    def versionFile = new File(project.rootDir, 'version.properties')
    def version = new Properties()
    def stream

    try {
        stream = new FileInputStream(versionFile)
        version.load(stream)
    } catch (FileNotFoundException ignore) {
    } finally {
        if (stream != null) stream.close()
    }

    if(!version['major']) version ['major'] = "0"
    if(!version['minor']) version ['minor'] = "0"
    if(!version['patch']) version ['patch'] = "0"
    if(!version['build']) version ['build'] = "0"

    return version
}

def getVersionCode() {
    def version = readVersion()
    def major = version['major']
    def minor = version['minor']
    def patch = version['patch']
    def build = version['build']

    return major * 1000000 + minor * 10000 + patch * 100 + build
}

def getVersionName() {
    def version = readVersion()
    return "v${version['major']}" +
            ".${version['minor']}" +
            ".${version['patch']}" +
            "-rc${version['build']}"
}

def incrementBuildNumber() {
    def versionFile = new File(project.rootDir, 'version.properties')
    def version = new Properties()

    def build = version['build']
    build = build+1
    version['build'] = build.toString

    def stream = new FileOutputStream(versionFile)
    try {
        version.store(stream, null)
    } finally {
        if (stream != null) stream.close()
    }
    //return build
}

task doBuildNumberIncrement() {
    incrementBuildNumber()
}

in the same build.gradle, I have:在同一个 build.gradle 中,我有:

ext {

    //Version
    versionCode = getVersionCode()
    versionName = getVersionName()

and I have added in the Fastfile the lane:我在 Fastfile 中添加了车道:

    desc "Build and release on firebase"
    lane :build_and_release_to_firebase do
        increment_version()
        develop_build(flavor: "MyFlavor")


   desc "Manage build version"
    lane :increment_version do
      gradle(task: "doBuildNumberIncrement")
    end

When I running locally the command with the cmd line fastlane build_and_release_to_firebase I am having the error below:当我在本地运行带有 cmd 行fastlane build_and_release_to_firebase的命令时,出现以下错误:


* Where:
Build file '/MyProject/build.gradle' line: 155

the line 155 is when I do build = build+1 in the incrementBuildNumber第 155 行是我在incrementBuildNumber中执行build = build+1

Any idea why?知道为什么吗? I try builld++ but same issue.我尝试builld++但同样的问题。

Thanks谢谢

because version object is empty and you'll get NullPointerException (null+1) at 155 because of that.因为version object 是空的,因此你会在 155 处得到 NullPointerException (null+1)。

you can call readVersion() function that you wrote before to create the version object ( or load from FileInputStream by using versionFile)您可以调用之前编写的readVersion() function 来创建版本 object(或使用 versionFile 从 FileInputStream 加载)

solution as below解决方案如下

  def incrementBuildNumber() {
    
        def versionFile = new File(project.rootDir, 'version.properties')
        def version = readVersion()
    
        def build = version['build']
        build = build + 1
        version['build'] = build.toString()
    
        def stream = new FileOutputStream(versionFile)
        try {
            version.store(stream, null)
        } finally {
            if (stream != null) stream.close()
        }
        //return build
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM