Gradle 高级构建插件:无法调用 canRead()?

Gradle Advanced Build Plugin: Cannot invoke canRead()?

我正在尝试在我的应用程序中使用 Gradle Advanced Build Version Plugin。我按照 GitHub 页面中的描述进行了操作:

  1. 我在我的应用中添加了这段代码 build.gradle:

    buildscript {
      repositories {
          jcenter()
      }
    
      dependencies {
          classpath 'org.moallemi.gradle.advanced-build-version:gradle-plugin:1.5.0'
      }
    }
    apply plugin: 'org.moallemi.advanced-build-version'
    
  2. 然后,在同一个文件的末尾,我这样配置 advancedVersioning

    advancedVersioning {
        outputOptions {
            renameOutput true
            nameFormat '${projectName}-${buildType}-${versionName}'
        }
    }
    

但是,当我 Generate a Signed APK 时,我在执行 :app:assembleRelease 任务时出错:

Error:

02:06:47.075 [ERROR] [org.gradle.BuildExceptionReporter] 
02:06:47.076 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE:
Build failed with an exception. 
02:06:47.076 [ERROR] [org.gradle.BuildExceptionReporter] 
02:06:47.077 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
02:06:47.077 [ERROR] [org.gradle.BuildExceptionReporter] A problem occurred
configuring project ':app'.
02:06:47.077 [ERROR] [org.gradle.BuildExceptionReporter]
Cannot invoke method canRead() on null object
02:06:47.078 [ERROR] [org.gradle.BuildExceptionReporter] 
02:06:47.078 [ERROR] [org.gradle.BuildExceptionReporter] * Try: 
02:06:47.078 [ERROR] [org.gradle.BuildExceptionReporter] Run with  --stacktrace option to
get the stack trace.

这是在 Android Studio 1.3 上使用 gradle 插件 1.2.3。我尝试将步骤 #1 中的代码移至项目的 build.gradle,但我仍然遇到相同的错误。

这似乎是一个导致 NullPointerException.

的简单错误

VersionCodeOptionsclass的versionPropsFile属性只在getVersionCodegetter.

初始化

但插件在调用 getVersionCode 之前尝试访问此 属性,因此收到一个空文件引用,当它检查是否 canRead().

解决方法非常简单:您需要做的就是在配置插件后立即对 getVersionCode getter 进行虚拟调用,如下所示:

项目中的build.gradle:

advancedVersioning {
    nameOptions {
    }
    codeOptions {
        versionCodeType VersionCodeType.AUTO_INCREMENT_ONE_STEP
        dependsOnTasks 'release'
    }
}

println advancedVersioning.versionCode

通过打印版本代码,我正在调用 getter,从而创建文件对象。