2016-12-24 10 views
1

自分のプロジェクトでJava 8を使用しようとしていますが、ラムダ式を使用すると不明な問題が発生します。Java 1.8、ジャック、ラムダを使ってAndroid gradleコンパイルが失敗する

例外: org.gradle.api.tasks.TaskExecutionException:実行タスクに失敗しました ':SLL:compileReleaseJavaWithJavac'。

原因: org.gradle.api.internal.tasks.compile.CompilationFailedException:コンパイルに失敗しました。私はラムダなしで実行したときに私のプロジェクトで間違っありません

作業以下このコードは完全に

act.runOnUiThread(new Runnable() { 
    public void run() { 
     // Alert dialog here 
    } 
}); 

しかし、ラムダを使用すると、失敗し、

act.runOnUiThread(()->{ 
    // Alert dialog here 
}); 

上記の例外がスローされますbuild.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 

    defaultConfig { 
     applicationId "..." 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 

     jackOptions { 
      enabled true 
     } 

    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    compileOptions { 
     targetCompatibility 1.8 // or JavaVersion.VERSION_1_8 
     sourceCompatibility 1.8 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:25.0.1' 
} 

何が起こっているのか分かりません。

ありがとうございます!

+0

使用しているAndroidスタジオのバージョンは何ですか? –

+0

@ JohnO'Reilly Hey John、最新2.2.3、ありがとうございました – Mystic

+0

AndroidスタジオでJava 8を使用していますか? –

答えて

2

一時的な解決策が見つかりました。ラムダをライブラリで使用する場合にのみ問題が発生します。サポートされていないジャック、メインのアプリケーションでのみサポートされているので、アンドロイドはlibsでジャックを有効にしていますが、以下のコードをbuild.gradleライブラリファイルに追加することができます。

gradle.projectsEvaluated { 
    tasks.withType(JavaCompile) { 
     options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar" 
    } 
} 

このソリューションは、私たちの独自のインターフェイスでのみ動作します。Runnableなどの理由でコンパイルエラーが発生します。

関連する問題