È possibile utilizzare Java 8 per lo sviluppo Android?


609

Cercando sul web, non è chiaro se Java 8 è supportato per lo sviluppo Android o meno.

Prima di scaricare / configurare Java 8, qualcuno può indicarmi qualsiasi documentazione "ufficiale" che dice che Java 8 è o non è supportato per lo sviluppo di Android.


21
Non conosco le dichiarazioni ufficiali ma Java 8 (modifica: JDK 8) funziona bene con Android SDK per me. Windows 8.1 a 64 bit qui.
Hoang Huynh,

2
C'è stata una discussione in corso in questo post Come si collega la versione Java di Android a una versione Java SE?
Aboalnaga,

2
@HoangHuynh è possibile utilizzare JDK 6 o versioni successive per lo sviluppo Android. Tuttavia, la compilation supporta Java versione 6 (e 7 in caso di KitKat). Penso che il significato dell'OP sia anche per la versione java (non JDK)
waqaslam,

13
Java 8 è UFFICIALMENTE supportato in Android N. android-developers.blogspot.com/2016/03/…
Jay

Risposte:


189

java 8

Android supporta tutte le funzionalità del linguaggio Java 7 e un sottoinsieme di funzionalità del linguaggio Java 8 che variano in base alla versione della piattaforma.

Per verificare quali funzioni di java 8 sono supportate

Utilizzare le funzionalità del linguaggio Java 8

Abbiamo deciso di aggiungere il supporto per le funzionalità del linguaggio Java 8 direttamente nel set di strumenti javac e dx corrente e di deprecare la toolchain di Jack. Con questa nuova direzione, gli strumenti e i plug-in esistenti dipendenti dal formato file della classe Java dovrebbero continuare a funzionare. Andando avanti, le funzionalità del linguaggio Java 8 saranno supportate in modo nativo dal sistema di build Android. Puntiamo a lanciarlo come parte di Android Studio nelle prossime settimane e volevamo condividere questa decisione in anticipo con voi.

Futuro del supporto delle funzionalità linguistiche di Java 8 su Android

Utenti Eclipse:

Per i vecchi sviluppatori che preferiscono Eclipse, Google Stop supporta gli strumenti per sviluppatori Android Eclipse

se hai installato Java 8 JDK, provalo, se si verificano problemi prova a impostare il compilatore come 1.6 in Eclipse dal menu della finestra → PreferenzeJavaCompilatore . Anche Java 7 funzionerà:

Preferenze Eclipse -> Java -> Compilatore

È richiesto Java 7 o versioni successive se si utilizza Android 5.0 e versioni successive.

installa più JDK e prova.


2
Java 8 ha cambiato il modo in cui funziona il bytecode? Altrimenti, dovrebbe andare bene usare qualsiasi versione di Java, teoricamente, purché si compili.
Ben Leggiero,

6
la domanda corretta è: cosa succede se si utilizzano nuove funzionalità in Java 8 non esiste in Java 7 per creare app Android, va bene? per essere al sicuro seguire le istruzioni ufficiali.
Ing. Samer T,

12
@ BenC.R.Leggiero non c'è nessun nuovo bytecode in Java 8, ma i significati e le strutture delle istruzioni sono stati cambiati stackoverflow.com/questions/28228450/... stackoverflow.com/questions/16143684/...
phuclv

17
Non pubblicare "Aggiornamento N" nella risposta. Riscriverlo per avere informazioni aggiornate. Altrimenti, tra qualche anno sarà difficile ottenere informazioni tanto quanto i forum che ha sostituito.
Aleksandr Dubinsky

1
La risposta deve essere aggiornata. Java 8 è supportato da Android Studio 3.0 e Gradle Plugin 3.0.
Юрій Мазуревич,

350

AGGIORNAMENTO 2017/11/04 - Android Studio 3.0 ha ora il supporto nativo per Java 8. gradle-retrolambda non è più necessario. Vedi https://developer.android.com/studio/write/java8-support.html

Il link sopra include anche le istruzioni di migrazione se si sta utilizzando gradle-retrolambda. Risposta originale di seguito:


Android non supporta Java 8. Supporta solo fino a Java 7 (se hai kitkat) e ancora non ha invocinodinamico, solo il nuovo zucchero di sintassi.

Se vuoi usare lambdas, una delle principali funzionalità di Java 8 in Android, puoi usare gradle-retrolamba . È una dipendenza di build graduale che integra retrolambda, uno strumento che converte il bytecode Java 8 in Java 6/7. Fondamentalmente, se imposti il ​​compilatore in Android Studio per compilare il bytecode Java 8, consentendo così lambdas, lo convertirà nuovamente in bytecode Java 6/7 che a sua volta verrà convertito in bytecode dalvik. È un trucco per chi vuole provare alcune funzionalità di JDK 8 su Android al posto del supporto ufficiale.


13
È stato un po 'difficile farlo funzionare, ma una volta ho effettivamente seguito le istruzioni giuste ha funzionato bene. Nota per gli utenti di Eclipse: Eclipse non funziona bene con questo, suggerisco di migrare su Android Studio (mi mancherà Eclipse, ma per adesso è così!)
Simon Forsberg,

2
Nitpick: le clausole multi-catch di Java 7 NON sono supportate da Android.
CSV

11
Il multi-catch è supportato, solo la funzionalità JDK7 non supportata da Android è prova con risorse
Matthieu Harlé,

12
Java 7 funziona con tutte le versioni di Android. Un'eccezione: try-with-resourcesfunziona solo da Kitkat.
Dmitry Zaytsev,

2
@Simon André Forsberg (attenzione: spina spudorata!) - per non supportare l'API stream Java 8, potresti usare la mia libreria su sourceforge.net/projects/streamsupport - si rivolge esplicitamente al supporto per Android.
Stefan Zobel,

99

Puoi davvero usare la gradle-retrolambadipendenza build gradle per usare Java 8 per lo sviluppo Android.

Di seguito è riportata la guida completa che ho seguito di recente per eseguire espressioni lambda per lo sviluppo di Android. La fonte originale di questa guida è menzionata alla fine.

In questa guida, verrà dimostrato un metodo per portare alcune funzionalità di Java 8 negli strumenti di sviluppo Android, mirando in particolare all'IDE Eclipse. Tuttavia, i passaggi che verranno descritti in questa guida potrebbero anche essere adattati al nuovo ambiente di sviluppo rivolta di Google, Android Studio. Si basa sull'edizione comunitaria del famoso IDE IntelliJ Idea di JetBrains ed è stato recentemente aggiornato alla sua versione "beta" da Google all'inizio di luglio 2014, poco prima che questa guida fosse scritta. Eclipse rimarrà come importante ambiente di sviluppo, almeno per un po ', e considerando il fatto che la maggior parte dei progetti Android sono stati sviluppati utilizzando Eclipse, un metodo per portare nuove funzionalità Java 8 come le espressioni lambda in ADT sembra essere abbastanza utile per gli sviluppatori.

Lo sviluppo Android si basa su un'implementazione Java personalizzata chiamata Apache Harmony Project, terminata nel 2011. La sintassi Java più comunemente usata nello sviluppo Android è Java 6 (v1.6) e Java 7 (v1.7) è parzialmente supportato su l'edizione KitKat (Android 4.4. +). Pertanto, le funzionalità Java 8 come le espressioni lambda non possono essere utilizzate direttamente nello sviluppo di app Android senza applicare alcune modifiche agli strumenti di sviluppo. Fortunatamente, questi costrutti sono fondamentalmente alcuni miglioramenti dello "zucchero sintattico" che danno agli sviluppatori le carenze di cose come "classi anonime" e possono essere tradotti in classi Java 6 o Java 7.

Un approccio recente per la traduzione di un codice sorgente Java 8 in versioni Java inferiori si chiama RetroLambda . Questa libreria consente agli sviluppatori di eseguire il codice Java 8 con espressioni lambda su Java 7 o anche inferiori. Sfortunatamente, le funzionalità Java 8 diverse dalle espressioni lambda non sono attualmente supportate da RetroLambda ma il concetto di espressioni lambda è il più grande salto sulla piattaforma Java 8 ed è comunque un ottimo strumento per gli sviluppatori Android.

I dettagli su questa libreria sono disponibili sulla sua pagina GitHub:

https://github.com/orfjackal/retrolambda#getting-started

Inoltre, un plug-in Gradle per RetroLambda creato da un altro sviluppatore consente di implementare build basate su Gradle in progetti Java o Android. Tuttavia, lo sviluppatore menziona solo l'integrazione di questo plug-in nell'ambiente Android Studio. I dettagli sono disponibili sulla sua pagina GitHub:

https://github.com/evant/gradle-retrolambda

L'uso di queste infrastrutture all'interno di un ambiente di sviluppo basato su Eclipse non può essere affrontato direttamente ma è fattibile e verrà dimostrato in questa guida.

Preparazione

Questa guida presuppone che il lettore abbia una conoscenza di base dello sviluppo Android e si basa sulla versione 22.6.2 di ADT perché la recente versione 23.0.2 di ADT sembra avere problemi come la creazione di cartelle di layout. I dettagli su questo problema sono disponibili al seguente link:

http://code.google.com/p/android/issues/detail?id=72591

I passaggi di questa guida verranno forniti per una macchina di sviluppo Windows 8.1 a 64 bit , ma possono essere facilmente adattati ad altre piattaforme. Il nuovo sistema di compilazione Gradleverrà utilizzato per i processi di generazione / pulizia e verrà fornita anche la relativa procedura di installazione. Inoltre, entrambi JDK 8e JDK 7devono coesistere sulla macchina di sviluppo. I passaggi indicati di seguito devono essere seguiti per installarli:

  • Vai alla pagina di anteprima di accesso anticipato JDK 8 http://jdk8.java.net
  • Scarica JDK 8u20 e installalo. L'installazione di JRE 8 non è necessaria e può essere ignorata
  • Vai all'ultima pagina di versione stabile di JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • Scarica JDK 7u65 e installalo. L'installazione di JRE 7 non è più necessaria e può essere saltata
  • Aggiungi la cartella principale JDK 8 e la cartella JDK 8 binalla tua %PATH%variabile
  • Creare una nuova variabile d'ambiente JAVA_HOMEcon il valore del percorso della cartella principale di JDK 8
  • Creare di nuovo una nuova variabile d'ambiente JAVA8_HOMEcon il valore del percorso della cartella principale di JDK 8
  • Creare una nuova variabile di ambiente JAVA7_HOMEcon il valore del percorso della cartella principale di JDK 7
  • Aprire una finestra del terminale ed eseguire il java -versioncomando e verificare che Java 8 sia attivo e in esecuzione
  • Esegui il javac -versioncomando nella stessa finestra e verifica che anche il compilatore Java JDK 8 sia attivo e in esecuzione

Ora, ADT-22.6.2 deve essere scaricato dal seguente link:

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • Scarica ADT e decomprimi il suo contenuto in una cartella, ad es D:\adt
  • Definire una nuova variabile d'ambiente chiamata ANDROID_HOMEcon il valore del percorso della cartella di installazione di ADT, ad esD:\adt\sdk
  • Aggiungi le tue cartelle Andoid SDK Platform Toolse Andoid SDK Tools, ad es. D:\adt\sdk\toolsE D:\adt\sdk\platform-tools, alla tua %PATH%variabile
  • Se lo desideri, crea un collegamento a IDE Eclipse. Si trova nella cartella di installazione di ADT, ad esD:\adt\eclipse
  • Esegui Eclipse IDE e crea uno spazio di lavoro, ad es D:\adt\workspace
  • Fai clic sul Android SDK Managerpulsante che si trova sulla barra degli strumenti
  • Seleziona Android SDK Build tools Rev. 19.1e Android Support Librarysolo. Deseleziona tutto il resto e installa questi due pacchetti.

Se tutto va bene, ADT sarà attivo e funzionante.

Si consiglia vivamente anche l'installazione dei seguenti strumenti:

  • Supporto Eclipse Kepler Java 8: consente a Eclipse di riconoscere le nuove estensioni di sintassi Java 8 e di eliminare i fastidiosi red dotseditor di codice Java. Potrebbe essere installato tramite Help -> Install New SoftwareEclipse. Inserisci http://download.eclipse.org/eclipse/updates/4.3-P-builds/ nel Work withcampo e continua a installarlo.

  • Grado Nodeclipse / Enide: viene utilizzato principalmente per evidenziare le parole chiave del linguaggio Groovy. Groovy è usato come DSL per gli script di build Gradle. Questo plugin può essere installato tramite Eclipse Marketplace. Tuttavia, Eclipse in ADT-22.6.2 non viene fornito con Eclipse Marketplace Client. Pertanto, sarà prima necessario installare Eclipse Marketplace Clienttramite lo Install New Softwarestrumento in Eclipse. Inserisci http //: download.eclipse.org/mpc/kepler/ nel Work withcampo e continua a installarlo. Dopo l'installazione Eclipse Marketplace Client, è possibile cercare Nodeclipse/Enide Gradlenel Eclipse Marketplace Cliente installarlo.

  • Dispositivo virtuale Genymotion: sostituisce in modo ottimale l'impostazione predefinita Android Virtual Devicefornita con ADT. AVD è fastidiosamente ingombrante e continua a bloccarsi senza motivo. Genymotion ti consente di preparare VD Android usando CyanogenModimmagini che sono eseguite da Oracle VirtualBox . La sua licenza per singolo utente è gratuita e può essere scaricata da http://www.genymotion.com . È richiesto solo un accesso e può anche essere integrato in Eclipse. I dettagli sono disponibili sotto:

https://cloud.genymotion.com/page/doc/#collapse8

Di seguito è riportato uno screenshot di un dispositivo virtuale CyanogenMod basato su Android 4.3,

inserisci qui la descrizione dell'immagine

Potrebbe essere considerato come un dispositivo Android completo su un personal computer basato su x86 o x64. Per utilizzare i servizi Google come Google PlayStoresu questo dispositivo virtuale, gappsun'immagine per la versione Android che utilizza deve essere trasferita sul dispositivo. Un'immagine corretta gappsper il dispositivo potrebbe essere scaricata dal sito Web CyanogenMod:

http://wiki.cyanogenmod.org/w/Google_Apps

L'installazione Gradle è facoltativa poiché è fornita anche dallo stesso SDK Android, ma la sua installazione separata è altamente raccomandata. L'installazione potrebbe essere eseguita seguendo questi passaggi:

  • Vai al sito web Gradle: http://www.gradle.org/

  • Clic Downloads

  • In Previous Releasesscegliere la versione 1.10 e scaricare gradle-1.10-all.zip o gradle-1.10-bin.zip
  • Decomprimi il contenuto in una cartella, ad es D:\adt\gradle
  • Definire una nuova variabile d'ambiente chiamata GRADLE_HOMEcon il valore del percorso della cartella di installazione di Gradle, ad esD:\adt\gradle
  • Aggiungi la tua cartella binaria Gradle, ad esempio D:\adt\gradle\bin, alla tua %PATH%variabile
  • Apri una finestra del terminale ed esegui il gradle -vcomando e verifica che sia attivo e funzionante Se sei arrivato a questo punto con successo, significa che sei pronto per creare la tua prima app Android utilizzando le funzionalità Java 8.

App demo

Verrà creata una semplice app per dimostrare l'utilizzo degli strumenti descritti nella sezione precedente. Puoi semplicemente seguire i passaggi indicati di seguito per avere un'idea dell'utilizzo delle espressioni lambda negli Strumenti per sviluppatori Android:

  • Esegui Eclipse IDE e crea una nuova app Android selezionando File -> New -> Other -> Android -> Android Application Project
  • Compila il modulo che compare come mostrato di seguito:

inserisci qui la descrizione dell'immagine

  • Basta fare clic sul Nextpulsante nei seguenti moduli e fare clic sul Finishpulsante nell'ultimo. Attendere fino a quando ADT termina il caricamento del progetto
  • Fare clic con il tasto destro del mouse sul progetto, selezionarlo New -> Foldere denominarlobuilders
  • Fare clic con il tasto destro sulla gen (Generated Java Files)cartella ed eliminarla. Gradle genererà presto gli stessi file per noi e li aggiungeremo nella s build path. Thecartella gen` del progetto creata dal builder Ant predefinito non è più necessaria e gli artefatti sotto quella cartella saranno obsoleti
  • Creare i seguenti file batch nella builderscartella:

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Compila questi file batch come segue:

gradle_build.cmd:

inserisci qui la descrizione dell'immagine

gradle_post_build.cmd:

inserisci qui la descrizione dell'immagine

gradle_clean.cmd:

inserisci qui la descrizione dell'immagine

  • Deseleziona l' Project -> Build Automaticallyopzione di menu
  • Fare clic con il tasto destro del mouse sul progetto e selezionare Properties -> Builderse deselezionare tutti i costruttori predefiniti forniti da ADT
  • Fare clic sul Newpulsante nella stessa finestra e selezionare Programe fare clicOK
  • Apparirà la finestra di configurazione del nuovo builder. Compila le sue schede come segue:

Main Scheda della nuova configurazione del generatore

inserisci qui la descrizione dell'immagine

Refresh Scheda della nuova configurazione del generatore

inserisci qui la descrizione dell'immagine

Environment Scheda della nuova configurazione del generatore

inserisci qui la descrizione dell'immagine

Build Options Scheda della nuova configurazione del generatore

inserisci qui la descrizione dell'immagine

  • Crea il secondo builder chiamato Gradle_Post_Buildche utilizza gradle_post_build.cmdcome programma. Tutte le altre impostazioni di questo builder devono essere esattamente le stesse del builder creato in precedenza. Questo builder sarà responsabile della copia degli artefatti creati dal processo di compilazione nella bincartella.
  • Crea il terzo builder chiamato Gradle_Cleanerche utilizza gradle_clean.cmdcome programma. Solo l' Run the builderimpostazione nella scheda finale deve essere impostata come During a Clean. Tutte le altre impostazioni di questo builder devono essere esattamente le stesse del primo builder. Questo builder sarà responsabile della pulizia degli artefatti creati dal processo di compilazione come suggerisce il nome.

Nuovi costruttori del HelloLambdaprogetto

inserisci qui la descrizione dell'immagine

  • Fare clic con il tasto destro sul progetto e selezionare Export
  • Seleziona Android -> Generate Gradle Build Filese fai clicNext
  • Seleziona il progetto nella finestra successiva e fai clic Finish
  • Vai alla cartella principale del tuo progetto ed elimina i file gradlewe gradlew.bat. Elimina anche la gradlecartella
  • Torna a Eclipse e seleziona l' Project -> Cleanopzione di menu. Compila il modulo che appare come segue:

Clean Project Finestra

inserisci qui la descrizione dell'immagine

  • Fare clic OKe attendere fino al completamento del processo di pulizia
  • Aggiungi lo snippet di codice Java indicato di seguito subito dopo la chiamata per setContentViewfunzionare nella tua MainActivityclasse:

inserisci qui la descrizione dell'immagine

  • Modificare l'inizio del build.gradlefile fino alla sourceCompatibilitysezione come segue:

inserisci qui la descrizione dell'immagine

  • Fare clic con il tasto destro del mouse sul progetto e selezionare l' Properties -> Java Compileropzione e impostare tutti i livelli di conformità su Java 8. Ciò consentirà a Eclipse di riconoscere i nuovi costrutti Java 8 come le espressioni lambda.
  • Fai clic Nonella finestra di notifica
  • Fare clic con il tasto destro sul progetto e selezionare Build project. Eclipse inizierà a costruire il progetto.

Processo di compilazione inserisci qui la descrizione dell'immagine

  • Fai clic con il pulsante destro del mouse sul progetto e vai a Properties -> Java Build Path. Aggiungi le seguenti cartelle al percorso di compilazione (mostrato anche nell'immagine seguente):

    • build\source\buildConfig\debug
    • build\source\r\debug

inserisci qui la descrizione dell'immagine

Eclipse sarà ora in grado di riconoscere R.javae buildConfig.javafile e non mostrerà alcuno red dotsche denoti errori relativi ai file di risorse del progetto.

  • Creane uno nuovo Run Configurationper la tua piattaforma di destinazione Android facendo clic con il pulsante destro del mouse sul progetto e selezionando Run As -> Run Configurations. Ad esempio, questa applicazione demo appare come mostrato di seguito su Genymotion VD:

Applicazione HelloLambda

inserisci qui la descrizione dell'immagine

Si può osservare nella LogCatfinestra che lo snippet di codice con una semplice espressione lambda funziona correttamente

inserisci qui la descrizione dell'immagine

Fonte: utilizzo delle espressioni lambda Java 8 negli strumenti per sviluppatori Android


Ma sarai in grado di eseguire il debug di questo codice utilizzando un debugger Android? I numeri di stack / linea non sarebbero compatibili è la mia ipotesi. Sembra un grosso svantaggio per lo sviluppo con Java 8 su Android.
Zombi,

2
@Zombies Sì, puoi ancora eseguirne il debug. Tutto funziona bene.
Korniltsev Anatoly il

42

Segui questo link per i nuovi aggiornamenti. Utilizzare le funzionalità del linguaggio Java 8

Vecchia risposta

A partire dalla versione di anteprima di Android N, Android supporta funzionalità limitate di Java 8, consultare Funzionalità del linguaggio Java 8

Per iniziare a utilizzare queste funzionalità, devi scaricare e configurare Android Studio 2.1 e Android N Preview SDK, che include la toolchain Jack richiesta e il plug-in Android aggiornato per Gradle. Se non avete ancora installato Android N Preview SDK, vedere Set Up di sviluppare per Android N .

Funzioni e API del linguaggio Java 8 supportate

Android attualmente non supporta tutte le funzionalità del linguaggio Java 8. Tuttavia, le seguenti funzionalità sono ora disponibili durante lo sviluppo di app destinate all'anteprima di Android N:

Metodi di interfaccia predefiniti e statici

Espressioni lambda (disponibile anche a livello API 23 e inferiore)

Annotazioni ripetibili

Riferimenti ai metodi (disponibile anche a livello di API 23 e precedenti)

Ci sono alcune funzionalità Java 8 aggiuntive supportate da Android, puoi vedere i dettagli completi da Java 8 Language Features

Aggiornare

Nota: Android N basa l'implementazione delle espressioni lambda su classi anonime. Questo approccio consente loro di essere retrocompatibili ed eseguibili su versioni precedenti di Android. Per testare le espressioni lambda su versioni precedenti, ricordati di andare al tuo file build.gradle e imposta compileSdkVersion e targetSdkVersion su 23 o precedente.

Aggiornamento 2

Ora la versione stabile di Android Studio 3.0 supporta le librerie Java 8 e le funzionalità del linguaggio Java 8 (senza il compilatore Jack).


Non ho capito qualcosa C'è qualche requisito sul minSdkVersion?
WindRider,

Penso che solo le espressioni lambda siano compatibili con le versioni precedenti, altre funzionalità di Java 8 funzioneranno solo su N (o versione futura). Non l'ho testato, ma questo è quello che ho capito dai documenti Android. Quindi, per Java 8 caratteristiche minSdkVersion è N, diverso dall'espressione lambda

Quindi ... ancora qualche anno prima che N diventi leader nel cruscotto. :(
WindRider

Sfortunatamente sì. o fino a quando Android non fornirà in qualche modo la retrocompatibilità come lambda

1
@WindRider, è possibile utilizzare minSdkVersion 15 e versioni successive. Attualmente sto usando minSdkVersion 17 nel mio progetto Android con Lambdas e tutto funziona.
Yamam

22

Sì, Android supporta Java 8 Now (24.1.17)

Adesso è possibile

Ma dovrai far funzionare la rom del tuo dispositivo su java 1.8 e abilitare "jackOptions" per eseguirlo. Jack è il nome del nuovo compilatore Android che esegue Java 8

https://developer.android.com/guide/platform/j8-jack.html

aggiungi queste righe a build_gradle

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

Java 8 sembra essere il motore Java in esecuzione di Android Studio 2.0, ma non accetta ancora la sintassi di Java 8 dopo che ho controllato, e non puoi scegliere un compilatore da Android Studio ora. Tuttavia, puoi utilizzare il plug-in scala se hai bisogno di un meccanismo di programmazione funzionale nel tuo client Android.

inserisci qui la descrizione dell'immagine


1
Scala sarebbe molto pesante da impacchettare con l'apk
TechSpellBound il

Fare riferimento a questa soluzione per Android Studio 2.0 aggiornato poiché hanno effettuato aggiornamenti a opzioni di configurazione limitate.
Gaurav Sharma,

19

Android utilizza un Java che si ramifica da Java 6.

A partire da Android SDK versione 19, è possibile utilizzare le funzionalità Java 7 in questo modo . Nessun supporto completo per Java 8 (ancora).


1
sei un salvavita. Sai se esiste anche qualcosa che implementerebbe le risorse di prova in modo simile?
galets

@galets non c'è ancora modo, ma scommetterei su Google aggiungendolo ad un certo punto in futuro. Ulteriori informazioni, consultare: stackoverflow.com/questions/16921337/...
chaqke

16

Native Java 8 arriva su Android! Finalmente!

rimuovere il plugin Retrolambda e il blocco retrolambda dal file build.gradle di ciascun modulo:

Per disabilitare Jack e passare alla toolchain predefinita, è sufficiente rimuovere il blocco jackOptions dal file build.gradle del modulo

Per iniziare a utilizzare le funzionalità del linguaggio Java 8 supportate, aggiorna il plug-in Android alla 3.0.0 (o successiva)

A partire da Android Studio 3.0, le funzionalità del linguaggio Java 8 sono ora supportate nativamente da Android:

  • Espressioni Lambda
  • Riferimenti a metodi
  • Digitare annotazioni (attualmente le informazioni di annotazione del tipo non sono disponibili in fase di esecuzione ma solo in fase di compilazione);
  • Ripetizione di annotazioni
  • Metodi di interfaccia predefiniti e statici (a livello di API 24 o superiore, nessun supporto di esecuzione istantanea);

Inoltre dal livello minimo API 24 sono disponibili le seguenti API Java 8:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (Class)
  • java.lang.reflect.Method.isDefault ()

Aggiungi queste righe al build.gradle del modulo dell'applicazione per informare il progetto a livello di lingua:

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

Disabilita il supporto per le funzionalità del linguaggio Java 8 aggiungendo quanto segue al tuo file gradle.properties :

android.enableDesugar=false

Hai finito! Ora puoi usare java8 nativo!


14

Android supporta UFFICIALMENTE Java 8 a partire da Android N.

Gli annunci sulle funzioni sono qui , l'annuncio in linguaggio Java 8 è:

Supporto del linguaggio Java 8 migliorato - Siamo entusiasti di portare le funzionalità del linguaggio Java 8 su Android. Con il compilatore Jack per Android, ora puoi utilizzare molte delle più diffuse funzionalità del linguaggio Java 8, inclusi lambda e altro, su versioni di Android fino a Gingerbread. Le nuove funzionalità aiutano a ridurre il codice del boilerplate. Ad esempio, lambdas può sostituire le classi interne anonime quando fornisce listener di eventi. Alcune funzionalità del linguaggio Java 8 - come i metodi predefiniti e statici, i flussi e le interfacce funzionali - sono ora disponibili anche su N e versioni successive. Con Jack, non vediamo l'ora di tracciare il linguaggio Java più da vicino mantenendo la retrocompatibilità.


In questa data è ancora pieno di errori, ad esempio Instant Run non funziona con lambdas: se si modifica un po 'di codice all'interno della funzione lambda, non verrà apportata la modifica.
adriendenat,

12

Possiamo usare Java 8 usando:

  1. In build.gradle (Progetto: myProject) aggiungere quanto segue

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. In build.gradle (Modulo: myModule) aggiungere quanto segue

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

1
Cosa c'è di diverso dalla prima risposta che raccomandava la lambda retrò?
Maarten Bodewes,

2
@MaartenBodewes Sembra che abbia sottolineato che è diventata molto più semplice della risposta accettata. Consulta medium.com/android-news/…
TechSpellBound

Non usarlo. Plugin difettoso
Akshay Mukadam,

11

AGGIORNAMENTO 2020/01/17

Android Studio 4.0 include il supporto per l'utilizzo di un numero di API in linguaggio Java 8, utilizzando la tecnica chiamata desugaring, senza richiedere un livello API minimo per la tua app:
https://developer.android.com/studio/preview/features#j8-desugar

Il seguente set di API è supportato in questa versione:

  • Stream sequenziali ( java.util.stream)
  • Un sottoinsieme di java.time
  • java.util.function
  • Aggiunte recenti a java.util.{Map,Collection,Comparator}
  • Optionals ( java.util.Optional, java.util.OptionalInte java.util.OptionalDouble) e alcune altre nuove classi utili con le API di cui sopra
  • Alcune aggiunte a java.util.concurrent.atomic(nuovi metodi su AtomicInteger, AtomicLonge AtomicReference)
  • ConcurrentHashMap (con correzioni di bug per Android 5.0)

Per supportare queste API di lingua, D8 compila un file DEX di libreria separato che contiene un'implementazione delle API mancanti e lo include nella tua app. Il processo di desugaring riscrive il codice dell'app per utilizzare invece questa libreria in fase di esecuzione.

Per abilitare il supporto per queste API di lingua, includere quanto segue nel build.gradlefile del modulo :

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

POSTO ORIGINALE DEL 2017

Android Studio 3.0 ha iniziato a fornire supporto integrato per alcune delle funzionalità del linguaggio Java 8, che sono:

  • Espressioni Lambda
  • Riferimenti a metodi
  • Tipo di annotazioni (le informazioni sono disponibili al momento della compilazione, ma non in fase di esecuzione)
  • Ripetizione di annotazioni
  • Metodi di interfaccia predefiniti e statici

Inoltre a partire dal livello API 24 sono disponibili le seguenti API Java 8:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

Oltre a ciò, il try-with-resourcessupporto è stato esteso a tutti i livelli di API Android.

Altre funzionalità Java 8 sono promesse da aggiungere in futuro.

Per iniziare a utilizzare le funzionalità del linguaggio Java 8 supportate, aggiorna il plug-in Android alla 3.0.0-alpha1 (o successiva) e aggiungi quanto segue al file build.gradle del tuo modulo:

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

Per maggiori dettagli visita:
https://developer.android.com/studio/write/java8-support.html


Quello che non capisco è, cosa c'entra Android Studio con il supporto java8 (non lo aveva mai fatto prima Intellij) ?! Vuol dire che se uso Gradle sul terminale per compilare il progetto non lo compilerà ?!
Cesarferreira,

1
@cesarferreira Devi aggiornare il plug-in Android all'ultima versione (che è al momento 2.4.0-alpha6). Si prega di controllare il blocco delle citazioni nella risposta.
Idolon,

L'aggiunta al modulo (non app) in cui sto lavorando è stata la cattura. L'aggiunta al modulo dell'app non ha aiutato.
Surekha,

6

Modo semplice

È possibile abilitare il supporto java 1.8 per il progetto Android.

  • Apri la struttura del progetto

    • O premendo Ctrl + Shift + Alt + S

    • O File > Project Structure

  • Aggiorna la compatibilità di origine e la compatibilità di destinazione su 1.8 nella finestra di dialogo Struttura progetto come mostrato (fai clic su File> Struttura progetto).

Immagine

Oppure puoi usare Gradle

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

Sincronizza progetto. E questo è tutto!

Nota: il supporto Java 1.8 può essere abilitato per Android Studio 3.0.0 o versione successiva. Vedere la documentazione per ulteriori letture.


Questa soluzione ha funzionato per me: stackoverflow.com/a/55467237/4698320
DANESE Sharma

5

Quando ho posto questa domanda quasi 2 anni fa, la risposta è stata davvero "ufficialmente" no, ma come sottolineato dalla risposta di ekcr1, puoi usare una delle funzionalità più attese (lambda) se usi Retrolamba. Al momento stavo ancora usando eclipse, dato che Android Studio era in modalità "anteprima", quindi non ho mai seguito questo percorso.

Oggi, penso che la risposta "ufficiale" sia ancora no, e mentre la retrolamba sembra ancora una buona strada da percorrere, c'è un'altra opzione per coloro che sono disposti a percorrere un percorso un po '"non ufficiale", vale a dire Kotlin.

Oggi Kotlin ha raggiunto la 1.0.0. Per coloro che non hanno familiarità con Kotlin, maggiori informazioni sono disponibili sul loro sito Web disponibile qui:

https://kotlinlang.org

o guarda questo video utube di un discorso tenuto da Jake Wharton

https://www.youtube.com/watch?v=A2LukgT2mKc


4

Ultime notizie:

Google annuncia che con Android N e Android Studio 2.1+, la piattaforma supporterà Java 8. È stata rilasciata anche la versione stabile di studio 2.1.

Finalmente possiamo usare le espressioni lambda. Non è più necessario filtrare l'elenco per il ciclo. Horeeey.


4

Aggiungi questo config build.gradle e sincronizza il gradle:

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

1
Questo è il modo corretto di aggiungere supporto per progetti Java 8 per Android. Il rovescio della medaglia è che la corsa istantanea attualmente non funziona quando il jack è abilitato.
Ionut Negru,

Non avere pieno supporto.
Ahmad Aghazadeh,

2

Google ha appena annunciato che Java 8 sarà supportato nativamente da Android e che la toolchain di Jack si deprecherà:

Abbiamo deciso di aggiungere il supporto per le funzionalità del linguaggio Java 8 direttamente nel set di strumenti javac e dx corrente e di deprecare la toolchain di Jack. Con questa nuova direzione, gli strumenti e i plug-in esistenti dipendenti dal formato file della classe Java dovrebbero continuare a funzionare. Andando avanti, le funzionalità del linguaggio Java 8 saranno supportate in modo nativo dal sistema di build Android. Puntiamo a lanciarlo come parte di Android Studio nelle prossime settimane e volevamo condividere questa decisione in anticipo con voi.

Maggiori informazioni qui: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

Sì. Presto utilizzeremo Java 8!

Abbiamo deciso di aggiungere il supporto per le funzionalità del linguaggio Java 8 direttamente nel set di strumenti javac e dx corrente e di deprecare la toolchain di Jack. Con questa nuova direzione, gli strumenti e i plug-in esistenti dipendenti dal formato file della classe Java dovrebbero continuare a funzionare. Andando avanti, le funzionalità del linguaggio Java 8 saranno supportate in modo nativo dal sistema di build Android. Puntiamo a lanciarlo come parte di Android Studio nelle prossime settimane e volevamo condividere questa decisione in anticipo con voi.

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

aggiunta questa riga nel modulo livello build build

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

Ho scritto una risposta simile a una domanda simile su Stack Overflow, ma qui fa parte di quella risposta.

Android Studio 2.1:

La nuova versione di Android Studio (2.1) supporta le funzionalità di Java 8. Ecco un estratto dal post sul blogspot degli sviluppatori Android :

... Android Studio 2.1 include il supporto per il nuovo compilatore Jack e il supporto per Java 8 .

...

Per utilizzare le funzionalità del linguaggio Java 8 durante lo sviluppo con N Developer Preview, è necessario utilizzare il compilatore Jack. La Creazione guidata nuovo progetto [File → Nuovo → Progetto] genera le configurazioni corrette per i progetti destinati al N.


Prima di Android Studio 2.1:

Android non supporta ancora Java 1.8 (supporta solo fino a 1.7), quindi non è possibile utilizzare le funzionalità Java 8 come lambdas.

Questa risposta fornisce maggiori dettagli sulla compatibilità di Android Studio ; afferma:

Se vuoi usare lambdas, una delle principali funzionalità di Java 8 in Android, puoi usare gradle-retrolamba

Se vuoi saperne di più sull'uso gradle-retrolambda, questa risposta fornisce molti dettagli su come farlo .


Ciao Farbod! Sto usando AndroidStudio 2.2.2 My "SDK Location"(questo è su un Mac FWIW) dice solo "/Users/me/Library/Android/sdk" Sto usando Java8 - come usare Java8 ?? Grazie!
Fattie,

1

Ho pensato di pubblicare una risposta aggiornata per coloro che cercavano qualcosa di un po 'più attuale.

Attualmente Android e Android Studio supportano un sottoinsieme di funzionalità Java 8. Secondo la documentazione di Android presente sul loro sito Web , Google afferma:

Il supporto per le funzionalità del linguaggio Java 8 richiede un nuovo compilatore chiamato Jack. Jack è supportato solo su Android Studio 2.1 e versioni successive. Pertanto, se desideri utilizzare le funzionalità del linguaggio Java 8, devi utilizzare Android Studio 2.1 per creare la tua app.

Se hai già installato Android Studio, assicurati di eseguire l'aggiornamento alla versione più recente facendo clic su Guida> Controlla aggiornamenti (su Mac, Android Studio> Verifica aggiornamenti). Se non hai già installato l'IDE sulla tua stazione di lavoro, scarica Android Studio qui.

Funzioni e API del linguaggio Java 8 supportate

Android non supporta tutte le funzionalità del linguaggio Java 8. Tuttavia, le seguenti funzionalità sono disponibili durante lo sviluppo di app destinate ad Android 7.0 (livello API 24):

  • Metodi di interfaccia predefiniti e statici Espressioni lambda (disponibile anche a livello di API 23 e precedenti)
  • Annotazioni ripetibili
  • Riferimenti ai metodi (disponibile anche a livello di API 23 e precedenti)
  • Tipo di annotazioni (disponibile anche a livello di API 23 e inferiore)

Inoltre, sono disponibili anche le seguenti API in linguaggio Java 8:

API di riflessione e relative al linguaggio:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • API java.lang.reflect.Method.isDefault () e Reflection associate ad annotazioni ripetibili, come AnnotatedElement.getAnnotationsByType (Class)

API di utilità:

  • java.util.function
  • java.util.stream

Per utilizzare le nuove funzionalità del linguaggio Java 8, è necessario utilizzare anche la toolchain Jack . Questa nuova toolchain per Android compila le fonti del linguaggio Java in bytecode DEX leggibile da Android, ha il suo formato di libreria .jack e fornisce la maggior parte delle funzionalità della toolchain come parte di un singolo strumento: riconfezionamento, riduzione, offuscamento e multidex.

Ecco un confronto tra le due toolchain utilizzate per creare file DEX per Android:

Legacy javac toolchain:
    javac (.java  .class)  dx (.class  .dex)
    New Jack toolchain:
    Jack (.java  .jack  .dex)

1

Ho fatto questa domanda oltre 3 anni fa e ovviamente le risposte sono cambiate nel corso degli anni. Come molti sopra hanno già risposto, già da qualche tempo, la risposta è diventata . Non ho mai aggiornato la risposta accettata perché era la risposta corretta al momento. (Non sono sicuro di quale sia la politica Stack Overflow su questo)

Volevo solo aggiungere un'altra risposta per coloro che cercano ancora questo argomento. A partire dal 17/05/2017 Google ha anche annunciato che Kotlin è anche una lingua ufficiale per lo sviluppo di Android.

Non ho trovato un comunicato stampa ufficiale, ma ho guardato alcuni dei video I / O di Google in cui è stato annunciato. Ecco un link a un post sul blog del team Kotlin sull'annuncio.


1

L'aggiunta di quanto segue ha risolto il problema per me (Android Studio 2.3.2):

build.gradle (progetto)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle (modulo: app)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}


1

AGGIORNAMENTO 2019/10/28

Android Studio 4.0 risolve questo problema .

Il compilatore D8 esegue il patching di un backport delle API native di Java 8 nel tuo APK al momento della compilazione e la tua app utilizzerà quel codice, anziché le API native, in fase di esecuzione. Il processo si chiama desugaring .


0

Tutte le soluzioni di cui sopra non sembrano funzionare nel 2019 con l'ultimo Android Studio 3.4+ .

Ho trovato una soluzione perfetta e aggiornata per migrare o aggiornare il tuo progetto Android a Java 8 .

Soluzione: fare clic su File -> Struttura del progetto -> Moduli -> scheda Proprietà .

Modifica la compatibilità di origine e la compatibilità di destinazione su 1.8 (Java 8)

inserisci qui la descrizione dell'immagine



-1

Il modo più semplice per aggiungere il supporto Java 8

 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }

Aggiungilo nel tuo file build.gradle.


risposta duplicato, di bassa qualità
JanPl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.