Jika Anda menggunakan Android Studio , Jawa 7 bahasa harus diaktifkan secara otomatis tanpa patch. Try-with-resource membutuhkan API Level 19+, dan NIO 2.0 tidak ada.
Jika Anda tidak dapat menggunakan fitur Java 7, lihat jawaban @Nuno tentang cara mengedit build.gradle
.
Berikut ini hanya untuk kepentingan historis.
Sebagian kecil Java 7 tentu dapat digunakan dengan Android (catatan: Saya baru menguji pada 4.1).
Pertama-tama, Anda tidak bisa menggunakan ADT Eclipse karena hard-coded yang hanya memenuhi kompiler Java 1.5 dan 1.6. Anda dapat mengkompilasi ulang ADT tetapi saya menemukan tidak ada cara sederhana untuk melakukannya selain mengkompilasi ulang seluruh Android bersama-sama.
Tetapi Anda tidak perlu menggunakan Eclipse. Misalnya, Android Studio 0.3.2 , IntelliJ IDEA CE dan IDE berbasis javac lainnya mendukung kompilasi ke Android dan Anda dapat mengatur kepatuhan bahkan hingga Java 8 dengan:
- File → Struktur Proyek → Modul → (pilih modul pada panel ke-2) → Level bahasa → (pilih "7.0 - Berlian, ARM, multi-tangkapan, dll.")
Ini hanya memungkinkan fitur bahasa Java 7 , dan Anda hampir tidak dapat mengambil manfaat dari apa pun karena setengah dari perbaikan juga berasal dari perpustakaan. Fitur yang dapat Anda gunakan adalah yang tidak bergantung pada perpustakaan:
- Operator berlian (
<>
)
- Switch string
- Multiple-catch (
catch (Exc1 | Exc2 e)
)
- Garis bawah dalam literal angka (
1_234_567
)
- Literary biner (
0b1110111
)
Dan fitur-fitur ini tidak dapat digunakan lagi :
- Pernyataan
try
-dengan-sumber daya - karena memerlukan antarmuka yang tidak ada "java.lang.AutoCloseable" (ini dapat digunakan untuk umum di 4.4+)
- Anotasi @SafeVarargs - karena "java.lang.SafeVarargs" tidak ada
... "yet" :) Ternyata, meskipun perpustakaan Android menargetkan untuk 1.6, sumber Android memang mengandung antarmuka seperti AutoCloseable dan antarmuka tradisional seperti Closeable memang mewarisi dari AutoCloseable (SafeVarargs benar-benar hilang, meskipun). Kami bisa mengkonfirmasi keberadaannya melalui refleksi. Mereka disembunyikan hanya karena Javadoc memiliki@hide
tag, yang menyebabkan "android.jar" tidak memasukkan mereka.
Sudah ada pertanyaan yang sudah ada Bagaimana cara membangun Android SDK dengan API internal dan tersembunyi tersedia? tentang cara mendapatkan metode tersebut kembali. Anda hanya perlu mengganti referensi "android.jar" yang ada dari Platform saat ini dengan yang kami sesuaikan, maka banyak Java 7 API akan tersedia (prosedurnya mirip dengan yang ada di Eclipse. Periksa Struktur Proyek → SDK.)
Selain AutoCloseable, (hanya) fitur Java 7 library berikut juga terungkap:
- Konstruktor perangkaian pengecualian di ConcurrentModificationException, LinkageError, dan AssertionError
- Metode .compare () statis untuk primitif: Boolean.compare (), Byte.compare (), Short.compare (), Character.compare (), Integer.compare (), Integer.compare (), Long.compare ().
- Mata uang : .getAvailableCurrency (), .getDisplayName () (tetapi tanpa .getNumericCode ())
- BitSet : .previousSetBit (), .previousClearBit (), .valueOf (), .toLongArray (), .toByteArray ()
- Koleksi : .emptyEnumeration (), .emptyIterator (), .emptyListIterator ()
- Dapat Ditutup Otomatis
- Throwable : .addSuppressed (), .getSuppressed (), dan konstruktor 4-argumen
- Karakter : .compare (), .isSurrogate (), .getName (), .highSurrogate (), .lowSurrogate (), .isBmpCodePoint () (tetapi tanpa .isAlphabetic () dan .isIdeographic ())
- Sistem: .lineSeparator () (tidak berdokumen?)
- java.lang.reflect.Modifier : .classModifiers (), .constructorModifiers (), .fieldModifiers (), .interfaceModifiers (), .methodModifiers ()
- NetworkInterface : .getIndex (), .getByIndex ()
- InetSocketAddress : .getHostString ()
- InetAddress : .getLoopbackAddress ()
- Logger : .getGlobal ()
- ConcurrentLinkedDeque
- AbstractQueuedSynchronizer : .hasQueuedPredecessors ()
- DeflaterOutputStream : 3 konstruktor dengan "syncFlush".
- Deflater : .NO_FLUSH, .SYNC_FLUSH, .FULL_FLUSH, .deflate () dengan 4 argumen
Itu pada dasarnya semua. Secara khusus, NIO 2.0 tidak ada, dan Arrays.asList masih belum @SafeVarargs.