2017-05-19 4 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 
} 

이 코드를 추가 할 필요가 있지만, 컴파일러는이 오류를 보여줍니다 자바 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 그들은 빌드 도구가 상자 밖에서 lambda를 지원하지만 어쨌든 Android-apt Plugin이나 Retrolambda에서는 작동하지 않습니다. – EpicPandaForce