Android geliştirme için Java 8 kullanmak mümkün müdür?


609

Web'de arama yapıldığında, Java 8'in Android geliştirme için desteklenip desteklenmediği açık değildir.

Java 8'i indirmeden / kurmadan önce, bazıları Java 8'in Android geliştirme için desteklendiğini veya desteklenmediğini söyleyen herhangi bir "resmi" belgeye işaret edebilir.


21
Resmi açıklama hakkında bilmiyorum ama Java SD (edit: JDK 8) Android SDK ile benim için iyi çalışıyor. Windows 8.1 64 bit burada.
Hoang Huynh


2
@HoangHuynh, Android geliştirme için JDK 6 veya üstünü kullanabilirsiniz. Ancak, derleme Java sürüm 6'yı (ve KitKat durumunda 7) destekler. Demek OP java sürümü (değil JDK) için de ne olduğunu düşünüyorum
waqaslam

13
Java 8, Android N'de RESMİ olarak desteklenmektedir. Android-developers.blogspot.com/2016/03/…
Jay

Yanıtlar:


189

java 8

Android, tüm Java 7 dil özelliklerini ve platform sürümüne göre değişen Java 8 dil özelliklerinin bir alt kümesini destekler.

Java 8'in hangi özelliklerinin desteklendiğini kontrol etmek için

Java 8 dil özelliklerini kullanma

Java 8 dil özellikleri için doğrudan geçerli javac ve dx araç setine destek eklemeye ve Jack araç zincirini kullanımdan kaldırmaya karar verdik. Bu yeni yön ile, Java sınıfı dosya biçimine bağlı mevcut araçlar ve eklentiler çalışmaya devam etmelidir. İleride, Java 8 dil özellikleri Android oluşturma sistemi tarafından yerel olarak desteklenecektir. Bunu önümüzdeki haftalarda Android Studio'nun bir parçası olarak başlatmayı hedefliyoruz ve bu kararı sizinle erken paylaşmak istedik.

Android'de Java 8 Dil Özelliği Desteğinin Geleceği

Eclipse Kullanıcıları:

Eclipse'yi tercih eden eski geliştiriciler için google , Eclipse Android Geliştirici araçlarını destekliyor

Java 8 JDK yüklediyseniz, bir deneyin, herhangi bir sorun ortaya çıkarsa, pencere menüsünden → TercihlerJavaDerleyici'den Eclipse'de derleyiciyi 1.6 olarak ayarlamayı deneyin . Java 7 de çalışır:

Tutulma Tercihleri ​​-> Java -> Derleyici

Android 5.0 ve sonraki sürümlerini hedefliyorsanız Java 7 veya üstü gerekir.

birden fazla JDK yükleyin ve deneyin.


2
Java 8 bayt kodunun çalışma şeklini değiştirdi mi? Değilse, derlediği sürece teorik olarak herhangi bir Java sürümünü kullanmak iyi olacaktır.
Ben Leggiero

6
doğru soru: java 8 yeni özellikler kullanırsanız android app oluşturmak için java 7 mevcut değil, tamam mı? güvenli tarafta olmak için resmi talimatları izleyin.
Müh. Samer T

12
@ BenC.R. Laggiero, Java 8'de yeni bir bayt kodu yok, ancak talimatların anlamları ve yapıları değiştirildi stackoverflow.com/questions/28228450/… stackoverflow.com/questions/16143684/…
phuclv

17
Lütfen cevabınıza "Güncelleme N" yazmayınız. Güncel bilgilere sahip olmak için yeniden yazın. Aksi takdirde, SO birkaç yıl içinde yerini aldığı forumlardan bilgi almak zor olacaktır.
Aleksandr Dubinsky

1
Yanıtın güncellenmesi gerekiyor. Java 8, Android Studio 3.0 ve Gradle Plugin 3.0'dan itibaren desteklenmektedir.
Юрій Мазуревич

350

GÜNCELLEME 2017/11/04 - Android Studio 3.0 artık Java 8 için yerel desteğe sahip gradle-retrolambda . Bkz. Https://developer.android.com/studio/write/java8-support.html

Yukarıdaki bağlantı, kullanıyorsanız taşıma talimatlarını da içerir gradle-retrolambda. Aşağıdaki orijinal cevap:


Android, Java 8'i desteklemez. Yalnızca Java 7'ye kadar (kitkatiniz varsa) destekler ve yine de invokinamik özelliği yoktur, sadece yeni sözdizimi şekeri.

Android'de Java 8'in en önemli özelliklerinden biri olan lambdas'ı kullanmak istiyorsanız, gradle-retrolamba kullanabilirsiniz . Java 8 bayt kodunu tekrar Java 6/7'ye dönüştüren bir araç olan retrolambda'yı entegre eden bir sınıf oluşturma bağımlılığıdır. Temel olarak, derleyiciyi Android 8'de Java 8 bayt kodunu derleyecek ve böylece lambdaslara izin verecek şekilde ayarlarsanız, onu Java 6/7 bayt koduna dönüştürür ve daha sonra dalvik bayt koduna dönüştürülür. Resmi destek yerine Android'de bazı JDK 8 özelliklerini denemek istiyorsanız bir hack'tir.


13
Çalıştırmak için biraz uğraştım, ama bir kez doğru talimatları izlediğimde iyi çalıştı. Eclipse kullanıcılarına not: Eclipse bununla iyi çalışmaz, Android Studio'ya geçmenizi öneririm (Eclipse'yi özleyeceğim, ancak şimdilik böyle olmalı!)
Simon Forsberg

2
Nitpick: Java 7'nin çoklu yakalama cümleleri Android tarafından DESTEKLENMEZ.
csvan

11
Çoklu yakalama desteklenir, yalnızca Android tarafından desteklenmeyen JDK7 özelliği kaynaklarla
denenir

12
Java 7, Android'in tüm sürümleriyle çalışır. Bir istisna: try-with-resourcessadece Kitkat'tan beri çalışır.
Dmitry Zaytsev

2
@Simon André Forsberg (dikkat: utanmaz fiş!) - Java 8 akış API'sını desteklememe konusunda, sourceforge.net/projects/streamsupport adresindeki kütüphanemi kullanabilirsiniz - Android desteğini açıkça ele alır.
Stefan Zobel

99

gradle-retrolambaAndroid Geliştirme için Java 8'i kullanmak için kademeli derleme bağımlılığını kullanabilirsiniz.

Aşağıda, Android geliştirme için lambda ifadelerini çalıştırmak için takip ettiğim eksiksiz bir kılavuz var. Bu kılavuzun orijinal kaynağının sonunda belirtilmiştir.

Bu kılavuzda, bazı Java 8 özelliklerini Android Geliştirme Araçları'na getirmek için bir yöntem gösterilecek, özellikle Eclipse IDE'yi hedefleyecek . Bununla birlikte, bu kılavuzda anlatılacak adımlar Google'ın yeni ayaklanma geliştirme ortamı Android Studio'ya da uyarlanabilir. JetBrains'in popüler IntelliJ Idea IDE'nin topluluk sürümüne dayanmaktadır ve yakın zamanda bu kılavuz yazılmadan biraz önce, 2014 yılının Temmuz ayında Google tarafından 'beta' sürümüne yükseltilmiştir. Eclipse en azından bir süre önde gelen geliştirme ortamı olarak kalacak ve çoğu Android projesinin Eclipse kullanılarak geliştirildiği göz önüne alındığında, lambda ifadeleri gibi yeni Java 8 özelliklerini ADT'ye getirmek için bir yöntem geliştiriciler için oldukça yararlı görünüyor.

Android Geliştirme, 2011 yılında sonlandırılan Apache Harmony Project adlı özel bir Java uygulamasına dayanmaktadır. Android Geliştirme'de en sık kullanılan Java sözdizimi Java 6 (v1.6) ve Java 7 (v1.7) de kısmen desteklenmektedir. KitKat sürümü (Android 4.4. +). Bu nedenle, lambda ifadeleri gibi Java 8 özellikleri, geliştirme araçlarına bazı değişiklikler uygulamadan doğrudan Android Uygulama Geliştirme'de kullanılamaz. Neyse ki, bu yapılar temel olarak geliştiricilere 'anonim sınıflar' gibi şeylerin eksikliklerini veren bazı 'sözdizimsel şeker' geliştirmeleridir ve Java 6 veya Java 7 sınıflarına çevrilebilirler.

Java 8 kaynak kodunu daha düşük Java sürümlerine çevirmek için yakın tarihli bir yaklaşıma RetroLambda denir . Bu kütüphane, geliştiricilerin Java 7 kodunu lambda ifadeleriyle Java 7 veya daha düşük bir sürümde çalıştırmasını sağlar. Ne yazık ki, lambda ifadeleri dışındaki Java 8 özellikleri şu anda RetroLambda tarafından desteklenmemektedir, ancak lambda ifadeleri kavramı Java 8 platformunda en büyük sıçramadır ve yine de Android geliştiricileri için harika bir araçtır.

Bu kütüphane hakkında ayrıntılar GitHub sayfasında bulunabilir:

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

Ayrıca, başka bir geliştirici tarafından oluşturulan RetroLambda için bir Gradle eklentisi, Gradle tabanlı yapıların Java veya Android Projelerinde uygulanmasına izin verir. Ancak, geliştirici yalnızca bu eklentiyi Android Studio ortamına entegre etmekten bahsediyor. Ayrıntılar GitHub sayfasında bulunabilir:

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

Bu altyapıların Eclipse tabanlı bir geliştirme ortamında kullanılması doğrudan ele alınamaz, ancak yapılabilir ve bu kılavuzda gösterilecektir.

Hazırlık

Bu kılavuz, okuyucunun Android Geliştirme hakkında temel bir anlayışa sahip olduğunu ve ADT sürüm 22.6.2'yi temel aldığını varsayar, çünkü yeni ADT sürüm 23.0.2'de düzen klasörü oluşturma gibi sorunlar var gibi görünüyor. Bu sorunla ilgili ayrıntılar aşağıdaki bağlantıda bulunabilir:

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

Bu kılavuzdaki adımlar Windows 8.1, 64 bit geliştirme makinesi için verilecektir , ancak diğer platformlara kolayca uyarlanabilirler. Yeni derleme sistemi Gradlederleme / temizleme işlemleri için kullanılacak ve kurulum prosedürü de sağlanacaktır. Ayrıca, hem JDK 8ve JDK 7geliştirme makinede birlikte gerekir. Bunları kurmak için aşağıdaki adımlar izlenmelidir:

  • JDK 8 erken erişim önizleme sayfasına gidin http://jdk8.java.net
  • JDK 8u20'yi indirin ve yükleyin. JRE 8 kurulumu gerekli değildir ve atlanabilir
  • JDK 7'nin son kararlı sürüm sayfasına gidin http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • JDK 7u65'i indirin ve yükleyin. JRE 7 kurulumu tekrar gerekli değildir ve atlanabilir
  • JDK 8 ana klasörünü ve JDK 8 binklasörünü%PATH% değişkeninize
  • JAVA_HOMEJDK 8 giriş klasörü yolunun değeriyle yeni bir ortam değişkeni oluşturma
  • JAVA8_HOMEJDK 8 giriş klasörü yolunun değeriyle yeniden yeni bir ortam değişkeni oluşturun
  • JAVA7_HOMEJDK 7 giriş klasörü yolunun değeriyle yeni bir ortam değişkeni oluşturma
  • Bir terminal penceresi açın ve java -versionkomutu çalıştırın ve Java 8'in çalışır durumda olduğunu doğrulayın
  • javac -versionKomutu aynı pencerede çalıştırın ve JDK 8 Java derleyicisinin de çalışır durumda olduğunu doğrulayın

Şimdi, ADT-22.6.2 aşağıdaki bağlantıdan indirilmelidir:

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

  • ADT'yi indirin ve içeriğini bir klasöre açın, ör. D:\adt
  • ANDROID_HOMEADT yükleme klasörünüzün yolunun değeri ile çağrılan yeni bir ortam değişkeni tanımlayın , örn.D:\adt\sdk
  • Senin ekleyin Andoid SDK Platform Toolsve Andoid SDK Toolsklasörler, örneğin D:\adt\sdk\toolsve D:\adt\sdk\platform-toolssizin için, %PATH%değişken
  • İsterseniz Eclipse IDE için bir kısayol oluşturun. ADT kurulum klasörünüzün altında bulunur, örn.D:\adt\eclipse
  • Eclipse IDE'yi çalıştırın ve bir çalışma alanı oluşturun, örn. D:\adt\workspace
  • Android SDK ManagerAraç çubuğunda bulunan düğmeyi tıklayın
  • Seçin Android SDK Build tools Rev. 19.1ve Android Support Librarysadece. Diğer her şeyin seçimini kaldırın ve bu iki paketi yükleyin.

Her şey yolunda giderse, ADT çalışır durumda olacaktır.

Aşağıdaki araçların montajı da şiddetle tavsiye edilir:

  • Eclipse Kepler Java 8 Desteği: Eclipse'in yeni Java 8 sözdizimi uzantılarını tanımasını sağlar ve red dotsJava kod düzenleyicinizde can sıkıcılardan kurtulmanızı sağlar . Help -> Install New SoftwareEclipse içine kurulabilir . Enter http://download.eclipse.org/eclipse/updates/4.3-P-builds/ içine Work withalan ve onu takmaya devam edin.

  • Nodeclipse / Enide Gradle: Çoğunlukla Groovy dil anahtar kelimelerini vurgulamak için kullanılır. Groovy, Gradle derlemesi için DSL komut dosyaları olarak kullanılır. Bu eklenti üzerinden kurulabilir Eclipse Marketplace. Bununla birlikte, ADT-22.6.2 içindeki Eclipse ile birlikte gelmez Eclipse Marketplace Client. Bu nedenle, öncelikle yüklemeniz gerekir Eclipse Marketplace Clientvasıtasıyla Install New SoftwareEclipse aracı. Work withAlana http //: download.eclipse.org/mpc/kepler/ girin ve yüklemeye devam edin. Yükledikten sonra Eclipse Marketplace Client, Nodeclipse/Enide Gradleiçinde arayabilir Eclipse Marketplace Clientve yükleyebilirsiniz.

  • Genymotion Sanal Cihaz: Android Virtual DeviceADT ile birlikte gelen varsayılanın yerini almıştır . AVD rahatsız edici derecede hantal ve sebepsiz yere çökmeye devam ediyor. Genymotion, Oracle VirtualBoxCyanogenMod tarafından yürütülen görüntüleri kullanarak Android VD'leri hazırlamanızı sağlar . Tek kullanıcı lisansı ücretsizdir ve http://www.genymotion.com adresinden indirilebilir . Sadece bir giriş gereklidir ve Eclipse'e entegre edilebilir. Detaylar şurada bulunabilir:

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

Aşağıda Android 4.3 tabanlı CyanogenMod sanal cihazının ekran görüntüsü,

resim açıklamasını buraya girin

X86 veya x64 tabanlı bir kişisel bilgisayarda çalışan tam kapsamlı bir Android cihaz olarak düşünülebilir. Google PlayStoreBu sanal cihazdaki gibi Google hizmetlerini kullanmak gappsiçin, kullandığı Android sürümü için bir görüntünün cihaza yanıp sönmesi gerekir. gappsCyanogenMod web sitesinden cihaz için uygun bir resim indirilebilir:

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

Gradle kurulumu isteğe bağlıdır, çünkü Android SDK tarafından da sağlanır, ancak ayrı kurulumu şiddetle tavsiye edilir. Kurulumu aşağıdaki adımlar izlenerek gerçekleştirilebilir:

  • Gradle web sitesine gidin: http://www.gradle.org/

  • Tıklayın Downloads

  • Altında Previous Releases1.10 sürümünü seçin ve gradle-1.10-all.zip veya gradle-1.10-bin.zip dosyasını indirin
  • İçeriğini bir klasöre açın, ör. D:\adt\gradle
  • GRADLE_HOMEGradle kurulum klasörünüzün yolunun değeri ile adlandırılan yeni bir ortam değişkeni tanımlayın , örn.D:\adt\gradle
  • Gradle ikili dosyalar klasörünüzü, örneğin değişkeninize D:\adt\gradle\binekleyin%PATH%
  • Bir terminal penceresi açın ve gradle -vkomutu çalıştırın ve çalıştığını ve çalıştığını doğrulayın Bu noktaya başarıyla geldiyseniz, Java 8 özelliklerini kullanarak ilk Android Uygulamanızı oluşturmaya hazır olduğunuz anlamına gelir.

Demo Uygulaması

Önceki bölümde açıklanan araçların kullanımını göstermek için basit bir uygulama oluşturulacaktır. Android Geliştirici Araçları'nda lambda ifadelerini kullanma hakkında bilgi edinmek için aşağıdaki adımları uygulamanız yeterlidir:

  • Eclipse IDE'yi çalıştırın ve seçerek yeni bir Android Uygulaması oluşturun File -> New -> Other -> Android -> Android Application Project
  • Aşağıda gösterilen formu doldurun:

resim açıklamasını buraya girin

  • Basitçe tıklayın NextAşağıdaki formları düğmesini tıklamanız Finishsonuncusu düğmeye. ADT projenin yüklenmesini bitirene kadar bekleyin
  • Projeye sağ tıklayın ve seçin New -> Folderve adlandırınbuilders
  • gen (Generated Java Files)Klasörü sağ tıklayın ve silin. Gradle yakında bizim için aynı dosyaları oluşturacak ve bunları s build path. Thevarsayılan Ant oluşturucu tarafından oluşturulan proje gen klasörüne ekleyeceğiz ve artık bu klasörün altındaki eserler eski olacak
  • buildersKlasörün altında aşağıdaki toplu iş dosyalarını oluşturun :

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Bu toplu iş dosyalarını aşağıdaki gibi doldurun:

gradle_build.cmd:

resim açıklamasını buraya girin

gradle_post_build.cmd:

resim açıklamasını buraya girin

gradle_clean.cmd:

resim açıklamasını buraya girin

  • Un-select Project -> Build Automaticallymenü seçeneği
  • Projeye sağ tıklayın ve Properties -> BuildersADT tarafından sağlanan tüm varsayılan oluşturucuları seçip seçimini kaldırın
  • NewAynı pencerede düğmesine tıklayın ProgramveOK
  • Yeni oluşturucu yapılandırma penceresi görünecektir. Sekmelerini aşağıdaki gibi doldurun:

Main Yeni Oluşturucu Yapılandırmasının Sekmesi

resim açıklamasını buraya girin

Refresh Yeni Oluşturucu Yapılandırmasının Sekmesi

resim açıklamasını buraya girin

Environment Yeni Oluşturucu Yapılandırmasının Sekmesi

resim açıklamasını buraya girin

Build Options Yeni Oluşturucu Yapılandırmasının Sekmesi

resim açıklamasını buraya girin

  • Programı olarak Gradle_Post_Buildkullanılan ikinci oluşturucuyu oluşturun gradle_post_build.cmd. Bu oluşturucunun diğer tüm ayarları, önceden oluşturulmuş oluşturucuyla tamamen aynı olmalıdır. Bu oluşturucu, oluşturma işlemi tarafından oluşturulan yapay nesnelerin binklasöre kopyalanmasından sorumlu olacaktır .
  • Programı olarak Gradle_Cleanerkullanan üçüncü oluşturucuyu oluşturun gradle_clean.cmd. Yalnızca Run the builderson sekmedeki ayarlar olarak ayarlanmalıdır During a Clean. Bu oluşturucunun diğer tüm ayarları, ilk oluşturucu ile tamamen aynı olmalıdır. Bu oluşturucu, adından da anlaşılacağı gibi, oluşturma işlemi tarafından oluşturulan yapay nesnelerin temizlenmesinden sorumlu olacaktır.

HelloLambdaProjenin Yeni Üreticileri

resim açıklamasını buraya girin

  • Projeye sağ tıklayın ve Export
  • Seçin Android -> Generate Gradle Build Filesve tıklayınNext
  • Bir sonraki pencerede projeyi seçin ve tıklayın Finish
  • Projenizin kök klasörüne gidin ve dosyaları silmek gradlewve gradlew.bat. Ayrıca gradleklasörü sil
  • Tutulmaya geri dönün ve Project -> Cleanmenü seçeneğini seçin . Aşağıdaki gibi görünen formu doldurun:

Clean Project pencere

resim açıklamasını buraya girin

  • Tıklayın OKve temizleme işlemi tamamlanana kadar bekleyin
  • Sınıfınızdaki setContentViewişlev çağrısından hemen sonra aşağıda verilen Java kod snippet'ini ekleyin MainActivity:

resim açıklamasını buraya girin

  • build.gradleDosyanın başlangıcını sourceCompatibilityaşağıdaki bölüme kadar değiştirin :

resim açıklamasını buraya girin

  • Projeye sağ tıklayın ve Properties -> Java Compilerseçeneği belirleyin ve tüm uyumluluk düzeylerini Java 8 olarak ayarlayın. Bu, Eclipse'in lambda ifadeleri gibi yeni Java 8 yapılarını tanımasını sağlar.
  • NoBildirim penceresini tıklayın
  • Projeye sağ tıklayın ve seçin Build project. Eclipse projeyi inşa etmeye başlayacak.

Derleme Süreci resim açıklamasını buraya girin

  • Projeye sağ tıklayın ve gidin Properties -> Java Build Path. Oluşturma yoluna aşağıdaki klasörleri ekleyin (aşağıdaki resimde de gösterilmiştir):

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

resim açıklamasını buraya girin

Eclipse artık tanıyabilecek R.javave dosyalayabilecek ve projenin kaynak dosyalarıyla ilgili hataları gösteren buildConfig.javaherhangi bir görüntüyü red dotsgöstermeyecektir.

  • Run ConfigurationProjeye sağ tıklayıp ardından öğesini seçerek Android hedef platformunuz için yeni bir tane oluşturun Run As -> Run Configurations. Örneğin, bu demo uygulaması Genymotion VD'de aşağıda gösterildiği gibidir:

HelloLambda Uygulaması

resim açıklamasını buraya girin

LogCatPencerede, basit bir lambda ifadesine sahip kod pasajının düzgün çalıştığını gözlemleyebilirsiniz.

resim açıklamasını buraya girin

Kaynak: Android Geliştirici Araçları'nda Java 8 Lambda İfadelerini Kullanma


Ancak bir Android hata ayıklayıcı kullanarak bu kodda hata ayıklayabilecek misiniz? Yığınlar / satır numaraları uyumlu olmaz sanırım. Android'de Java 8 ile geliştirmenin büyük bir dezavantajı gibi görünüyor.
Zombiler

2
@Zombies Evet, hala hata ayıklayabilirsiniz. Her şey yolunda gidiyor.
Korniltsev Anatoly

42

Yeni güncellemeler için bu bağlantıyı takip edin. Java 8 dil özelliklerini kullanma

Eski Cevap

İtibariyle Android N önizleme sürüm Android desteği sınırlı özellikleri Java 8 bakınız Java 8 Dil Özellikleri

Bu özellikleri kullanmaya başlamak için , gerekli Jack araç zincirini ve Gradle için güncellenmiş Android Eklentisini içeren Android Studio 2.1 ve Android N Preview SDK'yı indirmeniz ve ayarlamanız gerekir . Android N Önizleme SDK'sını henüz yüklemediyseniz Android N için Geliştirmeye Ayarlama konusuna bakın .

Desteklenen Java 8 Dil Özellikleri ve API'leri

Android şu anda tüm Java 8 dil özelliklerini desteklememektedir. Ancak, Android N Önizleme'yi hedefleyen uygulamalar geliştirirken aşağıdaki özellikler artık kullanılabilir:

Varsayılan ve statik arayüz yöntemleri

Lambda ifadeleri (API seviye 23 ve daha düşük sürümlerde de mevcuttur)

Tekrarlanabilir ek açıklamalar

Yöntem Referansları (API seviye 23 ve daha düşük sürümlerde de mevcuttur)

Android'in desteklediği bazı ek Java 8 özellikleri vardır, Java 8 Dil Özellikleri'nden tüm ayrıntıları görebilirsiniz

Güncelleme

Not: Android N, lambda ifadelerinin uygulanmasını anonim sınıflara dayandırır. Bu yaklaşım, Android'in önceki sürümlerinde geriye dönük olarak uyumlu ve yürütülebilir olmalarını sağlar. Önceki sürümlerde lambda ifadelerini test etmek için build.gradle dosyanıza gitmeyi ve compileSdkVersion ve targetSdkVersion değerini 23 veya daha düşük bir değere ayarlamayı unutmayın.

Güncelleme 2

Şimdi Android studio 3.0 kararlı sürümü Java 8 kütüphanelerini ve Java 8 dil özelliklerini (Jack derleyicisi olmadan) destekler.


Bir şey anlamadım. Üzerinde herhangi bir gereklilik var mı minSdkVersion?
WindRider

Sadece lambda ifadelerinin geriye dönük uyumlu olduğunu düşünüyorum, diğer Java 8 özellikleri sadece N (veya gelecekteki sürüm) üzerinde çalışacaktır. Bunu test etmedim, ancak Android belgelerinden anladığım bu. Yani, Java 8 özellikleri için minSdkVersion, lambda ifadesi dışında

Yani ... N kontrol panelinde lider oluncaya kadar birkaç yıl daha. :(
WindRider

Maalesef evet. veya Android bir şekilde lambda gibi geriye dönük uyumluluk sağlayana kadar

1
@WindRider, minSdkVersion 15 ve üstünü kullanabilirsiniz. Şu anda Lambdas ile Android projemde minSdkVersion 17 kullanıyorum ve her şey çalışıyor.
YYamil

22

Evet, Android Java 8'i Şimdi Destekliyor (24.1.17)

Şimdi mümkün

Ancak cihaz rom'ınızı java 1.8 üzerinde çalıştırmanız ve çalıştırmak için "jackOptions" ı etkinleştirmeniz gerekir. Jack, Java 8 çalıştıran yeni Android derleyicisinin adıdır

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

bu satırları build_gradle'a ekle

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

Java 8, Android studio 2.0'ın çalışan java motoru gibi görünüyor, ancak kontrol ettikten sonra hala java 8 sözdizimini kabul etmiyor ve şimdi android studio'dan bir derleyici seçemezsiniz. Ancak, android istemcinizde işlevsel programlama mekanizmasına ihtiyacınız varsa scala eklentisini kullanabilirsiniz.

resim açıklamasını buraya girin


1
Scala apk ile paketlemek çok ağır olurdu
TechSpellBound

Sınırlı yapılandırma seçeneklerinde güncelleme yaptıkları için lütfen güncellenmiş android studio 2.0 için bu çözüme bakın.
Gaurav Sharma

19

Android, Java 6'dan ayrılan bir Java kullanır.

Android SDK sürüm 19'dan itibaren, bunu yaparak Java 7 özelliklerini kullanabilirsiniz . Java 8 (henüz) için tam destek yok.


1
Sen bir hayat kurtarıcısın. Kaynaklarla denemeyi benzer şekilde uygulayacak bir şey olup olmadığını biliyor musunuz?
galets

@galets henüz bir yolu yok, ancak Google'a gelecekte bir noktada ekleyerek bahse girerim. Ek bilgi için bkz. Stackoverflow.com/questions/16921337/…
chaqke

16

Yerli Java 8 android geliyor! En sonunda!

Retrolambda eklentisini ve retrolambda bloğunu her modülün build.gradle dosyasından kaldırın:

Jack'i devre dışı bırakmak ve varsayılan araç zincirine geçmek için jackOptions bloğunu modülünüzün build.gradle dosyasından kaldırın

Desteklenen Java 8 dil özelliklerini kullanmaya başlamak için Android eklentisini 3.0.0 (veya üstü) olarak güncelleyin

Android Studio 3.0'dan başlayarak, Java 8 dil özellikleri artık android tarafından yerel olarak desteklenmektedir:

  • Lambda ifadeleri
  • Yöntem referansları
  • Tür ek açıklamaları (şu anda tür ek açıklama bilgileri çalışma zamanında değil, yalnızca derleme zamanında kullanılabilir);
  • Ek açıklamalar tekrarlanıyor
  • Varsayılan ve statik arayüz yöntemleri (API seviyesi 24 veya üzeri, anında çalıştırma desteği yok);

Ayrıca, minimum API düzeyi 24'ten aşağıdaki Java 8 API'si kullanılabilir:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (Sınıf)
  • java.lang.reflect.Method.isDefault ()

Projeyi dil seviyesi hakkında bilgilendirmek için bu satırları uygulama modülünüzün build.gradle dosyasına ekleyin:

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

Gradle.properties dosyanıza aşağıdakileri ekleyerek Java 8 Dil Özellikleri Desteği'ni devre dışı bırakın :

android.enableDesugar=false

Sen bittin! Artık yerli java8'i kullanabilirsiniz!


14

Android, Android N'den itibaren Java 8'i destekliyor.

Özellik duyuruları burada , Java 8 dil duyurusu:

Geliştirilmiş Java 8 dil desteği - Java 8 dil özelliklerini Android'e sunmaktan heyecan duyuyoruz. Android'in Jack derleyicisi ile artık Gingerbread kadar Android sürümlerinde lambdas ve daha fazlası dahil olmak üzere birçok popüler Java 8 dil özelliğini kullanabilirsiniz. Yeni özellikler, kaynatma plakası kodunun azaltılmasına yardımcı olur. Örneğin, olay dinleyicileri sağlarken lambdas anonim iç sınıfların yerini alabilir. Bazı Java 8 dil özellikleri - varsayılan ve statik yöntemler, akışlar ve işlevsel arabirimler gibi - artık N ve üstünde kullanılabilir. Jack ile geriye dönük uyumluluğu korurken Java dilini daha yakından izlemeyi dört gözle bekliyoruz.


Şu anda hala oldukça hatalıdır, örneğin Instant Run lambdas ile çalışmaz: lambda fonksiyonunuzun içindeki bir kodu değiştirirseniz, değişikliği almaz.
adriendenat

12

Java 8'i kullanarak şunları kullanabiliriz:

  1. Build.gradle (Project: myProject) aşağıdakileri ekleyin

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. In build.gradle (Modül: myModule) aşağıdakileri ekleyin

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

1
Retro lambda'yı tavsiye eden ilk cevaptan farkı nedir?
Maarten Bodewes

2
@MaartenBodewes Kabul edilen cevaptan çok daha basit hale geldiğine dikkat çekiyor. Bakınız medium.com/android-news/…
TechSpellBound

Kullanma. Eklenti adamcağız
Akshay Mukadam

11

GÜNCELLEME 2020/01/17

Android Studio 4.0 , desugaring denilen tekniği kullanarak, Java 8 dil API numarasını kullanarak için destek içerir olmadan uygulamanız için API düzeyi gerektiren:
https://developer.android.com/studio/preview/features#j8-desugar

Bu sürümde aşağıdaki API grupları desteklenmektedir:

  • Sıralı akışlar ( java.util.stream)
  • Altkümesi java.time
  • java.util.function
  • Son eklenenler java.util.{Map,Collection,Comparator}
  • Seçenekler ( java.util.Optional, java.util.OptionalIntvejava.util.OptionalDouble yukarıdaki API'larla yararlı) ve diğer bazı yeni sınıflar
  • Bazı eklemeler java.util.concurrent.atomic(yeni kullanılan yöntem AtomicInteger, AtomicLongve AtomicReference)
  • ConcurrentHashMap (Android 5.0 için hata düzeltmeleriyle birlikte)

Bu dil API'lerini desteklemek için D8, eksik API'lerin bir uygulamasını içeren ve uygulamanıza dahil eden ayrı bir kütüphane DEX dosyasını derler. Desugaring işlemi, çalışma zamanında bu kütüphaneyi kullanmak için uygulamanızın kodunu yeniden yazar.

Bu dil API'leri için desteği etkinleştirmek üzere modülünüzün build.gradledosyasına aşağıdakileri ekleyin :

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

2017'DEN ORİJİNAL POST

Android Studio 3.0 , Java 8 dil özelliklerinden bazıları için yerleşik destek sağlamaya başladı:

  • Lambda ifadeleri
  • Yöntem referansları
  • Tür Ek Açıklamaları (bilgiler derleme zamanında kullanılabilir, ancak çalışma zamanında kullanılamaz)
  • Ek açıklamalar tekrarlanıyor
  • Varsayılan ve statik arayüz yöntemleri

Ayrıca API düzey 24'ten başlayarak aşağıdaki Java 8 API'leri kullanılabilir:

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

Bunun yanı sıra, try-with-resourcesdestek tüm Android API düzeylerine genişletildi.

Gelecekte daha fazla Java 8 özelliğinin ekleneceğine söz verilmektedir.

Desteklenen Java 8 dil özelliklerini kullanmaya başlamak için Android eklentisini 3.0.0-alpha1 (veya daha yüksek) sürümüne güncelleyin ve modülünüzün build.gradle dosyasına aşağıdakileri ekleyin:

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

Daha fazla ayrıntı için şu adresi ziyaret edin:
https://developer.android.com/studio/write/java8-support.html


Ne alamadım, android studio java8 desteği ile ne ilgisi var (intellij daha önce yoktu) ?! Bu, projeyi derlemek için terminalde gradle kullanırsam derlemeyeceği anlamına mı geliyor ?!
cesarferreira

1
@cesarferreira Android eklentisini en son sürüme güncellemeniz gerekiyor (şu anda 2.4.0-alpha6). Lütfen cevaptaki teklif bloğunu kontrol edin.
Idolon

İçinde çalıştığım modüle (app değil) eklemek yakalamak oldu. Uygulama modülüne eklemek yardımcı olmadı.
Surekha

6

Kolay yol

Android projesi için java 1.8 desteğini etkinleştirebilirsiniz.

  • Açık Proje Yapısı

    • Ya basarak Ctrl + Shift + Alt + S

    • Veya File > Project Structure

  • Güncelleme Kaynak Uyumluluk ve Hedef Uyumluluk için 1.8 (tıklama Dosya> Proje Yapısı) gösterildiği gibi Proje Yapısı iletişim kutusunda.

görüntü

Veya gradle kullanabilirsiniz

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

Senkronizasyon projesi. Ve bu kadar!

Not: Java 1.8 desteği Android Studio 3.0.0 veya üstü için etkinleştirilebilir . Daha fazla okuma için Dokümantasyona bakınız .


Bu çözüm benim için çalıştı: stackoverflow.com/a/55467237/4698320
Däñish Shärmà

5

Bu soruyu neredeyse 2 yıl önce sorduğumda cevap gerçekten "resmen" hayırdı, ancak ekcr1'in cevabının işaret ettiği gibi, retrolamba kullanırsanız çalışmak için en çok beklenen özelliklerden (lambdas) alabilirsiniz. Android Studio “önizleme” modunda olduğu için hala tutulmayı kullanıyordum, bu yüzden bu yolu asla takip etmedim.

Bugün bence “resmi” cevap hala hayır, ve retrolamba hala iyi bir yol gibi görünse de, biraz “gayri resmi” bir rotaya, yani Kotlin'e inmek isteyenler için başka bir seçenek daha var.

Bugün Kotlin 1.0.0'a ulaştı. Kotlin'e aşina olmayanlar için, burada bulunan web sitelerinde daha fazla bilgi bulabilirsiniz:

https://kotlinlang.org

veya Jake Wharton tarafından verilen bir konuşmanın bu utube videosunu izleyin

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


4

Son Haberler:

Google, Android N ve Android Studio 2.1+ ile platformun Java 8'i destekleyeceğini duyurdu. Ayrıca stüdyo 2.1'in kararlı sürümü de yayınlandı.

Sonunda lambda ifadelerini kullanabiliriz. Döngü için artık liste filtresi yok. Horeeey.


4

Bu config build.gradle ve sync sınıfını ekleyin:

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

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

1
Bu, Android projeleri için Java 8 desteği eklemenin doğru yoludur. Dezavantajı, jack etkinleştirildiğinde anlık çalışmanın şu anda çalışmadığıdır.
Ionut Negru

Tam destek alma.
Ahmad Aghazadeh

2

Google, Java 8'in Android tarafından yerel olarak destekleneceğini ve Jack araç zincirinin kullanımdan kaldırılacağını duyurdu:

Java 8 dil özellikleri için doğrudan geçerli javac ve dx araç setine destek eklemeye ve Jack araç zincirini kullanımdan kaldırmaya karar verdik. Bu yeni yön ile, Java sınıfı dosya biçimine bağlı mevcut araçlar ve eklentiler çalışmaya devam etmelidir. İleride, Java 8 dil özellikleri Android oluşturma sistemi tarafından yerel olarak desteklenecektir. Bunu önümüzdeki haftalarda Android Studio'nun bir parçası olarak başlatmayı hedefliyoruz ve bu kararı sizinle erken paylaşmak istedik.

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


2

Evet. Yakında Java 8'i kullanacağız!

Java 8 dil özellikleri için doğrudan geçerli javac ve dx araç setine destek eklemeye ve Jack araç zincirini kullanımdan kaldırmaya karar verdik. Bu yeni yön ile, Java sınıfı dosya biçimine bağlı mevcut araçlar ve eklentiler çalışmaya devam etmelidir. İleride, Java 8 dil özellikleri Android oluşturma sistemi tarafından yerel olarak desteklenecektir. Bunu önümüzdeki haftalarda Android Studio'nun bir parçası olarak başlatmayı hedefliyoruz ve bu kararı sizinle erken paylaşmak istedik.

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


2

Bu satırı modül lvl derlemesine ekle

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

Ben yazdım benzer bir cevap a benzer soru Yığın taşması, ama burada, cevabın bir parçasıdır.

Android Studio 2.1:

Android Studio'nun (2.1) yeni sürümünde Java 8 özellikleri desteklenmektedir. İşte Android Geliştiricileri blogspot yayınından bir alıntı :

... Android Studio 2.1 sürümü, yeni Jack derleyici desteği ve Java 8 desteği içerir .

...

N Developer Preview ile geliştirirken Java 8 dil özelliklerini kullanmak için Jack derleyicisini kullanmanız gerekir. Yeni Proje Sihirbazı [Dosya → Yeni → Proje], N'yi hedefleyen projeler için doğru yapılandırmaları oluşturur.


Android Studio 2.1'den önce:

Android henüz Java 1.8'i desteklemiyor (sadece 1.7'ye kadar destekliyor), bu nedenle lambdas gibi Java 8 özelliklerini kullanamazsınız.

Bu cevap Android Studio'nun uyumluluğu hakkında daha fazla ayrıntı verir ; belirtir:

Android'de Java 8'in en önemli özelliklerinden biri olan lambdas'ı kullanmak istiyorsanız, gradle-retrolamba kullanabilirsiniz

Kullanmayla ilgili daha fazla bilgi edinmek istiyorsanız gradle-retrolambda, bu cevap bunu yapma konusunda çok ayrıntılı bilgi verir .


Merhaba Farbod! AndroidStudio 2.2.2 kullanıyorum Benim "SDK Location"(bu bir Mac FWIW üzerinde) sadece "/Users/me/Library/Android/sdk" Java8 mi kullanıyorum diyor - Java8 nasıl kullanılır? Teşekkürler!
Fattie

1

Biraz daha güncel bir şey arayanlar için güncel bir cevap göndereceğimi düşündüm.

Şu anda Android ve Android Studio, Java 8 özelliklerinin bir alt kümesini destekliyor. Web sitelerinde bulunan Android dokümanlarına göre Google şunları söylüyor:

Java 8 dil özellikleri için destek, Jack adında yeni bir derleyici gerektirir. Jack yalnızca Android Studio 2.1 ve sonraki sürümlerde desteklenir. Dolayısıyla, Java 8 dil özelliklerini kullanmak istiyorsanız, uygulamanızı oluşturmak için Android Studio 2.1'i kullanmanız gerekir.

Zaten Android Studio yüklüyse, Yardım> Güncellemeyi Denetle'yi (Mac'te, Android Studio> Güncellemeleri Denetle) tıklayarak en son sürüme güncellediğinizden emin olun. İş istasyonunuzda IDE yüklü değilse Android Studio'yu buradan indirin.

Desteklenen Java 8 Dil Özellikleri ve API'leri

Android, tüm Java 8 dil özelliklerini desteklemez. Bununla birlikte, Android 7.0'ı (API düzey 24) hedefleyen uygulamalar geliştirirken aşağıdaki özellikler kullanılabilir:

  • Varsayılan ve statik arayüz yöntemleri Lambda ifadeleri (API seviye 23 ve altı için de mevcuttur)
  • Tekrarlanabilir ek açıklamalar
  • Yöntem Referansları (API seviye 23 ve daha düşük sürümlerde de mevcuttur)
  • Tür Ek Açıklamaları (API düzey 23 ve daha düşük sürümlerde de mevcuttur)

Ayrıca, aşağıdaki Java 8 dil API'leri de mevcuttur:

Yansıma ve dil ile ilgili API'lar:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault () ve AnnotatedElement.getAnnotationsByType (Sınıf) gibi tekrarlanabilir ek açıklamalarla ilişkili Yansıma API'leri

Yardımcı Program API'ları:

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

Yeni Java 8 dil özelliklerini kullanmak için Jack araç zincirini de kullanmanız gerekir . Bu yeni Android araç zinciri, Java dil kaynaklarını Android tarafından okunabilen DEX bayt koduna derler, kendi .jack kitaplığı biçimine sahiptir ve çoğu araç zinciri özelliğini tek bir aracın parçası olarak sağlar: yeniden paketleme, küçülme, gizleme ve çoklu dizin.

Android DEX dosyaları oluşturmak için kullanılan iki araç zincirinin karşılaştırması:

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

1

Bu soruyu 3 yıl önce sordum ve tabii ki cevaplar yıllar içinde değişti. Yukarıdaki yanıtların çoğunun daha önce yanıtladığı gibi, bir süre önce, cevap Evet oldu . Kabul edilen cevabı hiç güncellemedim çünkü o zaman doğru cevaptı. (Yığın Taşması politikasının bu konuda ne olduğundan emin değilim)

Sadece bu konuyu arayanlar için başka bir cevap eklemek istedim. 17.05.2017 tarihinden itibaren Google, Kotlin'in de Android geliştirme için resmi bir dil olduğunu duyurdu .

Resmi bir basın açıklaması bulamadım, ancak duyurulduğu bazı Google I / O videolarını izledim . İşte duyuru üzerine Kotlin ekibinin bir blog yazısı bağlantısı .


1

Aşağıdakileri eklemek benim için sorunu düzeltti (Android studio 2.3.2):

build.gradle (Proje)

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

build.gradle (Modül: uygulama)

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

GÜNCELLEME 2019/10/28

Android Studio 4.0 bu sorunu çözüyor .

D8 derleyicisi, Java 8 yerel API'lerinin bir backport'unu derleme zamanında APK'nıza ekler ve uygulamanız çalışma zamanında yerel API'ler yerine bu kodu kullanır. Bu sürece desugaring denir .


0

Yukarıdaki tüm çözümler 2019'da en son Android Studio 3.4+ ile çalışmıyor gibi görünüyor .

Android Projenizi Java 8'e geçirmek veya yükseltmek için mükemmel ve güncel bir çözüm buldum .

Çözüm: tıklayın Dosya -> Proje Yapısı -> Modüller -> Properties sekmesi.

Değişim Kaynak Uyumluluk ve Hedef Uyumluluk için 1.8 (Java 8)

resim açıklamasını buraya girin



-1

Java 8 desteği eklemenin en kolay yolu

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

Sadece build.gradle dosyanıza ekleyin.


yinelenen cevap, düşük kalite
JanPl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.