Simplemente configure un proyecto usando Android Studio 2.2.3 con Java 1.8 y Android 7 (nivel de API 24) tratando de probar la "nueva" característica Stream de Java 8.
Aquí mi archivo 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' }Aquí el código:
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 subraya la línea myList.stream()... diciéndome " Usage of API documented as @since 1.8+ " Gradle está compilando todo, pero ¿por qué recibo este mensaje? Pensé que esta función se introdujo con Java 8 y está disponible en Android API Nivel 24 y superior.
¿Cómo puedo solucionar este lío?
Gracias por adelantado
Actualización 2017-04-04
Jack está en desuso , Google lo está reemplazando con algo llamado desugar . Ahora está disponible con Android Studio 2.4 preview 4 y versiones posteriores.
La disponibilidad de la función de lenguaje/biblioteca de Java 8 aún depende del nivel de API del dispositivo y de la versión de Android Studio, así que asegúrese de verificar dos veces lo que puede y no puede usar .
Para usarlo, simplemente configure los niveles de idioma de origen y de destino en Java 8.
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }Tenga en cuenta que si ya está usando retrolambda o jack, deberá deshabilitarlos para poder usar desugar. Encontrarás más información sobre cómo usarlo aquí .
Todavía no lo he probado porque prefiero IntelliJ IDEA y la investigación rápida sobre cómo usarlo con IDEA no fue fructífera. Actualizaré esta respuesta nuevamente una vez que descubra cómo usarla en IDEA.
respuesta antigua
Algunas características del lenguaje Java 8 están disponibles cuando se usa el compilador Jack.
para habilitar a Jack, edite su build.gradle así
android { ... defaultConfig { ... jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }Más información se puede encontrar aquí
Sin embargo, me gustaría agregar que hasta ahora he tenido una experiencia bastante mala con Jack, especialmente durante la depuración. Recomendaría usar streamsupport y retrolambda en su lugar por ahora hasta que la hermana de jack, Jill , sea liberada .