android - Gradle 高级构建插件 : Cannot invoke canRead()?

标签 android android-studio gradle android-gradle-plugin

我正在尝试使用 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}'
        }
    }
    

但是,当我生成签名 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.

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

最佳答案

这似乎是一个导致 NullPointerException 的简单错误。

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

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

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

在项目的build.gradle中:

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

println advancedVersioning.versionCode

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

关于android - Gradle 高级构建插件 : Cannot invoke canRead()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867408/

相关文章:

android - 如何将一个lib结构复杂的Eclipse workspace导入到Android Studio中?

android - 如何从sdcard获取位图

android - 如何编写模拟 GPS 位置的 Espresso 测试并在 Google TeSTLab 中使用它们?

Android:如何在 Activity 中启动/创建布局之前执行方法

gradle - 如何向 flyway build.gradle 文件添加参数?

android - 将 Gradle 从 3.3 降级到 2.14.1

android - 营养数据谷歌适合

Android Studio - 与 Android Studio 配合良好的图像处理库

java - 根据我当前的位置每秒更新 TextView

java - Android Studio : Java or XML issue?