【问题标题】:Gradle fails sync when realm-gradle-plugin:1.0.0 added to Android Studio project当 realm-gradle-plugin:1.0.0 添加到 Android Studio 项目时,Gradle 同步失败
【发布时间】:2016-10-12 10:56:24
【问题描述】:

首先,由于这是我的第一个问题,我想向大家问好。这个社区很棒,每次我编码时,我在这里找到的答案都会对我有所帮助。这次不行。

所以,我正在为 Android 编写小应用程序,是时候添加数据库层了。为此,我已经通过 realm installation guide 并添加到我的项目 build.gradle 行:

classpath "io.realm:realm-gradle-plugin:1.0.0"

然后到我的应用模块build.gradle

apply plugin: 'realm-android'

但我的问题从这里开始。在添加这两行之前,gradle 正在同步并成功构建项目,但在添加两行之后,它无法同步并出现错误消息:

错误:在任务 ':app:compileDebugJavaWithJack' 上找不到属性 'options'。

事件日志显示:

17:24:48 Gradle 同步开始
17:24:50 Gradle 同步失败:在任务 ':app:compileDebugJavaWithJack' 上找不到属性 'options'。 有关详细信息,请参阅 IDE 日志(帮助 | 显示日志)

我尝试过 ./gradlew clean 但它没有改变任何东西,也没有在我的主目录中删除 .gradle 并让 Android Studio 从头开始​​处理依赖项.

这是我项目的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath "io.realm:realm-gradle-plugin:1.0.0"
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

还有我的应用模块的build.gradle

apply plugin: 'com.android.application' //
apply plugin: 'realm-android'

android {
    compileSdkVersion 23
    //compileSdkVersion 'android-N'
    //buildToolsVersion "23.0.3"
    buildToolsVersion "24.0.0-rc4"

    defaultConfig {
        applicationId "agh.jitp2.quizzy"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile 'org.assertj:assertj-core:3.4.1'
    testCompile 'org.mutabilitydetector:MutabilityDetector:0.9.5'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:support-v4:23.4.0'
}

您对我有什么提示可以使这个项目得以构建吗?

提前感谢我的英语。

编辑:
@cricket_007:以上是我在消息窗口和事件日志中得到的信息。 Gradle 控制台为空。但是当我在带有 --info 标志的应用模块 build.gradle 上运行 build 时,我得到以下输出:

[...]
开始构建
使用设置文件“C:_Dev_Repos\AGH\Quizzy\settings.gradle”评估设置。
已加载项目。使用构建文件“C:_Dev_Repos\AGH\Quizzy\build.gradle”的根项目。
包含的项目:[根项目'Quizzy',项目':app']
使用构建文件“C:_Dev_Repos\AGH\Quizzy\build.gradle”评估根项目“Quizzy”。
使用构建文件“C:_Dev_Repos\AGH\Quizzy\app\build.gradle”评估项目“:app”。
创建配置编译
创建配置apk
提供创建配置
创建配置 wearApp
创建配置 androidTestCompile
创建配置 androidTestApk
创建配置 androidTestProvided
创建配置 androidTestWearApp
创建配置 testCompile
创建配置 testApk
创建配置 testProvided
创建配置 testWearApp
创建配置调试编译
创建配置 debugApk
创建配置 debugProvided
创建配置 debugWearApp
创建配置 testDebugCompile
创建配置 testDebugApk
创建配置 testDebugProvided
创建配置 testDebugWearApp
创建配置发布编译
创建配置 releaseApk
创建配置发布提供
创建配置 releaseWearApp
创建配置 testReleaseCompile
创建配置 testReleaseApk
创建配置 testReleaseProvided
创建配置 testReleaseWearApp
解析 SDK,不允许缓存
解析 C:_Dev\Android\SDK\add-ons\addon-google_apis-google-23\package.xml
解析 C:_Dev\Android\SDK\build-tools\23.0.3\package.xml
解析 C:_Dev\Android\SDK\build-tools\24.0.0-preview\package.xml
解析 C:_Dev\Android\SDK\docs\package.xml
解析 C:_Dev\Android\SDK\extras\android\m2repository\package.xml
解析 C:_Dev\Android\SDK\extras\google\m2repository\package.xml
解析 C:_Dev\Android\SDK\extras\google\usb_driver\package.xml
解析 C:_Dev\Android\SDK\extras\intel\Hardware_Accelerated_Execution_Manager\package.xml
解析 C:_Dev\Android\SDK\platform-tools\package.xml
解析 C:_Dev\Android\SDK\platforms\android-23\package.xml
解析 C:_Dev\Android\SDK\platforms\android-N\package.xml
解析 C:_Dev\Android\SDK\sources\android-23\package.xml
解析 C:_Dev\Android\SDK\system-images\android-23\google_apis\x86\package.xml
解析 C:_Dev\Android\SDK\tools\package.xml
在变体调试中禁用增量 Java 编译,因为您使用的是不兼容的插件
不使用增量 javac 编译。
增量 java 编译是一个孵化特性。
在变体 debugUnitTest 中禁用增量 Java 编译,因为您使用的是不兼容的插件
不使用增量 javac 编译。
由于您使用的是不兼容的插件,因此在变体版本中禁用了增量 Java 编译
不使用增量 javac 编译。
在变体 releaseUnitTest 中禁用增量 Java 编译,因为您使用的是不兼容的插件
不使用增量 javac 编译。

FAILURE:构建失败并出现异常。

  • 出了什么问题:
    配置项目 ':app' 时出现问题。
    > 在任务 ':app:compileDebugJavaWithJack' 上找不到属性 'options'。

  • 尝试:
    使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --debug 选项运行以获得更多日志输出。

    构建失败

【问题讨论】:

  • 你能显示完整的 Gradle 输出,而不仅仅是最终的错误消息吗?
  • 问题在于 Jack 编译器,而不是 Realm。至少不是直接的。 Realm 可能还不支持它
  • 作为参考,这里是 Butterknife 库的类似问题。 github.com/JakeWharton/butterknife/issues/571
  • @cricket 发现,JACK 无法编译领域,如 herehere 所述。要使用领域,我必须在应用的 build.gradle 中禁用 jack。而且由于禁用了 jack,我不得不重构代码中使用 java 1.8 lambdas 的每个地方。
  • 欢迎您在下面回答您的发现,而不是使用评论

标签: android android-studio gradle realm


【解决方案1】:
    jackOptions {
        enabled true
    }

JACK 当前不支持注解处理(用于在 Realm 中生成代理),但它也不生成 Realm 通过 Realm-Transformer 与 Javassist 一起使用的 class 文件(字节码操作)将所有字段访问转换为代理方法调用。

实际上是为了移除强制的 getter/setter。但随着这次更新,还提供了在 Realm Objects 上使用接口的能力,所以这是一个重要的步骤。

【讨论】:

    【解决方案2】:

    我在尝试使用 Realm 时也遇到了同样的问题,所以我所做的只是依赖 retro-lambda。这对我有用。

    buildscript {
      repositories {
         mavenCentral()
      }
    
      dependencies {
         classpath 'me.tatarka:gradle-retrolambda:3.2.5'
      }
    }
    
    // Required because retrolambda is on maven central
    repositories {
      mavenCentral()
    }
    
    apply plugin: 'com.android.application'
    apply plugin: 'realm-android'
    apply plugin: 'me.tatarka.retrolambda'
    
    android {
      compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-03
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多