Apakah mungkin menggunakan Java 8 untuk pengembangan Android?

609

Mencari di web, tidak jelas apakah Java 8 didukung untuk pengembangan Android atau tidak.

Sebelum saya mengunduh / mengatur Java 8, dapatkah seseorang mengarahkan saya ke dokumentasi "resmi" yang mengatakan bahwa Java 8 adalah atau tidak didukung untuk pengembangan Android.

nPn
sumber
21
Saya tidak tahu tentang pernyataan resmi tetapi saya punya Java 8 (edit: JDK 8) yang berfungsi dengan baik dengan Android SDK untuk saya. Windows 8.1 64 bit di sini.
Hoang Huynh
2
Telah ada diskusi di pos ini. Bagaimana versi Java Android berhubungan dengan versi Java SE?
Aboalnaga
2
@ HooHuynh Anda dapat menggunakan JDK 6 atau lebih untuk pengembangan Android. Namun, kompilasi ini mendukung Java versi 6 (dan 7 untuk KitKat). Saya pikir apa yang dimaksud OP juga untuk versi java (bukan JDK)
waqaslam
13
Java 8 secara resmi didukung di Android N. android-developers.blogspot.com/2016/03/…
Jay
2
mungkin segera: developer.android.com/preview/j8-jack.html
Ray Tayek

Jawaban:

189

java 8

Android mendukung semua fitur bahasa Java 7 dan sejumlah fitur bahasa Java 8 yang bervariasi menurut versi platform.

Untuk memeriksa fitur mana dari java 8 yang didukung

Gunakan fitur bahasa Java 8

Kami telah memutuskan untuk menambahkan dukungan untuk fitur-fitur bahasa Java 8 langsung ke javac dan dx set alat saat ini, dan mencabut Jack toolchain. Dengan arahan baru ini, alat dan plugin yang ada bergantung pada format file kelas Java harus terus bekerja. Ke depan, fitur bahasa Java 8 akan didukung secara native oleh sistem build Android. Kami bermaksud meluncurkan ini sebagai bagian dari Android Studio dalam beberapa minggu mendatang, dan kami ingin berbagi keputusan ini lebih awal dengan Anda.

Dukungan Fitur Masa Depan Java 8 Bahasa di Android

Pengguna Eclipse:

Untuk pengembang lama yang lebih suka Eclipse, google berhenti mendukung alat Pengembang Android Eclipse

jika Anda menginstal Java 8 JDK, maka cobalah, jika ada masalah yang muncul cobalah untuk mengatur compiler sebagai 1.6 di Eclipse dari menu window → PreferencesJavaCompiler . Java 7 juga akan berfungsi:

Preferensi Eclipse -> Java -> Compiler

Diperlukan Java 7 atau lebih tinggi jika Anda menargetkan Android 5.0 dan lebih tinggi.

instal beberapa JDK dan coba.

Eng Samer T
sumber
2
Apakah Java 8 mengubah cara bytecode bekerja? Jika tidak, sebaiknya menggunakan versi Java apa saja, secara teoritis, selama dikompilasi.
Ben Leggiero
6
pertanyaan yang benar adalah: bagaimana jika Anda menggunakan fitur baru di java 8 tidak ada di java 7 untuk membangun aplikasi android, apakah boleh? untuk berada di sisi aman ikuti instruksi resmi.
Eng. Samer T
12
@ BenC.R.Leggiero tidak ada bytecode baru di Java 8, tetapi makna dan struktur instruksi diubah stackoverflow.com/questions/28228450/… stackoverflow.com/questions/16143684/…
phuclv
17
Harap jangan memposting "Perbarui N" dalam jawaban Anda. Tulis ulang untuk mendapatkan informasi terbaru. Jika tidak, SO dalam beberapa tahun akan sama sulitnya untuk mendapatkan informasi seperti halnya forum yang digantikannya.
Aleksandr Dubinsky
1
Jawaban harus diperbarui. Java 8 will didukung pada Android Studio 3.0 dan Gradle Plugin 3.0.
Юрій Мазуревич
350

UPDATE 2017/11/04 - Android Studio 3.0 sekarang memiliki dukungan asli untuk Java 8. gradle-retrolambda sekarang tidak lagi diperlukan. Lihat https://developer.android.com/studio/write/java8-support.html

Tautan di atas juga termasuk instruksi migrasi jika Anda menggunakan gradle-retrolambda. Jawaban asli di bawah ini:


Android tidak mendukung Java 8. Ini hanya mendukung hingga Java 7 (jika Anda memiliki kitkat) dan tetap saja itu tidak diaktifkan, hanya gula sintaks yang baru.

Jika Anda ingin menggunakan lambdas, salah satu fitur utama Java 8 di Android, Anda dapat menggunakan gradle-retrolamba . Ini adalah dependensi build gradle yang mengintegrasikan retrolambda, alat yang mengubah Java 8 bytecode kembali ke Java 6/7. Pada dasarnya, jika Anda mengatur kompiler di Android Studio untuk mengkompilasi bytecode Java 8, sehingga memungkinkan lambdas, itu akan mengubahnya kembali menjadi bytecode Java 6/7 yang kemudian dikonversi menjadi bytecode dalvik. Ini peretasan jika Anda ingin mencoba beberapa fitur JDK 8 di Android sebagai pengganti dukungan resmi.

ekcr1
sumber
13
Memang agak sulit untuk membuatnya bekerja, tetapi begitu saya benar-benar mengikuti instruksi yang tepat, itu bekerja dengan baik. Catatan untuk pengguna Eclipse: Eclipse tidak bekerja dengan baik dengan ini, saya sarankan bermigrasi ke Android Studio (saya akan merindukan Eclipse, tapi itulah caranya sekarang!)
Simon Forsberg
2
Nitpick: klausa multi-tangkapan dari Java 7 TIDAK didukung oleh Android.
csvan
11
Multi-catch didukung, hanya fitur JDK7 yang tidak didukung oleh Android adalah try-with-resources
Matthieu Harlé
12
Java 7 bekerja dengan semua versi Android. Satu pengecualian: try-with-resourceshanya berfungsi sejak Kitkat.
Dmitry Zaytsev
2
@Simon André Forsberg (hati-hati: plug shameless!) - Untuk tidak mendukung Java 8 stream API, Anda dapat menggunakan perpustakaan saya di sourceforge.net/projects/streamsupport - secara eksplisit membahas dukungan untuk Android.
Stefan Zobel
99

Anda memang dapat menggunakan gradle-retrolambadependensi gradle build untuk menggunakan Java 8 untuk Pengembangan Android.

Di bawah ini adalah panduan lengkap yang baru-baru ini saya ikuti untuk menjalankan ekspresi lambda untuk pengembangan Android. Sumber asli panduan ini disebutkan di bagian akhir.

Dalam panduan ini, metode untuk menghadirkan beberapa fitur Java 8 ke dalam Alat Pengembangan Android akan diperlihatkan, secara khusus ditujukan untuk Eclipse IDE. Namun, langkah-langkah yang akan dijelaskan dalam panduan ini mungkin juga disesuaikan dengan lingkungan pengembangan pemberontakan baru Google, Android Studio. Ini didasarkan pada edisi komunitas IDE Idea IntelliJ populer oleh JetBrains dan baru-baru ini ditingkatkan ke versi 'beta' oleh Google pada awal Juli 2014, sedikit sebelum panduan ini ditulis. Eclipse akan tetap sebagai lingkungan pengembangan yang menonjol, setidaknya untuk sementara waktu, dan mengingat fakta bahwa sebagian besar proyek Android telah dikembangkan menggunakan Eclipse, sebuah metode untuk menghadirkan fitur Java 8 baru seperti ekspresi lambda ke dalam ADT tampaknya cukup berguna bagi pengembang.

Pengembangan Android didasarkan pada implementasi Java kustom yang disebut Apache Harmony Project yang dihentikan pada tahun 2011. Sintaks Java yang paling umum digunakan dalam Pengembangan Android adalah Java 6 (v1.6) dan Java 7 (v1.7) juga didukung sebagian pada edisi KitKat (Android 4.4. +). Oleh karena itu, fitur Java 8 seperti ekspresi lambda tidak dapat digunakan secara langsung dalam Pengembangan Aplikasi Android tanpa menerapkan beberapa penyesuaian pada alat pengembangan. Untungnya, konstruksi ini pada dasarnya adalah beberapa peningkatan 'gula sintaksis' yang memberikan kekurangan pada pengembang hal-hal seperti 'kelas anonim' dan mereka dapat diterjemahkan ke dalam kelas Java 6 atau Java 7.

Pendekatan terbaru untuk menerjemahkan kode sumber Java 8 ke dalam versi Java yang lebih rendah disebut RetroLambda . Pustaka ini membuat pengembang menjalankan kode Java 8 dengan ekspresi lambda di Java 7 atau bahkan lebih rendah. Sayangnya, fitur Java 8 selain ekspresi lambda tidak didukung oleh RetroLambda untuk saat ini tetapi konsep ekspresi lambda adalah lompatan terbesar pada platform Java 8 dan ini merupakan alat yang hebat untuk pengembang Android.

Detail tentang perpustakaan ini dapat ditemukan di halaman GitHub-nya:

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

Juga, plugin Gradle untuk RetroLambda yang dibuat oleh pengembang lain memungkinkan pembangunan berbasis Gradle diimplementasikan di Java atau Android Projects. Namun, pengembang hanya menyebutkan tentang mengintegrasikan plugin ini ke lingkungan Android Studio. Detail dapat ditemukan di halaman GitHub-nya:

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

Menggunakan infrastruktur ini dalam lingkungan pengembangan berbasis Eclipse tidak dapat didekati secara langsung tetapi dapat dilakukan dan akan ditunjukkan di seluruh panduan ini.

Persiapan

Panduan ini mengasumsikan bahwa pembaca memiliki pemahaman dasar tentang Pengembangan Android dan didasarkan pada ADT versi 22.6.2 karena versi ADT terbaru 23.0.2 tampaknya memiliki masalah seperti pembuatan folder layout. Detail tentang masalah ini dapat ditemukan di bawah tautan berikut:

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

Langkah-langkah dalam panduan ini akan diberikan untuk mesin pengembangan Windows 8.1, 64-bit tetapi mereka dapat dengan mudah diadaptasi ke platform lain. Sistem build baru Gradleakan digunakan untuk proses build / clean dan prosedur instalasinya juga akan disediakan. Juga, keduanya JDK 8dan JDK 7harus hidup berdampingan pada mesin pengembangan. Langkah-langkah yang diberikan di bawah ini harus diikuti untuk menginstalnya:

  • Pergi ke halaman pratinjau akses awal JDK 8 http://jdk8.java.net
  • Unduh JDK 8u20 dan instal. Instalasi JRE 8 tidak perlu dan dapat dilewati
  • Pergi ke JDK 7 halaman rilis stabil terbaru http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • Unduh JDK 7u65 dan instal. Instalasi JRE 7 sekali lagi tidak perlu dan dapat dilewati
  • Tambahkan folder rumah JDK 8 dan folder JDK 8 binke %PATH%variabel Anda
  • Buat variabel lingkungan baru JAVA_HOMEdengan nilai path folder home JDK 8
  • Buat variabel lingkungan baru JAVA8_HOMElagi dengan nilai path folder home JDK 8
  • Buat variabel lingkungan baru JAVA7_HOMEdengan nilai path folder home JDK 7
  • Buka jendela terminal dan jalankan java -versionperintah dan verifikasi bahwa Java 8 sudah aktif
  • Jalankan javac -versionperintah di jendela yang sama dan verifikasi bahwa JDK 8 Java compiler juga aktif dan berjalan

Sekarang, ADT-22.6.2 harus diunduh dari tautan berikut:

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

  • Unduh ADT dan unzip isinya ke folder, misalnya D:\adt
  • Tentukan variabel lingkungan baru yang disebut ANDROID_HOMEdengan nilai lintasan folder instalasi ADT Anda, misalnyaD:\adt\sdk
  • Tambah Andoid SDK Platform Toolsdan Andoid SDK Toolsfolder, misalnya D:\adt\sdk\toolsdan D:\adt\sdk\platform-tools, untuk Anda %PATH%variabel
  • Buat pintasan ke Eclipse IDE jika Anda suka. Ini terletak di bawah folder instalasi ADT Anda, misD:\adt\eclipse
  • Jalankan Eclipse IDE dan buat ruang kerja, mis D:\adt\workspace
  • Klik pada Android SDK Managertombol yang terletak di bilah alat
  • Pilih Android SDK Build tools Rev. 19.1dan Android Support Libraryhanya. Hapus pilihan semua yang lain dan instal kedua paket ini.

Jika semuanya berjalan dengan baik, ADT akan aktif dan berjalan.

Instalasi alat-alat berikut ini juga sangat dianjurkan:

  • Dukungan Eclipse Kepler Java 8: Itu membuat Eclipse mengenali ekstensi sintaksis Java 8 yang baru dan membuat Anda menghilangkan gangguan red dotspada editor kode Java Anda. Mungkin diinstal melalui Help -> Install New Softwaredi Eclipse. Masukkan http://download.eclipse.org/eclipse/updates/4.3-P-builds/ ke dalam Work withbidang dan lanjutkan untuk menginstalnya.

  • Nodeclipse / Enide Gradle: Ini terutama digunakan untuk menyoroti kata kunci bahasa Groovy. Groovy digunakan sebagai skrip pembuatan DSL untuk Gradle. Plugin ini dapat diinstal melalui Eclipse Marketplace. Namun, Eclipse dalam ADT-22.6.2 tidak datang bersama Eclipse Marketplace Client. Oleh karena itu, Anda harus menginstal terlebih dahulu Eclipse Marketplace Clientdengan Install New Softwarealat di Eclipse. Masukkan http //: download.eclipse.org/mpc/kepler/ ke dalam Work withisian dan lanjutkan untuk menginstalnya. Setelah menginstal Eclipse Marketplace Client, Anda dapat mencari Nodeclipse/Enide Gradledi Eclipse Marketplace Clientdan menginstalnya.

  • Genymotion Virtual Device: Ini adalah pengganti besar dari default Android Virtual Deviceyang datang bersama dengan ADT. AVD menjengkelkan dan terus menabrak tanpa alasan. Genymotion membuat Anda mempersiapkan CyanogenModgambar menggunakan Android VD yang dijalankan oleh Oracle VirtualBox . Lisensi pengguna tunggal adalah gratis dan dapat diunduh dari http://www.genymotion.com . Hanya login yang diperlukan dan itu juga dapat diintegrasikan ke dalam Eclipse. Detail dapat ditemukan di bawah:

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

Di bawah ini adalah tangkapan layar perangkat virtual CyanogenMod berbasis Android 4.3,

masukkan deskripsi gambar di sini

Ini mungkin dianggap sebagai perangkat Android yang sepenuhnya berjalan di komputer pribadi berbasis x86 atau x64. Untuk menggunakan layanan Google seperti Google PlayStorepada perangkat virtual ini, gappsgambar untuk versi Android yang digunakan harus di-flash ke perangkat. gappsGambar yang tepat untuk perangkat dapat diunduh dari situs web CyanogenMod:

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

Instalasi Gradle bersifat opsional karena juga disediakan oleh Android SDK sendiri tetapi instalasi terpisahnya sangat disarankan. Pemasangannya mungkin dilakukan dengan mengikuti langkah-langkah ini:

  • Pergi ke situs web Gradle: http://www.gradle.org/

  • Klik Downloads

  • Di bawah Previous Releasespilih versi 1.10 dan unduh gradle-1.10-all.zip atau gradle-1.10-bin.zip
  • Buka zip isinya ke folder, mis D:\adt\gradle
  • Tentukan variabel lingkungan baru yang disebut GRADLE_HOMEdengan nilai path folder instalasi Gradle Anda, misD:\adt\gradle
  • Tambahkan folder biner Gradle Anda, misalnya D:\adt\gradle\bin, ke %PATH%variabel Anda
  • Buka jendela terminal dan jalankan gradle -vperintah dan verifikasi bahwa itu berjalan dan berjalan Jika Anda telah berhasil mencapai titik ini maka itu berarti Anda siap untuk membuat Aplikasi Android pertama Anda menggunakan fitur Java 8.

Aplikasi Demo

Aplikasi sederhana akan dibuat untuk menunjukkan penggunaan alat yang dijelaskan di bagian sebelumnya. Anda cukup mengikuti langkah-langkah yang diberikan di bawah ini untuk mendapatkan wawasan tentang penggunaan ekspresi lambda di Alat Pengembang Android:

  • Jalankan Eclipse IDE dan buat Aplikasi Android baru dengan memilih File -> New -> Other -> Android -> Android Application Project
  • Isi formulir yang muncul seperti yang ditunjukkan di bawah ini:

masukkan deskripsi gambar di sini

  • Cukup klik Nexttombol pada formulir berikut dan klik Finishtombol pada yang terakhir. Tunggu sampai ADT selesai memuat proyek
  • Klik kanan pada proyek dan pilih New -> Folderdan beri namabuilders
  • Klik kanan pada gen (Generated Java Files)folder dan hapus. Gradle akan menghasilkan file yang sama untuk kami segera dan kami akan menambahkannya ke s build path. Thefolder proyek gen` yang dibuat oleh pembuat Ant default tidak lagi diperlukan dan artefak di bawah folder itu akan usang
  • Buat file batch berikut di bawah buildersfolder:

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Isi file batch ini sebagai berikut:

gradle_build.cmd:

masukkan deskripsi gambar di sini

gradle_post_build.cmd:

masukkan deskripsi gambar di sini

gradle_clean.cmd:

masukkan deskripsi gambar di sini

  • Batalkan Project -> Build Automaticallypilihan menu
  • Klik kanan pada proyek dan pilih Properties -> Buildersdan batalkan-pilih semua pembangun default yang disediakan oleh ADT
  • Klik Newtombol di jendela yang sama dan pilih Programdan klikOK
  • Jendela konfigurasi pembangun baru akan muncul. Isi tab-nya sebagai berikut:

Main Tab Konfigurasi Pembuat yang baru

masukkan deskripsi gambar di sini

Refresh Tab Konfigurasi Pembuat yang baru

masukkan deskripsi gambar di sini

Environment Tab Konfigurasi Pembuat yang baru

masukkan deskripsi gambar di sini

Build Options Tab Konfigurasi Pembuat yang baru

masukkan deskripsi gambar di sini

  • Buat pembangun kedua disebut Gradle_Post_Buildyang menggunakan gradle_post_build.cmdsebagai programnya. Semua pengaturan lain dari pembuat ini harus persis sama dengan pembuat yang dibuat sebelumnya. Builder ini akan bertanggung jawab untuk menyalin artefak yang dibuat oleh proses build ke binfolder.
  • Buat pembangun ketiga yang disebut Gradle_Cleaneryang menggunakan gradle_clean.cmdsebagai programnya. Hanya Run the builderpengaturan di tab terakhir yang harus ditetapkan sebagai During a Clean. Semua pengaturan lain dari pembuat ini harus persis sama dengan pembuat pertama. Pembangun ini akan bertanggung jawab untuk membersihkan artefak yang dibuat oleh proses pembuatan seperti namanya.

Pembangun Baru HelloLambdaProyek

masukkan deskripsi gambar di sini

  • Klik kanan pada proyek dan pilih Export
  • Pilih Android -> Generate Gradle Build Filesdan klikNext
  • Pilih proyek di jendela berikutnya dan klik Finish
  • Buka folder root proyek Anda dan hapus file gradlewdan gradlew.bat. Hapus juga gradlefolder
  • Beralih kembali ke Eclipse dan pilih Project -> Cleanopsi menu. Isi formulir yang muncul sebagai berikut:

Clean Project Jendela

masukkan deskripsi gambar di sini

  • Klik OKdan tunggu sampai proses pembersihan selesai
  • Tambahkan snipet kode Java yang diberikan di bawah ini tepat setelah panggilan setContentViewberfungsi di MainActivitykelas Anda :

masukkan deskripsi gambar di sini

  • Ubah awal build.gradlefile hingga sourceCompatibilitybagian sebagai berikut:

masukkan deskripsi gambar di sini

  • Klik kanan pada proyek dan pilih Properties -> Java Compileropsi dan atur semua level kepatuhan ke Java 8. Ini akan membuat Eclipse mengenali konstruksi Java 8 baru seperti ekspresi lambda.
  • Klik Nodi jendela notifikasi
  • Klik kanan pada proyek dan pilih Build project. Eclipse akan mulai membangun proyek.

Proses Pembuatan masukkan deskripsi gambar di sini

  • Klik kanan pada proyek dan pergi ke Properties -> Java Build Path. Tambahkan folder berikut ke jalur build (juga ditunjukkan pada gambar di bawah):

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

masukkan deskripsi gambar di sini

Eclipse sekarang akan dapat mengenali R.javadan buildConfig.javafile dan itu tidak akan menampilkan red dotskesalahan yang menunjukkan terkait dengan file sumber daya proyek.

  • Buat yang baru Run Configurationuntuk platform target Android Anda dengan mengklik kanan pada proyek dan kemudian memilih Run As -> Run Configurations. Misalnya, aplikasi demo ini terlihat seperti yang ditunjukkan di bawah ini di Genymotion VD:

Aplikasi HelloLambda

masukkan deskripsi gambar di sini

Anda dapat mengamati di LogCatjendela bahwa potongan kode dengan ekspresi lambda sederhana berfungsi dengan baik

masukkan deskripsi gambar di sini

Sumber: Menggunakan Java 8 Lambda Expressions di Alat Pengembang Android

Sufiyan Ghori
sumber
Tetapi apakah Anda dapat men-debug kode ini menggunakan debugger Android? Tumpukan / nomor baris tidak akan kompatibel adalah dugaan saya. Sepertinya ada kelemahan besar untuk berkembang dengan Java 8 di Android.
Zombi
2
@ Zombies Ya Anda masih dapat men-debugnya. Semuanya bekerja dengan baik.
Korniltsev Anatoly
42

Ikuti tautan ini untuk pembaruan baru. Gunakan fitur bahasa Java 8

Jawaban Lama

Sampai dengan Android N rilis rilis Android mendukung fitur terbatas Java 8 lihat Fitur Bahasa Java 8

Untuk mulai menggunakan fitur-fitur ini, Anda perlu mengunduh dan mengatur Android Studio 2.1 dan Android N Preview SDK, yang mencakup Jack toolchain yang diperlukan dan Plugin Android yang diperbarui untuk Gradle. Jika Anda belum menginstal Android N Preview SDK, lihat Set Up Mengembangkan untuk Android N .

Fitur dan API Bahasa Java 8 yang Didukung

Android saat ini tidak mendukung semua fitur bahasa Java 8. Namun, fitur berikut sekarang tersedia saat mengembangkan aplikasi yang menargetkan Android N Preview:

Metode antarmuka standar dan statis

Ekspresi Lambda (juga tersedia di API level 23 dan lebih rendah)

Anotasi berulang

Referensi Metode (juga tersedia di API level 23 dan lebih rendah)

Ada beberapa fitur Java 8 tambahan yang didukung Android, Anda dapat melihat detail lengkap dari Java 8 Language Features

Memperbarui

Catatan: Android N mendasarkan penerapan ekspresi lambda pada kelas anonim. Pendekatan ini memungkinkan mereka untuk kompatibel dan dieksekusi di versi Android sebelumnya. Untuk menguji ekspresi lambda pada versi sebelumnya, ingat untuk membuka file build.gradle Anda, dan atur compileSdkVersion dan targetSdkVersion ke 23 atau lebih rendah.

Perbarui 2

Sekarang rilis stabil Android Studio 3.0 mendukung Java 8 libraries dan fitur bahasa Java 8 (tanpa kompiler Jack).


sumber
Saya tidak mengerti sesuatu. Apakah ada persyaratan minSdkVersion?
WindRider
Saya pikir hanya ekspresi lambda yang kompatibel ke belakang, fitur Java 8 lainnya hanya akan berfungsi pada N (atau versi yang akan datang). Saya belum menguji ini tetapi ini adalah apa yang saya mengerti dari Android docs. Jadi, untuk Java 8 fitur minSdkVersion adalah N, selain ekspresi lambda
Jadi ... beberapa tahun lagi sampai N menjadi pemimpin di dasbor. :(
WindRider
Sayangnya ya. atau sampai Android entah bagaimana memberikan kompatibilitas ke belakang seperti lambda
1
@ WindRider, Anda dapat menggunakan minSdkVersion 15 ke atas. Saat ini saya menggunakan minSdkVersion 17 di proyek Android saya dengan Lambdas dan semuanya berfungsi.
YYamil
22

Ya, Android Mendukung Java 8 Sekarang (24.1.17)

Sekarang mungkin

Tetapi Anda harus menjalankan perangkat rom di java 1.8 dan mengaktifkan "jackOptions" untuk menjalankannya. Jack adalah nama untuk kompiler Android baru yang menjalankan Java 8

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

tambahkan baris ini ke build_gradle

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

Java 8 tampaknya menjadi mesin java menjalankan Android studio 2.0, Tapi itu masih tidak menerima sintaks java 8 setelah saya periksa, dan Anda tidak dapat memilih kompiler dari android studio sekarang. Namun, Anda dapat menggunakan plugin scala jika Anda memerlukan mekanisme pemrograman fungsional di klien android Anda.

masukkan deskripsi gambar di sini

sivi
sumber
1
Scala akan sangat berat untuk
dipaket
Silakan merujuk solusi ini untuk android studio 2.0 yang diperbarui karena mereka telah melakukan pembaruan untuk opsi konfigurasi terbatas.
Gaurav Sharma
19

Android menggunakan Java yang bercabang dari Java 6.

Pada Android SDK versi 19, Anda dapat menggunakan fitur Java 7 dengan melakukan ini . Belum ada dukungan penuh untuk Java 8 (belum).

chaqke
sumber
1
Anda adalah penyelamat. Apakah Anda tahu jika ada juga sesuatu yang akan mengimplementasikan coba-dengan-sumber daya dengan cara yang sama?
Galet
@gal belum ada cara, tapi saya berani bertaruh di Google menambahkannya di beberapa titik di masa depan. Informasi tambahan, lihat: stackoverflow.com/questions/16921337/…
chaqke
16

Native Java 8 tiba di android! Akhirnya!

hapus plugin Retrolambda dan blok retrolambda dari file build.gradle setiap modul:

Untuk menonaktifkan Jack dan beralih ke toolchain default, cukup hapus blok jackOptions dari file build.gradle modul Anda

Untuk mulai menggunakan fitur bahasa Java 8 yang didukung, perbarui plugin Android ke 3.0.0 (atau lebih tinggi)

Dimulai dengan Android Studio 3.0, fitur Java 8 sekarang didukung oleh android:

  • Ekspresi Lambda
  • Referensi metode
  • Ketik anotasi (saat ini ketikkan informasi anotasi tidak tersedia saat runtime tetapi hanya pada waktu kompilasi);
  • Mengulangi anotasi
  • Metode antarmuka default dan statis (pada API level 24 atau lebih tinggi, tidak ada dukungan run instan tho);

Juga dari min API level 24, Java 8 API berikut ini tersedia:

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

Tambahkan baris ini ke build.gradle modul aplikasi Anda untuk memberi tahu proyek tingkat bahasa:

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

Nonaktifkan Dukungan untuk Fitur Bahasa Java 8 dengan menambahkan berikut ini ke file gradle.properties Anda :

android.enableDesugar=false

Kamu sudah selesai! Anda sekarang dapat menggunakan java8 asli!

Dhaval Jivani
sumber
14

Android RESMI mendukung Java 8 pada Android N.

Pengumuman fitur di sini , pengumuman bahasa Java 8 adalah:

Peningkatan dukungan bahasa Java 8 - Kami sangat senang untuk menghadirkan fitur-fitur bahasa Java 8 ke Android. Dengan kompiler Jack Android, Anda sekarang dapat menggunakan banyak fitur bahasa Java 8 yang populer, termasuk lambdas dan banyak lagi, pada versi Android sejauh Gingerbread. Fitur-fitur baru membantu mengurangi kode boilerplate. Misalnya, lambdas dapat menggantikan kelas batin anonim saat memberikan pendengar acara. Beberapa fitur bahasa Java 8 - seperti metode default dan statis, stream, dan antarmuka fungsional - juga sekarang tersedia di N dan di atas. Dengan Jack, kami menantikan untuk melacak bahasa Jawa lebih dekat dengan tetap menjaga kompatibilitas ke belakang.

Jay
sumber
Ini masih sangat buggy pada tanggal ini, misalnya Instant Run tidak bekerja dengan lambdas: jika Anda mengubah beberapa kode di dalam fungsi lambda Anda, itu tidak akan mengambil perubahan.
adriendenat
12

Kita Dapat Menggunakan Java 8 menggunakan:

  1. Di build.gradle (Project: myProject) tambahkan berikut ini

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. Di build.gradle (Module: myModule) tambahkan berikut ini

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
Vishal Raj
sumber
1
Apa yang berbeda dari jawaban pertama yang merekomendasikan retro lambda?
Maarten Bodewes
2
@MaartenBodewes Sepertinya itu menunjukkan bahwa itu telah menjadi jauh lebih sederhana daripada jawaban yang diterima. Lihat medium.com/android-news/…
TechSpellBound
Jangan gunakan itu. Plugin buggy
Akshay Mukadam
11

UPDATE 2020/01/17

Android Studio 4.0 mencakup dukungan untuk menggunakan sejumlah API bahasa Java 8, dengan menggunakan teknik yang disebut desugaring, tanpa memerlukan tingkat API minimum untuk aplikasi Anda:
https://developer.android.com/studio/preview/features#j8-desugar

Set API berikut didukung dalam rilis ini:

  • Aliran berurutan ( java.util.stream)
  • Subset dari java.time
  • java.util.function
  • Tambahan terbaru untuk java.util.{Map,Collection,Comparator}
  • Opsional ( java.util.Optional, java.util.OptionalIntdan java.util.OptionalDouble) dan beberapa kelas baru lainnya bermanfaat dengan API di atas
  • Beberapa penambahan java.util.concurrent.atomic(metode baru aktif AtomicInteger, AtomicLongdan AtomicReference)
  • ConcurrentHashMap (dengan perbaikan bug untuk Android 5.0)

Untuk mendukung API bahasa ini, D8 ​​mengkompilasi file DEX pustaka terpisah yang berisi implementasi API yang hilang dan memasukkannya ke dalam aplikasi Anda. Proses penghapusan menulis ulang kode aplikasi Anda sebagai gantinya menggunakan perpustakaan ini saat runtime.

Untuk mengaktifkan dukungan untuk API bahasa ini, sertakan yang berikut dalam build.gradlefile modul Anda :

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

POST ASLI DARI 2017

Android Studio 3.0 mulai menyediakan dukungan bawaan untuk beberapa fitur bahasa Java 8, yaitu:

  • Ekspresi Lambda
  • Referensi metode
  • Ketik Anotasi (informasi tersedia pada waktu kompilasi, tetapi tidak pada saat runtime)
  • Mengulangi anotasi
  • Metode antarmuka standar dan statis

Juga mulai dari API level 24, Java 8 API berikut tersedia:

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

Selain itu, try-with-resourcesdukungan diperluas ke semua level Android API.

Lebih banyak fitur Java 8 dijanjikan akan ditambahkan di masa mendatang.

Untuk mulai menggunakan fitur bahasa Java 8 yang didukung, perbarui plugin Android ke 3.0.0-alpha1 (atau lebih tinggi) dan tambahkan berikut ini ke file build.gradle modul Anda:

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

Untuk detail lebih lanjut, kunjungi:
https://developer.android.com/studio/write/java8-support.html

Idola
sumber
Yang tidak saya dapatkan adalah, apa hubungannya android studio dengan dukungan java8 (bukankah intellij pernah melakukannya sebelumnya) ?! Apakah itu berarti bahwa jika saya menggunakan gradle di terminal untuk mengkompilasi proyek itu tidak akan dikompilasi ?!
cesarferreira
1
@cesarferreira Anda perlu memperbarui plugin Android ke versi terbaru (yang saat ini 2.4.0-alpha6). Silakan periksa blok kutipan di jawabannya.
Idolon
Menambahkannya ke modul (bukan aplikasi) yang sedang saya kerjakan adalah hasilnya. Menambahkan ke modul aplikasi tidak membantu.
Surekha
6

Jalan mudah

Anda dapat mengaktifkan dukungan java 1.8 untuk proyek android.

  • Buka Struktur Proyek

    • Baik dengan menekan Ctrl + Shift + Alt + S

    • Atau File > Project Structure

  • Perbarui Kompatibilitas Sumber dan Kompatibilitas Target ke 1.8 dalam dialog Struktur Proyek seperti yang ditunjukkan (klik File> Struktur Proyek).

gambar

Atau Anda bisa menggunakan gradle

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

Sinkronkan proyek. Dan itu dia!

Catatan: Dukungan Java 1.8 dapat diaktifkan untuk Android Studio 3.0.0 atau lebih tinggi. Lihat Dokumentasi untuk bacaan lebih lanjut.

Khemraj
sumber
Solusi ini bekerja untuk saya: stackoverflow.com/a/55467237/4698320
Däñish Shärmà
5

Ketika saya menanyakan pertanyaan ini hampir 2 tahun yang lalu, jawabannya benar-benar "resmi" tidak, tetapi seperti yang ditunjukkan oleh jawaban ekcr1 Anda bisa mendapatkan salah satu fitur yang paling dinanti-nanti (lambdas) untuk bekerja jika Anda menggunakan retrolamba. Pada saat itu saya masih menggunakan eclipse, karena Android Studio berada dalam mode "preview", jadi saya tidak pernah mengejar jalur ini.

Hari ini, saya pikir jawaban "resmi" masih belum ada, dan sementara retrolamba sepertinya merupakan cara yang baik untuk pergi, ada pilihan lain bagi mereka yang mau turun dengan rute yang agak "tidak resmi", yaitu Kotlin.

Hari ini Kotlin mencapai 1.0.0. Bagi mereka yang tidak terbiasa dengan Kotlin, info lebih lanjut dapat ditemukan di situs web mereka yang ditemukan di sini:

https://kotlinlang.org

atau tonton video utube ini dari ceramah yang diberikan oleh Jake Wharton

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

nPn
sumber
4

Berita terbaru:

Google mengumumkan bahwa dengan Android N dan Android Studio 2.1+, platform akan mendukung Java 8. Juga versi stabil dari studio 2.1 dirilis.

Akhirnya kita bisa menggunakan ekspresi lambda. Tidak ada lagi filter daftar untuk loop. Horeeey.

asozcan
sumber
4

Tambahkan build.gradle konfigurasi ini dan sinkronkan gradle:

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

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}
Ahmad Aghazadeh
sumber
1
Ini adalah cara yang benar untuk menambahkan dukungan untuk Java 8 untuk proyek Android. Kelemahannya adalah lari instan tidak berjalan saat jack diaktifkan.
Ionut Negru
Jangan dukungan penuh.
Ahmad Aghazadeh
2

Google baru saja mengumumkan bahwa Java 8 secara native akan didukung oleh Android dan bahwa toolchain Jack akan usang:

Kami telah memutuskan untuk menambahkan dukungan untuk fitur-fitur bahasa Java 8 langsung ke javac dan dx set alat saat ini, dan mencabut Jack toolchain. Dengan arahan baru ini, alat dan plugin yang ada bergantung pada format file kelas Java harus terus bekerja. Ke depan, fitur bahasa Java 8 akan didukung secara native oleh sistem build Android. Kami bermaksud meluncurkan ini sebagai bagian dari Android Studio dalam beberapa minggu mendatang, dan kami ingin berbagi keputusan ini lebih awal dengan Anda.

Info lebih lanjut di sini: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

stamanuel
sumber
2

Iya. Kami akan segera menggunakan Java 8!

Kami telah memutuskan untuk menambahkan dukungan untuk fitur-fitur bahasa Java 8 langsung ke javac dan dx set alat saat ini, dan mencabut Jack toolchain. Dengan arahan baru ini, alat dan plugin yang ada bergantung pada format file kelas Java harus terus bekerja. Ke depan, fitur bahasa Java 8 akan didukung secara native oleh sistem build Android. Kami bermaksud meluncurkan ini sebagai bagian dari Android Studio dalam beberapa minggu mendatang, dan kami ingin berbagi keputusan ini lebih awal dengan Anda.

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

Ajay S
sumber
2

tambahkan baris ini ke modul lvl build gradel

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

yuvrajsinh
sumber
1

Saya menulis jawaban yang mirip dengan pertanyaan serupa tentang Stack Overflow, tetapi di sini ada bagian dari jawaban itu.

Android Studio 2.1:

Versi baru Android Studio (2.1) memiliki dukungan untuk fitur Java 8. Berikut adalah kutipan dari posting blogspot Pengembang Android :

... Rilis Android Studio 2.1 mencakup dukungan untuk kompiler Jack baru dan dukungan untuk Java 8 .

...

Untuk menggunakan fitur bahasa Java 8 saat mengembangkan dengan Pratinjau Pengembang N, Anda perlu menggunakan kompiler Jack. Wizard Proyek Baru [File → Baru → Proyek] menghasilkan konfigurasi yang benar untuk proyek yang menargetkan N.


Sebelum ke Android Studio 2.1:

Android belum mendukung Java 1.8 (hanya mendukung hingga 1.7), jadi Anda tidak dapat menggunakan fitur Java 8 seperti lambdas.

Jawaban ini memberikan detail lebih lanjut tentang kompatibilitas Android Studio ; itu menyatakan:

Jika Anda ingin menggunakan lambdas, salah satu fitur utama Java 8 di Android, Anda dapat menggunakan gradle-retrolamba

Jika Anda ingin tahu lebih banyak tentang cara menggunakan gradle-retrolambda, jawaban ini memberikan banyak detail untuk melakukannya .

Farbod Salamat-Zadeh
sumber
Hai Farbod! Saya menggunakan AndroidStudio 2.2.2 My "SDK Location"(ini pada Mac FWIW) hanya mengatakan "/Users/me/Library/Android/sdk" Apakah saya menggunakan Java8 - bagaimana cara menggunakan Java8 ?? Terima kasih!
Fattie
1

Saya pikir saya akan memposting jawaban yang diperbarui untuk mereka yang mencari sesuatu yang lebih terkini.

Saat ini Android dan Android Studio mendukung subset fitur Java 8. Menurut dokumentasi Android yang terdapat di situs web mereka , Google mengatakan:

Dukungan untuk fitur bahasa Java 8 memerlukan kompiler baru bernama Jack. Jack hanya didukung di Android Studio 2.1 dan lebih tinggi. Jadi jika Anda ingin menggunakan fitur bahasa Java 8, Anda perlu menggunakan Android Studio 2.1 untuk membangun aplikasi Anda.

Jika Anda sudah menginstal Android Studio, pastikan Anda memperbarui ke versi terbaru dengan mengklik Bantuan> Periksa Pembaruan (pada Mac, Android Studio> Periksa Pembaruan). Jika Anda belum menginstal IDE di workstation Anda, unduh Android Studio di sini.

Fitur dan API Bahasa Java 8 yang Didukung

Android tidak mendukung semua fitur bahasa Java 8. Namun, fitur berikut tersedia saat mengembangkan aplikasi yang menargetkan Android 7.0 (API level 24):

  • Metode antarmuka default dan statis ekspresi Lambda (juga tersedia di API level 23 dan lebih rendah)
  • Anotasi berulang
  • Referensi Metode (juga tersedia di API level 23 dan lebih rendah)
  • Ketik Anotasi (juga tersedia di API level 23 dan lebih rendah)

Selain itu, API bahasa Java 8 berikut juga tersedia:

API terkait refleksi dan bahasa:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault () dan Reflection API yang terkait dengan anotasi berulang, seperti AnnotatedElement.getAnnotationsByType (Class)

API Utilitas:

  • fungsi java.util.
  • java.util.stream

Untuk menggunakan fitur bahasa Java 8 yang baru, Anda juga perlu menggunakan Jack toolchain . Toolchain Android baru ini mengkompilasi sumber bahasa Jawa ke dalam bytecode DEX yang dapat dibaca Android, memiliki format .jack library sendiri, dan menyediakan sebagian besar fitur toolchain sebagai bagian dari alat tunggal: pengemasan ulang, penyusutan, kebingungan dan multidex.

Berikut ini adalah perbandingan dari dua alat yang digunakan untuk membuat file Android DEX:

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

Saya menanyakan pertanyaan ini lebih dari 3 tahun yang lalu dan jelas jawabannya telah berubah selama bertahun-tahun. Seperti yang telah dijawab oleh banyak orang di atas, pada suatu waktu, jawabannya menjadi Ya . Saya belum pernah memperbarui jawaban yang diterima karena itu adalah jawaban yang benar pada saat itu. (Saya tidak yakin apa kebijakan Stack Overflow itu)

Saya hanya ingin menambahkan jawaban lain untuk mereka yang masih mencari topik ini. Pada 5/17/2017 Google juga mengumumkan bahwa Kotlin juga merupakan bahasa resmi untuk pengembangan Android.

Saya belum menemukan siaran pers resmi, tetapi saya menonton beberapa video Google I / O di mana ia diumumkan. Berikut ini tautan ke posting blog oleh tim Kotlin pada pengumuman tersebut.

nPn
sumber
1

Menambahkan hal berikut ini memperbaiki masalah saya (Android studio 2.3.2):

build.gradle (Proyek)

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

build.gradle (Modul: aplikasi)

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
    ...
}
Richard
sumber
1

UPDATE 2019/10/28

Android Studio 4.0 menyelesaikan masalah ini .

Kompiler D8 menambal backport API asli Java 8 ke dalam APK Anda pada waktu kompilasi dan aplikasi Anda akan menggunakan kode itu, alih-alih API asli, saat runtime. Proses ini disebut desugaring .

styler1972
sumber
0

Semua solusi di atas tampaknya tidak berfungsi pada tahun 2019 dengan Android Studio 3.4+ terbaru .

Saya menemukan solusi yang sempurna dan terkini untuk bermigrasi atau meningkatkan Proyek Android Anda ke Java 8 .

Solusi: Klik pada File -> Struktur Proyek -> Modul -> tab Properties .

Ubah Kompatibilitas Sumber dan Kompatibilitas Target ke 1.8 (Java 8)

masukkan deskripsi gambar di sini

zackygaurav
sumber
-1

Cara termudah untuk menambahkan dukungan Java 8

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

Cukup tambahkan di file build.gradle Anda.

Bora Savkar
sumber
jawaban duplikat, kualitas rendah
JanPl