40

尝试使用带有架构组件和 Kotlin 的 Android Studio 3 Canary 5 构建示例会给出此警告。

谁能告诉我原因?

谢谢, 欧维

编辑#1:这是 Dan Lew 前段时间制作的样本

https://github.com/dlew/android-architecture-counter-sample

构建.gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 25
    buildToolsVersion rootProject.ext.buildToolsVersion
    defaultConfig {
        applicationId "net.danlew.counter"
        minSdkVersion 23
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:recyclerview-v7:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:design:${rootProject.ext.supportLibVersion}"
    compile "com.android.support:cardview-v7:${rootProject.ext.supportLibVersion}"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    compile "android.arch.lifecycle:extensions:${rootProject.archLifecycleVersion}"
    compile "android.arch.persistence.room:runtime:${rootProject.archRoomVersion}"
    compile "android.arch.persistence.room:rxjava2:${rootProject.archRoomVersion}"
    kapt "android.arch.lifecycle:compiler:${rootProject.archLifecycleVersion}"
    kapt "android.arch.persistence.room:compiler:${rootProject.archRoomVersion}"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    String butterKnifeVersion = '8.5.1'
    compile "com.jakewharton:butterknife:$butterKnifeVersion"
    kapt "com.jakewharton:butterknife-compiler:$butterKnifeVersion"

    compile 'io.reactivex.rxjava2:rxjava:2.1.0'

    String daggerVersion = '2.10'
    compile "com.google.dagger:dagger:$daggerVersion"
    kapt "com.google.dagger:dagger-compiler:$daggerVersion"

    String rxBindingVersion = '2.0.0'
    compile "com.jakewharton.rxbinding2:rxbinding:$rxBindingVersion"
    compile "com.jakewharton.rxbinding2:rxbinding-kotlin:$rxBindingVersion"

    compile 'com.jakewharton.timber:timber:4.5.1'

    compile 'com.jakewharton.rxrelay2:rxrelay:2.0.0'
}

repositories {
    mavenCentral()
}
4

2 回答 2

27

有一个 Java 8 注释处理器,现在拱组件是稳定的,所以替换:

"android.arch.lifecycle:compiler:${rootProject.archLifecycleVersion}"

"android.arch.lifecycle:common-java8:1.0.0"
于 2017-11-06T22:09:53.053 回答
19

只需添加此答案以供将来参考:不久前 Android Arch 组件团队也提出了同样的问题,目前的官方答案是:

(...) 这只是一个警告。应该不是问题。

这适用于遵循问题标题中提到的格式的警告,包括:

w:警告:注释处理器'android.arch.lifecycle.LifecycleProcessor'支持的源版本'RELEASE_7'低于-source'1.8' w:

w:警告:注释处理器'android.arch.persistence.room.RoomProcessor'支持的源版本'RELEASE_7'低于-source'1.8' w:

基本上,它javac通知您这些注释处理器是针对与您的模块的源级别设置为(Java 8)不同(旧)版本的 Java(Java 7)编译并生成代码的。这样做的原因是编译器不能做出任何保证处理器将仍然正常运行的承诺[但在这种特殊情况下开发人员可以并且确实做到了]。

-Xlint请注意,如果您删除编译器标志,仍然会发出警告,因此-nowarn遗憾的是无法抑制使用它。

于 2017-10-20T07:53:34.043 回答