Android Studio kullanıyorsanız , Java 7 dili herhangi bir yama olmadan otomatik olarak etkinleştirilmelidir. Kaynakla deneme API Düzeyi 19+ gerektirir ve NIO 2.0 öğeleri eksik.
Java 7 özelliklerini kullanamıyorsanız, @Nuno'nun , bilgisayarınızı nasıl düzenleyeceğiniz konusundaki cevabına bakın build.gradle
.
Aşağıdakiler sadece tarihsel ilgi içindir.
Java 7'nin küçük bir kısmı kesinlikle Android ile kullanılabilir (not: Sadece 4.1'de test ettim).
Her şeyden önce, Eclipse'nin ADT'sini kullanamazsınız çünkü sadece Java derleyici 1.5 ve 1.6'nın uyumlu olması zor kodlanmıştır . ADT'yi yeniden derleyebilirsiniz, ancak tüm Android'i birlikte yeniden derlemenin dışında bunu yapmanın basit bir yolu olmadığını düşünüyorum.
Ama Eclipse kullanmanıza gerek yok. Örneğin, Android Studio 0.3.2 , IntelliJ IDEA CE ve diğer javac tabanlı IDE'ler Android'e derlemeyi destekler ve aşağıdakilerle Java 8'e kadar uyumluluğu ayarlayabilirsiniz:
- Dosya → Proje Yapısı → Modüller → (2. bölmeden modülü seçin) → Dil seviyesi → ("7.0 - Diamonds, ARM, çoklu yakalama vb." Seçeneğini seçin)
Bu sadece Java 7 dil özelliklerine izin verir ve iyileştirmenin yarısı kütüphaneden geldiğinden herhangi bir şeyden neredeyse hiç yararlanamazsınız. Kullanabileceğiniz özellikler kütüphaneye bağlı olmayan özelliklerdir:
- Elmas operatörü (
<>
)
- Dize anahtarı
- Çoklu yakalama (
catch (Exc1 | Exc2 e)
)
- Sayı değişmezinde alt çizgi (
1_234_567
)
- İkili değişmez değerler (
0b1110111
)
Ve bu özellikler henüz kullanılamaz :
try
-With-kaynaklar deyimi - bu var olmayan bir arayüz "java.lang.AutoCloseable" gerektirdiğinden (bu 4.4+ herkes tarafından kullanılabilir)
- @SafeVarargs ek açıklaması - "java.lang.SafeVarargs" mevcut olmadığından
... "yet" :) Android kütüphanesi 1.6 için hedef alsa da, Android kaynağı AutoCloseable gibi arayüzler içeriyor ve Closeable gibi geleneksel arayüzler AutoCloseable'den miras alıyor (SafeVarargs gerçekten eksik). Varlığını yansıtarak doğrulayabiliriz. Javadoc, @hide
"android.jar" öğesinin bunları içermemesine neden olan etikete sahip olmasından dolayı gizlidir .
Zaten mevcut soru var Android SDK'yı mevcut gizli ve dahili API'lerle nasıl oluşturabilirim? bu yöntemleri nasıl geri alabileceğimiz konusunda. Mevcut Platformun mevcut "android.jar" referansını özelleştirilmiş olanımızla değiştirmeniz yeterlidir , ardından Java 7 API'lerinin çoğu kullanılabilir hale gelir (prosedür Eclipse'deki ile benzerdir. Proje Yapısı → SDK'ları kontrol edin.)
Otomatik Kapanma özelliğine ek olarak, (yalnızca) aşağıdaki Java 7 kitaplığı özellikleri de gösterilir:
- ConcurrentModificationException, LinkageError ve AssertionError içindeki istisna zincirleme kurucuları
- Temel öğeler için statik .compare () yöntemleri: Boolean.compare (), Byte.compare (), Short.compare (), Character.compare (), Integer.compare (), Long.compare ().
- Para Birimi : .getAvailableCurrencies (), .getDisplayName () (ancak .getNumericCode () olmadan )
- BitSet : .previousSetBit (), .previousClearBit (), .valueOf (), .toLongArray (), .toByteArray ()
- Koleksiyonlar : .emptyEnumeration (), .emptyIterator (), .emptyListIterator ()
- AutoCloseable
- Throwable : .addSuppressed (), .getSuppressed () ve 4 değişkenli yapıcı
- Karakter : .compare (), .isSurrogate (), .getName (), .highSurrogate (), .lowSurrogate (), .isBmpCodePoint () (ancak .isAlphabetic () ve .isIdeographic () olmadan )
- Sistem: .lineSeparator () (belgesiz?)
- java.lang.reflect.Modifier : .classModifiers (), .constructorModifiers (), .fieldModifiers (), .interfaceModifiers (), .methodModifiers ()
- NetworkInterface : .getIndex (), .getByIndex ()
- InetSocketAddress : .getHostString ()
- InetAddress : .getLoopbackAddress ()
- Kaydedici : .getGlobal ()
- ConcurrentLinkedDeque
- AbstractQueuedSynchronizer : .hasQueuedPredecessors ()
- DeflaterOutputStream : "syncFlush" olan 3 kurucu.
- Deflater : .NO_FLUSH, .SYNC_FLUSH, .FULL_FLUSH, .deflate () 4 argümanla
Temelde hepsi bu. Özellikle, NIO 2.0 mevcut değildir ve Arrays.asList hala @SafeVarargs değildir.