2017-05-19 1 views
7

私はAndroidプロジェクトでラムダ式とストリームを使用しようとしています。私はストリームのためにstreamsupportライブラリを使用しています。ラムダ式にはネイティブJava 8を使用しています。ジャックからネイティブJava 8に移行

Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8. 

、その後、私はこの

jackOptions { 
    enabled true 
} 
を追加しました:私は私のGradleで

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

このコードを追加する必要がありますが、コンパイラはこのエラーを示したJava 8つの機能を使用できるようにするには

コンパイラでエラーは発生しませんでしたが、実行時にと同じエラーが表示され続けます。 これは私のGradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.3" 

    defaultConfig { 
     applicationId "home.gio.calorieplanner" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     multiDexEnabled true 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 

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

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.3.1' 
    compile 'com.android.support:recyclerview-v7:25.3.1' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.android.support:support-v4:25.3.1' 
    compile 'org.greenrobot:eventbus:3.0.0' 
    compile 'com.android.support:design:25.3.1' 
    compile 'com.google.firebase:firebase-crash:10.0.1' 
    compile 'com.google.code.gson:gson:2.8.0' 
    compile 'com.google.firebase:firebase-database:10.2.4' 
    compile 'com.google.firebase:firebase-core:10.2.4' 
    compile 'com.jakewharton:butterknife:8.5.1' 
    compile 'com.firebaseui:firebase-ui-database:1.1.0' 
    compile 'org.jsoup:jsoup:1.10.2' 
    compile 'com.android.support:percent:25.3.1' 
    compile 'com.thoughtbot:expandablecheckrecyclerview:1.4' 
    testCompile 'junit:junit:4.12' 
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' 
    compile 'net.sourceforge.streamsupport:streamsupport:1.5.4' 
} 



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

であり、これは、私はラムダ式とストリームを使用しています方法です。

public String identifySubMenu(String group, int index) { 
    List<Product> prod = StreamSupport 
      .stream(Main.outRetailChainList.get(Constants.GOODWILL).getProducts()) 
      .filter(item -> item.getCategory().equals(group)) 
      .collect(Collectors.toList()); 
    return prod.get(index).getSubMenu(); 
} 

私はこのエラーをどのように修正できますか。

+1

実行時に得られるスタックトレースを表示してください。 –

+0

@Stefan質問を読む...「エラー:ジャックが必要です」 –

+0

@ cricket_007確かに、私はそれを読んだ。私には、 'Error:Jack is required'はコンパイル時のメッセージのように見えます。これがランタイムエラーメッセージであることは確かですか? –

答えて

4

あなたは多くのオプションがあります。

1 - このバージョンはもうジャックを必要としないとラムダが正しく処理されるようになりまし3.0 にアンドロイドスタジオのバージョンをアップグレードしますが、このバージョンはカナリアチャネルである、それは彼らのです"ベータ"のもの。

2 - 今はラムダを使用しないでください。ジャックとしてリリースされるのを待ってください3.0ラムダを完全に正しく処理しません。 https://developer.android.com/guide/platform/j8-jack.html

3 - retrolambdaという名前のプラグインを使用しますが、コンパイル時間が長くなります。私の考えでは、このオプションはちょうどラムダにとって重すぎます

+0

Retrolambdaはビルドツール3.0より前に動作し、3.0+で動作しません。 – EpicPandaForce

+0

@EpicPandaForce任意のポインタ(ヒント、リンク)を提供できますか? ..)retrolambdaの問題はAS 3.0で何ですか? –

+0

@StefanZobel彼らは、どこからでもビルドツールがラムダをサポートしていると書いていますが、android-aptプラグインやRetrolambdaでは動作しません。 – EpicPandaForce

関連する問題