2017-03-07 7 views
6

Java 1.8 및 Android 7 (API 레벨 24)의 Android Studio 2.2.3을 사용하여 "새로운"Java 8 기능 Stream을 테스트하는 프로젝트를 설정하기 만하면됩니다. 여기Android 6.0에서 Java 8 Stream API를 사용하는 방법

내 Gradle을 파일 :

다음 코드
apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.example.radinator.myproject" 
     minSdkVersion 24 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    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' 
    testCompile 'junit:junit:4.12' 
} 

:

import java.util.stream.*; 
public class MainActivity extens Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mainactivity); 
    } 

    void foo(){ 
     List<String> myList = Arrays.asList("one", "two", "three", "four", "five", "six"); 
     myList.stream() 
      .filter(s -> s.length() > 0) 
      .collect(Collectors.toList()) 
    } 

} 

안드로이드 스튜디오 라인 말해 myList.stream()...을 강조 "Usage of API documented as @since 1.8+는"Gradle을 모든 것을 컴파일 그런데 왜 나는이 메시지를받을 수 있나요? 이 기능은 Java 8에서 소개되었으며 Android API Leve 24 이상에서 사용할 수 있다고 생각했습니다.

어떻게 이런 혼란을 해결할 수 있습니까? 사전

+0

아마도 이것이 (모듈 수준을 설정하는 데) 도움이 될 수 있습니다. http://stackoverflow.com/questions/37787079/intellij-unable-to-use-newer-java-8-classes-error-usage-of-api -documented – Kelo

+0

android studio가이 옵션을 가지고 있다면 그것을 바꿨습니다. 안타깝게도 그런 옵션은 없습니다 (SDK 버전 만 컴파일하고 도구 버전을 빌드하십시오). – Radinator

+2

API 레벨 24 = Nougat, Android 7.0-7.1.1, API 레벨 23 = 마쉬 멜로우, 안드로이드 6.0 (.1) – Sartorius

답변

8

업데이트 2017년 4월 4일

Jack is deprecated에서

덕분에, 구글은 desugar라고 무언가로 대체된다. 이제 Android Studio 2.4 preview 4 이상에서 사용할 수 있습니다.

Java 8 언어/라이브러리 기능은 기기 API 레벨 및 Android Studio 버전에 따라 달라 지므로 double check what you can and can't use으로 확인하십시오.

당신은 당신이 이미 retrolambda 또는 잭을 사용하는 경우, 당신이 desugar 그들을 해제해야한다는 8.

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

참고 자바 소스와 대상 언어 수준을 설정할 것을 사용하려면 사용하십시오. 그것을 사용하는 방법에 대한 자세한 정보는 here을 참조하십시오.

나는 IntelliJ IDEA를 선호하기 때문에 아직 시도하지 않았으며 IDEA와 함께 사용하는 방법에 대한 빠른 연구는 결실을 맺지 못했습니다. IDEA에서 어떻게 사용하는지 알아 내면이 답변을 다시 업데이트하겠습니다. 잭 컴파일러를 사용하는 경우

올드 대답 일부 자바 8 언어 기능

사용할 수 있습니다.

, 나는 내가 지금까지 잭 아주 나쁜 경험을 했어 추가하고 싶은, 그러나 here

을 찾을 수 있습니다, 잭을 사용하여 build.gradle

android { 
    ... 
    defaultConfig { 
     ... 
     jackOptions { 
      enabled true 
     } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

과 같이 더 많은 정보를 편집 할 수 특히 디버깅 할 때. 잭의 자매 인 Jill이으로 출시 될 때까지 streamsupportretrolambda 대신 을 사용하는 것이 좋습니다.

+3

잭은 다음 달부터 사용 중단 될 예정입니다. –

+2

분명히 https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html ... 음, 구조에 retrolambda ... 아직 희망이 있긴하지만 – Zharf

+1

새로운 것을 보았을 때이 답변을 업데이트하는 것을 잊지 마세요. – Zharf