Android Gradle高级生成插件:无法调用canRead()?

Android Gradle高级生成插件:无法调用canRead()?,android,android-studio,gradle,android-gradle-plugin,Android,Android Studio,Gradle,Android Gradle Plugin,我正在尝试在我的应用程序中使用。我按照GitHub页面中的描述做了: 我在应用程序的build.gradle中添加了以下代码: buildscript { repositories { jcenter() } dependencies { classpath 'org.moallemi.gradle.advanced-build-version:gradle-plugin:1.5.0' } } apply plugin: 'org.moallemi.ad

我正在尝试在我的应用程序中使用。我按照GitHub页面中的描述做了:

  • 我在应用程序的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'
    
  • 然后,在同一个文件的末尾,我配置了
    advancedVersioning
    ,如下所示:

    advancedVersioning {
        outputOptions {
            renameOutput true
            nameFormat '${projectName}-${buildType}-${versionName}'
        }
    }
    
  • 但是,当我
    生成签名的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
    的简单错误

    VersionCodeOptions
    类的
    versionPropsFile
    属性仅在
    getVersionCode
    getter中初始化

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

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

    advancedVersioning {
        outputOptions {
            renameOutput true
            nameFormat '${projectName}-${buildType}-${versionName}'
        }
    }
    
    在项目的构建中。gradle:

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

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

    1.5.1版修复了这个问题issue@moallemi我在1.5.1I中遇到了同样的问题,我想补充一点,如果您也更改了版本代码的行为方式,那么您应该已经使用类似于
    def appVersionCode=advancedVersioning.versionCode
    ,然后设置
    versionCode appVersionCode
    ,在这种情况下,
    println
    语句中不需要