一些Java 8功能在Android SDK 23中工作,而其他人则不知道?

时间:2017-11-08 15:58:53

标签: java android java-8

我在Android中构建了一个最小SDK版本24的演示应用程序。完成后,我被告知我们只有带有SDK 23的测试设备(我正在使用自己的设备进行开发)而且我需要降级。为此,我将app.gradle中的minSdkVersion从24更改为23.现在,我遇到了forEach的所有出现错误(正如预期的那样),但我仍然可以使用lambda表达式,即使这些也是Java 8功能。据我所知,我没有在我的项目中添加像Retrolambda这样的东西。

这是我的app.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.myfirm.rocketchatdemo"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:design:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    // RocketChat SDK
    compile('com.rocketchat.core:rocketchat-core:0.7.1') {
        exclude group: 'org.json', module: 'json'
    }
    // https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxandroid
    // Reactive Java
    compile group: 'io.reactivex.rxjava2', name: 'rxandroid', version: '2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.1'

    // Chat Kit
    // compile 'com.github.stfalcon:chatkit:0.2.2'

    // ChatMessageView
    compile 'com.github.bassaer:chatmessageview:1.3.5'

    // Google Firebase
    compile 'com.google.firebase:firebase-core:11.4.2'                        // this line must be included to integrate with Firebase
    compile 'com.google.firebase:firebase-messaging:11.4.2'
}

这对我来说非常困惑,要么两者都应该有效,要么两者都不行!此外,我的应用程序不再正常运行,我认为可能是一些残留的Java 8代码可能是导致这种情况的原因。这就是我如何偶然发现这一点。

我是否可能错过了一些配置才能将我的应用正确转换为SDK 23?

1 个答案:

答案 0 :(得分:4)

根据Supported Java 8 Language Features and APIs文档,Lambda表达式不需要某个minSdkVersion版本。

这也适用于:

  • Lambda表达式
  • 方法参考
  • 类型注释(仅限编译时间)
  • 默认和静态接口方法
  • 重复注释