2017-03-07 78 views
6

只需使用Android Studio 2.2.3和Java 1.8和Android 7(API Level 24)設置項目,試圖測試「新」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()) 
    } 

} 

Android Studio中強調了線myList.stream()...告訴我 「Usage of API documented as @since 1.8+」 搖籃正在編制的一切,但爲什麼我得到這個消息?我認爲這個特性是在Java 8中引入的,並且可以在Android API Level 24和更高版本中獲得?

我該如何解決這個爛攤子?

在此先感謝

+0

也許這可能有助於(設置模塊lang級別):http://stackoverflow.com/questions/37787079/intellij-unable-to-use-newer-java-8-classes-error-usage-of-api - 如果安卓工作室有這個選項我已經改變它的文檔 – Kelo

+0

。可悲的是沒有這樣的選擇(只編譯sdk版本和構建工具版本) – Radinator

+2

API等級24 =牛軋糖,Android 7.0-7。1.1,API Level 23 = Marshmallow,Android 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

要使用它,你只設置源語言和目標語言水平的Java 8

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

請注意,如果您已經使用retrolambda或插孔,則需要禁用它們desugar到使用。你可以找到更多關於如何使用它的信息here

我還沒有嘗試過,因爲我更喜歡IntelliJ IDEA,並且快速研究如何將它與IDEA一起使用並不富有成效。一旦我找出如何在IDEA中使用它,我會再次更新這個答案。

老答案

一些的Java 8語言特性使用傑克編譯器時可用。

,使傑克,編輯build.gradle像這樣

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

更多信息,可以發現here

不過,我想補充一點,我已經與插孔非常糟糕的經驗,到目前爲止,特別是在調試時。我會推薦使用streamsupportretrolambda,而不是,直到jack的妹妹Jill發佈

+3

傑克從下個月開始不推薦使用。 –

+2

顯然,https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html ...好,retrolambda救援...雖然仍然有希望 – Zharf

+1

我一旦我看到新東西,我會盡量記住更新這個答案 – Zharf