2017-03-07 242 views
6

Chỉ cần thiết lập dự án bằng Android Studio 2.2.3 với Java 1.8 và Android 7 (API cấp 24) đang cố gắng thử nghiệm tính năng java 8 "mới" Stream.Cách sử dụng API Java 8 Stream trong Android 6.0

Ở đây tập gradle tôi:

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' 
} 

Đây mã:

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 nhấn mạnh dòng myList.stream()... nói với tôi "Usage of API documented as @since 1.8+" Gradle được biên dịch tất cả mọi thứ nhưng tại sao tôi nhận được thông báo này? Tôi nghĩ tính năng này được giới thiệu với Java 8 và có sẵn dưới API Android Leve 24 trở lên?

Làm cách nào để giải quyết sự cố này?

Cảm ơn trước

+0

Có thể điều này có thể giúp (thiết lập cấp độ mô-đun lang): http://stackoverflow.com/questions/37787079/intellij-unable-to-use-newer-java-8-classes-error-usage-of-api -documented – Kelo

+0

nếu android studio có tùy chọn này, tôi đã thay đổi nó. đáng buồn là không có tùy chọn như vậy (chỉ biên dịch phiên bản sdk và phiên bản công cụ xây dựng) – Radinator

+2

API Cấp 24 = Nougat, Android 7.0-7.1.1, API Cấp 23 = Marshmallow, Android 6.0 (.1) – Sartorius

Trả lời

8

Cập nhật 2017-04-04

Jack is deprecated, Google đang thay thế nó bằng một cái gì đó gọi là desugar. Nó hiện có sẵn với Android Studio 2.4 preview 4 và sau đó.

Tính khả dụng của tính năng ngôn ngữ/thư viện Java 8 vẫn phụ thuộc vào cấp API thiết bị và phiên bản Android Studio để đảm bảo double check what you can and can't use.

Để sử dụng nó, bạn sẽ chỉ cần thiết lập các mức nguồn và ngôn ngữ đích để Java 8.

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

Lưu ý rằng nếu bạn đã sử dụng retrolambda hoặc jack, bạn sẽ cần phải vô hiệu hóa chúng cho desugar để được dùng. Bạn tìm thêm thông tin về cách sử dụng nó here.

Tôi chưa tự mình thử vì tôi thích IntelliJ IDEA và nghiên cứu nhanh về cách sử dụng IDEA với IDEA không hiệu quả. Tôi sẽ cập nhật câu trả lời này một lần nữa khi tôi tìm ra cách sử dụng nó trong IDEA.

Cũ câu trả lời

Một số tính năng Java 8 ngôn ngữ có sẵn khi sử dụng Jack biên dịch.

để cho phép Jack, chỉnh sửa thông tin của bạn build.gradle như vậy

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

có thể tìm thêm here

Tuy nhiên, tôi muốn thêm rằng tôi đã có kinh nghiệm khá xấu với jack cho đến nay, đặc biệt là khi gỡ lỗi. Tôi khuyên bạn nên sử dụng streamsupportretrolambda thay vì cho đến bây giờ cho đến khi em gái của jack Jill được phát hành.

+3

Jack sẽ không được dùng nữa kể từ tháng sau. –

+2

rõ ràng, https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html ... well, retrolambda để giải cứu ... mặc dù vẫn còn hy vọng – Zharf

+1

I sẽ cố gắng nhớ cập nhật câu trả lời này khi tôi đã thấy nội dung mới – Zharf

Các vấn đề liên quan