错误:来自jar文件的Lambda需要在类路径上编译接口,未知接口是java.util.function.Function

时间:2017-04-10 10:31:15

标签: android gradle lambda java-8

我在写android项目。一些外部库需要使用Java8。但是,当我使用Jack添加Java8时,该项目无法识别Java8的组件。可能是什么问题?

apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.infiniteloop.android.translateyandex"
    minSdkVersion 19
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
    jackOptions {
        enabled true
    }
}
dexOptions {
    incremental true
}
packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}


buildscript {
tasks.withType(JavaCompile) {

 }
}


 configurations.all {
   resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'
 }
repositories {
  maven {
     url "https://jitpack.io"
  }
}
 dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    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:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.android.support:design:25.2.0'
    compile 'com.github.vbauer:yandex-translate-api:1.2.5'
    testCompile 'junit:junit:4.12'
  }

这是错误列表 Errorlist

2 个答案:

答案 0 :(得分:1)

您使用

multiDexEnabled true

将以上链接添加到AndroidManifest.xml:

android:name="android.support.multidex.MultiDexApplication" 

OR

MultiDex.install(this);

在自定义应用程序的attachBaseContext方法

或您的自定义应用程序扩展MultiDexApplication

并添加上面的

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

希望有所帮助。

答案 1 :(得分:0)

你可以使用this gradle插件来获取java 6,7和android中的java lambda支持

只需添加:apply plugin: 'me.tatarka.retrolambda' 您应用级别build.gradle文件中的一行,位于以下行:apply plugin: 'com.android.application'

现在在项目级别build.gradle add:

classpath 'me.tatarka:gradle-retrolambda:3.6.0'

在您的依赖项部分

EG:

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.0'
    classpath 'me.tatarka:gradle-retrolambda:3.6.0'
}

并同步它:)