การค้นหาเว็บจะไม่ชัดเจนถ้ารองรับ Java 8 สำหรับการพัฒนา Android หรือไม่
ก่อนที่ฉันจะดาวน์โหลด / ติดตั้ง Java 8 ฉันสามารถชี้ไปที่เอกสาร "ทางการ" ใด ๆ ที่ระบุว่า Java 8 เป็นหรือไม่รองรับการพัฒนา Android
การค้นหาเว็บจะไม่ชัดเจนถ้ารองรับ Java 8 สำหรับการพัฒนา Android หรือไม่
ก่อนที่ฉันจะดาวน์โหลด / ติดตั้ง Java 8 ฉันสามารถชี้ไปที่เอกสาร "ทางการ" ใด ๆ ที่ระบุว่า Java 8 เป็นหรือไม่รองรับการพัฒนา Android
คำตอบ:
Android รองรับคุณสมบัติภาษา Java 7 ทั้งหมดและชุดย่อยของคุณสมบัติภาษา Java 8 ที่แตกต่างกันไปตามเวอร์ชั่นแพลตฟอร์ม
เพื่อตรวจสอบว่าคุณสมบัติใดของจาวา 8 ที่รองรับ
เราได้ตัดสินใจเพิ่มการสนับสนุนสำหรับคุณสมบัติภาษา Java 8 โดยตรงในชุดเครื่องมือ javac และ dx ปัจจุบันและเลิกใช้ toolchain ของแจ็ค ด้วยทิศทางใหม่นี้เครื่องมือและปลั๊กอินที่มีอยู่ขึ้นอยู่กับรูปแบบไฟล์คลาส Java ควรทำงานต่อไป การพัฒนาไปข้างหน้าคุณสมบัติภาษา Java 8 จะได้รับการสนับสนุนโดยระบบ Android เรามีเป้าหมายที่จะเปิดตัวผลิตภัณฑ์นี้เป็นส่วนหนึ่งของ Android Studio ในอีกไม่กี่สัปดาห์ข้างหน้าและเราต้องการแบ่งปันการตัดสินใจนี้กับคุณ
รองรับฟีเจอร์อนาคตของ Java 8 Language บน Android
สำหรับนักพัฒนาเก่าที่ชอบ Eclipse google จะหยุดสนับสนุนเครื่องมือของ Eclipse Android Developer
หากคุณติดตั้ง Java JDK 8 แล้วให้มันลองถ้ามีปรากฏปัญหาพยายามที่จะตั้งคอมไพเลอร์เป็น 1.6 ใน Eclipse จากเมนู→หน้าต่างการตั้งค่า → Java → คอมไพเลอร์ Java 7 ก็จะทำงานเช่นกัน:
จำเป็นต้องใช้ Java 7 หรือสูงกว่าหากคุณกำหนดเป้าหมายเป็น Android 5.0 ขึ้นไป
ติดตั้งหลาย JDK แล้วลอง
UPDATE 2017/11/04 - ตอนนี้ Android Studio 3.0 มีการรองรับดั้งเดิมสำหรับ Java 8 gradle-retrolambda
ไม่จำเป็นต้องใช้อีกต่อไป ดูhttps://developer.android.com/studio/write/java8-support.html
gradle-retrolambda
การเชื่อมโยงดังกล่าวยังรวมถึงการโยกย้ายคำแนะนำถ้าคุณกำลังใช้ คำตอบเดิมด้านล่าง:
Android ไม่รองรับจาวา 8 มันรองรับจาวามากถึง 7 (ถ้าคุณมีคิทแคท) และยังไม่ได้เรียกใช้ซิงก์, ซินแท็กซ์น้ำตาลใหม่เท่านั้น
หากคุณต้องการใช้ lambdas ซึ่งเป็นหนึ่งในคุณสมบัติที่สำคัญของ Java 8 ใน Android ของคุณสามารถใช้gradle-retrolamba มันเป็นการสร้างแบบไล่ระดับที่รวมเอา retrolambda ซึ่งเป็นเครื่องมือที่แปลง Java 8 bytecode กลับไปเป็น Java 6/7 โดยทั่วไปหากคุณตั้งค่าคอมไพเลอร์ใน Android Studio ให้คอมไพล์ Java 8 bytecode ดังนั้นจึงอนุญาตให้ lambdas มันจะแปลงกลับเป็น Java 6/7 bytecode ซึ่งจะถูกแปลงเป็น dalvik bytecode เป็นการแฮ็กถ้าคุณต้องการลองใช้คุณสมบัติของ JDK 8 ใน Android แทนการสนับสนุนอย่างเป็นทางการ
try-with-resources
งานได้ตั้งแต่ Kitkat เท่านั้น
คุณสามารถใช้gradle-retrolamba
gradle build dependency เพื่อใช้ Java 8 สำหรับการพัฒนา Android ได้
ด้านล่างนี้เป็นคำแนะนำฉบับสมบูรณ์ที่ฉันได้ติดตามเพื่อใช้งานแลมบ์ดานิพจน์สำหรับการพัฒนา Android แหล่งที่มาต้นฉบับของคู่มือนี้จะกล่าวถึงในตอนท้าย
ในคู่มือนี้จะมีการสาธิตวิธีนำคุณสมบัติบางอย่างของJava 8มาไว้ในเครื่องมือพัฒนา Android โดยมีเป้าหมายที่Eclipse IDEโดยเฉพาะ . อย่างไรก็ตามขั้นตอนที่จะอธิบายในคู่มือนี้อาจนำไปปรับใช้กับสภาพแวดล้อมการพัฒนาใหม่ของ Google คือ Android Studio มันขึ้นอยู่กับรุ่นชุมชนของ IntelliJ Idea IDE ยอดนิยมโดย JetBrains และเพิ่งได้รับการอัปเกรดเป็นรุ่นเบต้าโดย Google ในช่วงต้นเดือนกรกฎาคม 2014 เล็กน้อยก่อนที่จะเขียนคู่มือนี้ Eclipse จะยังคงเป็นสภาพแวดล้อมการพัฒนาที่โดดเด่นอย่างน้อยสักครู่และเมื่อพิจารณาความจริงที่ว่าโครงการ Android ส่วนใหญ่ได้รับการพัฒนาโดยใช้ Eclipse วิธีการที่นำคุณสมบัติใหม่ของ Java 8 เช่นการแสดงออกแลมบ์ดาเข้าไปใน ADT ดูเหมือนจะค่อนข้างมีประโยชน์สำหรับนักพัฒนา
การพัฒนา Android ขึ้นอยู่กับการใช้งานจาวาที่กำหนดเองที่เรียกว่า Apache Harmony Project ซึ่งถูกยกเลิกในปี 2011 ไวยากรณ์ Java ที่ใช้กันมากที่สุดในการพัฒนา Android คือ Java 6 (v1.6) และ Java 7 (v1.7) ก็รองรับเช่นกัน KitKat edition (Android 4.4. +) ดังนั้นคุณสมบัติของ Java 8 เช่นการแสดงออกแลมบ์ดาไม่สามารถใช้โดยตรงในการพัฒนาแอพ Android โดยไม่ต้องใช้การปรับแต่งบางอย่างในเครื่องมือพัฒนา โชคดีที่โครงสร้างเหล่านี้โดยทั่วไปมีการปรับปรุง 'syntactic น้ำตาล' ซึ่งให้นักพัฒนามีข้อบกพร่องของสิ่งต่าง ๆ เช่น 'คลาสที่ไม่ระบุชื่อ' และพวกเขาสามารถแปลเป็นคลาส Java 6 หรือ Java 7
วิธีการที่ผ่านมาสำหรับการแปลโค้ด Java 8 เข้าสู่ที่ต่ำกว่ารุ่น Java เรียกว่าRetroLambda ไลบรารีนี้ทำให้ผู้พัฒนารันโค้ด Java 8 พร้อมกับการแสดงออกแลมบ์ดาบน Java 7 หรือต่ำกว่า น่าเสียดายที่คุณลักษณะของ Java 8 นอกเหนือจากนิพจน์แลมบ์ดายังไม่ได้รับการสนับสนุนจาก RetroLambda แต่แนวคิดของการแสดงออกแลมบ์ดาเป็นก้าวกระโดดที่ใหญ่ที่สุดบนแพลตฟอร์ม Java 8 และเป็นเครื่องมือที่ยอดเยี่ยมสำหรับนักพัฒนา Android
รายละเอียดเกี่ยวกับห้องสมุดนี้สามารถพบได้ในหน้า GitHub:
https://github.com/orfjackal/retrolambda#getting-started
นอกจากนี้ปลั๊กอิน Gradle สำหรับ RetroLambda ที่สร้างโดยผู้พัฒนารายอื่นอนุญาตให้ใช้การสร้างแบบอิง Gradle ในโครงการ Java หรือ Android อย่างไรก็ตามผู้พัฒนากล่าวถึงการรวมปลั๊กอินนี้เข้ากับสภาพแวดล้อม Android Studio เท่านั้น รายละเอียดสามารถพบได้ในหน้า GitHub:
https://github.com/evant/gradle-retrolambda
การใช้โครงสร้างพื้นฐานเหล่านี้ภายในสภาพแวดล้อมการพัฒนาบน Eclipse ไม่สามารถเข้าถึงได้โดยตรง แต่สามารถทำได้และจะแสดงให้เห็นในคู่มือนี้
คู่มือนี้อนุมานว่าผู้อ่านมีความเข้าใจพื้นฐานของการพัฒนา Android และเป็นไปตาม ADT เวอร์ชัน 22.6.2 เนื่องจาก ADT รุ่น 23.0.2 ที่ผ่านมาดูเหมือนว่าจะมีปัญหาเช่นการสร้างโฟลเดอร์เลย์เอาต์ รายละเอียดเกี่ยวกับปัญหานี้อยู่ในลิงค์ต่อไปนี้:
http://code.google.com/p/android/issues/detail?id=72591
ขั้นตอนในคู่มือนี้จะมอบให้กับเครื่องพัฒนาWindows 8.1, 64- บิตแต่สามารถปรับให้เข้ากับแพลตฟอร์มอื่นได้อย่างง่ายดาย ระบบบิลด์ใหม่Gradle
จะถูกใช้สำหรับกระบวนการบิลด์ / คลีนและขั้นตอนการติดตั้งก็จะมีให้เช่นกัน นอกจากนี้ทั้งสองJDK 8
และJDK 7
จะต้องอยู่ร่วมกันในเครื่องพัฒนา ต้องทำตามขั้นตอนด้านล่างเพื่อติดตั้ง:
bin
ให้กับ%PATH%
ตัวแปรของคุณJAVA_HOME
ด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 8JAVA8_HOME
อีกครั้งด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 8JAVA7_HOME
ด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 7java -version
คำสั่งและตรวจสอบว่า Java 8 พร้อมทำงานjavac -version
คำสั่งในหน้าต่างเดียวกันและตรวจสอบว่าคอมไพเลอร์ JDK 8 Java นั้นยังทำงานอยู่ตอนนี้ต้องดาวน์โหลด ADT-22.6.2 จากลิงค์ต่อไปนี้:
http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip
D:\adt
ANDROID_HOME
มีค่าของเส้นทางของโฟลเดอร์การติดตั้ง ADT ของคุณเช่นD:\adt\sdk
Andoid SDK Platform Tools
และAndoid SDK Tools
โฟลเดอร์ของคุณเช่นD:\adt\sdk\tools
และD:\adt\sdk\platform-tools
ไปยัง%PATH%
ตัวแปรของคุณD:\adt\eclipse
D:\adt\workspace
Android SDK Manager
ปุ่มซึ่งอยู่บนแถบเครื่องมือAndroid SDK Build tools Rev. 19.1
และAndroid Support Library
เท่านั้น ยกเลิกการเลือกทุกอย่างและติดตั้งสองแพ็คเกจนี้หากทุกอย่างเป็นไปด้วยดี ADT จะเริ่มทำงาน
ขอแนะนำให้ติดตั้งเครื่องมือต่อไปนี้:
การสนับสนุน Eclipse Kepler Java 8: ทำให้ Eclipse รู้จักส่วนขยายไวยากรณ์ใหม่ของ Java 8 และทำให้คุณกำจัดสิ่งที่น่ารำคาญred dots
ในตัวแก้ไขโค้ด Java ของคุณ อาจถูกติดตั้งผ่านHelp -> Install New Software
ใน Eclipse ป้อนhttp://download.eclipse.org/eclipse/updates/4.3-P-builds/ลงในWork with
ฟิลด์และทำการติดตั้งต่อไป
Nodeclipse / Enide Gradle: ส่วนใหญ่จะใช้เพื่อเน้นคำหลักภาษา Groovy Groovy ใช้เป็น DSL สำหรับสคริปต์การสร้าง Gradle Eclipse Marketplace
ปลั๊กอินนี้จะสามารถติดตั้งผ่าน อย่างไรก็ตามภายใน Eclipse ADT-22.6.2 Eclipse Marketplace Client
ไม่ได้มาพร้อมกับ ดังนั้นก่อนอื่นคุณจะต้องติดตั้งEclipse Marketplace Client
โดยใช้Install New Software
เครื่องมือใน Eclipse ป้อน http //: download.eclipse.org/mpc/kepler/ ลงในWork with
ฟิลด์และทำการติดตั้งต่อไป หลังจากติดตั้งEclipse Marketplace Client
คุณอาจค้นหาNodeclipse/Enide Gradle
ในEclipse Marketplace Client
และติดตั้ง
Genymotion Virtual Device: เป็นการแทนที่ค่าเริ่มต้นAndroid Virtual Device
ซึ่งมาพร้อมกับ ADT AVD ค่อนข้างยุ่งยากและมันก็ล้มเหลวอย่างต่อเนื่อง Genymotion ทำให้คุณเตรียมความพร้อมสำหรับ Android VD โดยใช้CyanogenMod
อิมเมจซึ่งดำเนินการโดยOracle VirtualBoxVirtualBox ใบอนุญาตผู้ใช้เดียวคือฟรีและสามารถดาวน์โหลดได้จากhttp://www.genymotion.com ต้องการเฉพาะการล็อกอินและสามารถรวมเข้ากับ Eclipse ได้ รายละเอียดสามารถพบได้ที่:
https://cloud.genymotion.com/page/doc/#collapse8
ด้านล่างเป็นภาพหน้าจอของอุปกรณ์เสมือน CyanogenMod ที่ใช้ Android 4.3
อาจถือได้ว่าเป็นอุปกรณ์ Android ที่ทำงานบนคอมพิวเตอร์ส่วนบุคคลที่ใช้ x86 หรือ x64 เพื่อที่จะใช้บริการของ Google เช่นGoogle PlayStore
บนอุปกรณ์เสมือนนี้gapps
จะต้องมีการฉายภาพสำหรับเวอร์ชั่น Android ที่ใช้บนอุปกรณ์ gapps
ภาพที่เหมาะสมสำหรับอุปกรณ์อาจถูกดาวน์โหลดจากเว็บไซต์ CyanogenMod:
http://wiki.cyanogenmod.org/w/Google_Apps
การติดตั้ง Gradle เป็นทางเลือกเนื่องจากมีให้ใน Android SDK เอง แต่แนะนำให้ทำการติดตั้งแยกต่างหาก การติดตั้งอาจทำได้โดยทำตามขั้นตอนเหล่านี้:
ไปที่เว็บไซต์ Gradle: http://www.gradle.org/
คลิก Downloads
Previous Releases
เลือกรุ่น 1.10 และดาวน์โหลด gradle-1.10-all.zip หรือ gradle-1.10-bin.zipD:\adt\gradle
GRADLE_HOME
ค่าพา ธ ของโฟลเดอร์การติดตั้ง Gradle ของคุณเช่นD:\adt\gradle
D:\adt\gradle\bin
ไปยัง%PATH%
ตัวแปรของคุณgradle -v
คำสั่งและตรวจสอบว่ามันทำงานแล้วหากคุณมาถึงจุดนี้ได้สำเร็จหมายความว่าคุณพร้อมที่จะสร้างแอป Android เครื่องแรกของคุณโดยใช้คุณสมบัติ Java 8แอพที่เรียบง่ายจะถูกสร้างขึ้นเพื่อแสดงการใช้งานเครื่องมือที่อธิบายไว้ในส่วนก่อนหน้า คุณสามารถทำตามขั้นตอนที่ระบุด้านล่างเพื่อรับข้อมูลเชิงลึกเกี่ยวกับการใช้แลมบ์ดานิพจน์ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android:
File -> New -> Other -> Android -> Android Application Project
Next
ปุ่มบนแบบฟอร์มต่อไปนี้และคลิกที่Finish
ปุ่มสุดท้าย รอจนกว่า ADT จะเสร็จสิ้นการโหลดโครงการNew -> Folder
และตั้งชื่อbuilders
gen (Generated Java Files)
โฟลเดอร์และลบมัน Gradle จะสร้างไฟล์เดียวกันสำหรับเราในไม่ช้าและเราจะเพิ่มเข้าไปในs build path. The
โฟลเดอร์ gen` โครงการที่สร้างโดย Ant builder เริ่มต้นไม่จำเป็นอีกต่อไปและสิ่งประดิษฐ์ภายใต้โฟลเดอร์นั้นจะล้าสมัยสร้างแบตช์ไฟล์ต่อไปนี้ภายใต้builders
โฟลเดอร์:
กรอกแบตช์ไฟล์เหล่านี้ดังนี้:
gradle_build.cmd:
gradle_post_build.cmd:
gradle_clean.cmd:
Project -> Build Automatically
ตัวเลือกเมนูProperties -> Builders
และยกเลิกการเลือกผู้สร้างเริ่มต้นทั้งหมดที่ระบุโดย ADTNew
ปุ่มในหน้าต่างเดียวกันและเลือกProgram
แล้วคลิกOK
Main
แท็บของการกำหนดค่าตัวสร้างใหม่
Refresh
แท็บของการกำหนดค่าตัวสร้างใหม่
Environment
แท็บของการกำหนดค่าตัวสร้างใหม่
Build Options
แท็บของการกำหนดค่าตัวสร้างใหม่
Gradle_Post_Build
ว่าใช้gradle_post_build.cmd
เป็นโปรแกรม การตั้งค่าอื่น ๆ ทั้งหมดของผู้สร้างนี้จะต้องเหมือนกันทุกประการกับผู้สร้างที่สร้างขึ้นก่อนหน้านี้ ผู้สร้างนี้จะรับผิดชอบในการคัดลอกสิ่งประดิษฐ์ที่สร้างขึ้นโดยกระบวนการสร้างลงในbin
โฟลเดอร์Gradle_Cleaner
ว่าใช้gradle_clean.cmd
เป็นโปรแกรม ต้องRun the builder
ตั้งค่าเฉพาะในแท็บสุดท้ายDuring a Clean
เท่านั้น การตั้งค่าอื่น ๆ ทั้งหมดของผู้สร้างนี้จะต้องเหมือนกันกับผู้สร้างรายแรก ผู้สร้างนี้จะรับผิดชอบในการทำความสะอาดสิ่งประดิษฐ์ที่สร้างขึ้นโดยกระบวนการสร้างตามชื่อแนะนำผู้สร้างใหม่ของHelloLambda
โครงการ
Export
Android -> Generate Gradle Build Files
และคลิกNext
Finish
gradlew
gradlew.bat
ลบgradle
โฟลเดอร์ด้วยProject -> Clean
ตัวเลือกเมนู กรอกแบบฟอร์มที่แสดงดังนี้Clean Project
หน้าต่าง
OK
และรอจนกระทั่งกระบวนการทำความสะอาดเสร็จสมบูรณ์setContentView
ฟังก์ชันในMainActivity
ชั้นเรียนของคุณ:build.gradle
ไฟล์จนถึงsourceCompatibility
ส่วนดังนี้:Properties -> Java Compiler
อ็อพชันและตั้งค่าระดับความสอดคล้องทั้งหมดเป็น Java 8 สิ่งนี้จะทำให้ Eclipse รู้จักการสร้าง Java 8 ใหม่เช่นแลมบ์ดานิพจน์No
ในหน้าต่างการแจ้งเตือนBuild project
คลิกขวาที่โครงการและเลือก Eclipse จะเริ่มสร้างโครงการสร้างกระบวนการ
Properties -> Java Build Path
คลิกขวาที่โครงการและไปที่ เพิ่มโฟลเดอร์ต่อไปนี้เพื่อสร้างเส้นทาง (แสดงในภาพด้านล่าง):
build\source\buildConfig\debug
build\source\r\debug
Eclipse จะสามารถรับรู้R.java
และbuildConfig.java
ไฟล์ได้และจะไม่แสดงred dots
ข้อผิดพลาดใด ๆที่เกี่ยวข้องกับไฟล์ทรัพยากรของโครงการ
Run Configuration
สำหรับแพลตฟอร์ม Android Run As -> Run Configurations
เป้าหมายของคุณโดยการคลิกขวาที่โครงการและจากนั้นเลือก ตัวอย่างเช่นแอปพลิเคชันตัวอย่างนี้มีลักษณะดังที่แสดงด้านล่างใน Genymotion VD:คุณอาจสังเกตในLogCat
หน้าต่างว่าข้อมูลโค้ดที่มีนิพจน์แลมบ์ดาแบบธรรมดาทำงานได้อย่างถูกต้อง
ที่มา: การใช้ Java 8 Lambda Expressions ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android
ตามลิงค์นี้เพื่อรับการปรับปรุงใหม่ ใช้คุณสมบัติภาษา Java 8
คำตอบเก่า
ในฐานะที่เป็นของAndroid Nรุ่นตัวอย่างการสนับสนุน Android คุณสมบัติจำกัดของJava 8ดูคุณสมบัติ Java 8 ภาษา
ในการเริ่มใช้คุณสมบัติเหล่านี้คุณต้องดาวน์โหลดและตั้งค่าAndroid Studio 2.1 และ Android N Preview SDK ซึ่งรวมถึงtoolchain ของแจ็คที่จำเป็นและปลั๊กอินเสริม Android สำหรับ Gradle หากคุณยังไม่ได้ติดตั้ง Android SDK ยังไม่มีการแสดงตัวอย่างให้ดูที่จัดตั้งขึ้นเพื่อพัฒนาสำหรับ Android N
รองรับคุณสมบัติ Java 8 Language และ API
ปัจจุบัน Android ไม่รองรับคุณสมบัติภาษา Java 8 ทั้งหมด อย่างไรก็ตามคุณสมบัติต่อไปนี้สามารถใช้งานได้เมื่อพัฒนาแอปที่กำหนดเป้าหมายเป็น Android N Preview:
วิธีการอินเตอร์เฟซเริ่มต้นและคงที่
นิพจน์แลมบ์ดา (มีใน API ระดับ 23 และต่ำกว่า)
วิธีการอ้างอิง (ยังมีอยู่ในระดับ API 23 และต่ำกว่า)
มีคุณสมบัติเพิ่มเติมของ Java 8 ที่รองรับ Android คุณสามารถดูรายละเอียดทั้งหมดได้จากคุณสมบัติของ Java 8 Language
ปรับปรุง
หมายเหตุ: Android N ใช้การแสดงออกแลมบ์ดาในคลาสที่ไม่ระบุชื่อ วิธีการนี้ช่วยให้พวกเขาสามารถใช้งานร่วมกับระบบปฏิบัติการ Android รุ่นก่อนหน้าได้ ในการทดสอบแลมบ์ดานิพจน์ในเวอร์ชันก่อนหน้าอย่าลืมไปที่ไฟล์ build.gradle ของคุณและตั้งค่า compileSdkVersion และ targetSdkVersion เป็น 23 หรือต่ำกว่า
อัปเดต 2
ตอนนี้ Android studio 3.0 เสถียรปล่อยสนับสนุนไลบรารี Java 8 และคุณลักษณะภาษา Java 8 (โดยไม่ต้องคอมไพเลอร์แจ็ค)
minSdkVersion
อะไรบ้าง?
ตอนนี้มันเป็นไปได้
แต่คุณจะต้องให้อุปกรณ์ของคุณทำงานบน java 1.8 และเปิดใช้งาน "jackOptions" เพื่อเรียกใช้ Jack เป็นชื่อสำหรับคอมไพเลอร์ Android ใหม่ที่รัน Java 8
https://developer.android.com/guide/platform/j8-jack.html
เพิ่มบรรทัดเหล่านี้เพื่อ build_gradle
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Java 8 ดูเหมือนจะเป็นจาวาเอ็นจิ้นที่กำลังทำงานของ Android studio 2.0 แต่ก็ยังไม่ยอมรับไวยากรณ์ของ java 8 หลังจากที่ฉันตรวจสอบแล้วและคุณไม่สามารถเลือกคอมไพเลอร์จาก android studio ได้ในตอนนี้ อย่างไรก็ตามคุณสามารถใช้ปลั๊กอินสกาล่าหากคุณต้องการกลไกการเขียนโปรแกรมที่ใช้งานได้ในไคลเอนต์ Android ของคุณ
Android ใช้ Java ที่แยกออกจาก Java 6
ในฐานะของ Android SDK รุ่น 19 คุณสามารถใช้ Java 7 คุณสมบัติโดยการทำเช่นนี้ ยังไม่รองรับ Java 8 อย่างสมบูรณ์
Native Java 8 มาถึงบน Android! ที่สุด!
ลบปลั๊กอิน Retrolambda และบล็อก retrolambda ออกจากไฟล์ build.gradle ของแต่ละโมดูล:
หากต้องการปิดใช้งานแจ็คและเปลี่ยนเป็น toolchain เริ่มต้นเพียงลบบล็อก jackOptions ออกจากไฟล์ build.gradle ของโมดูลของคุณ
ในการเริ่มใช้คุณสมบัติภาษา Java 8 ที่รองรับให้อัพเดตปลั๊กอิน Android เป็น 3.0.0 (หรือสูงกว่า)
เริ่มต้นด้วย Android Studio 3.0 ตอนนี้คุณสมบัติภาษา Java 8 ได้รับการสนับสนุนโดย Android แล้ว:
นอกจากนี้จาก min API level 24 ยังมี Java 8 API ดังต่อไปนี้:
เพิ่มบรรทัดเหล่านี้ใน build.gradle ของโมดูลแอปพลิเคชันของคุณเพื่อแจ้งโครงการระดับภาษา:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ปิดใช้งานการสนับสนุนคุณสมบัติ Java 8 Language ด้วยการเพิ่มไฟล์ต่อไปนี้ในไฟล์gradle.propertiesของคุณ:
android.enableDesugar=false
คุณทำเสร็จแล้ว! ตอนนี้คุณสามารถใช้ native java8!
Android OFFICIALLY รองรับ Java 8 ตั้งแต่ Android N
การประกาศคุณสมบัติอยู่ที่นี่การประกาศภาษา Java 8 คือ:
ปรับปรุงการรองรับภาษา Java 8 - เราตื่นเต้นที่จะนำคุณสมบัติภาษา Java 8 มาสู่ Android ด้วยคอมไพเลอร์แจ็คของ Android ตอนนี้คุณสามารถใช้คุณสมบัติภาษา Java 8 ยอดนิยมมากมายรวมถึง lambdas และอื่น ๆ สำหรับเวอร์ชัน Android ที่ย้อนกลับไปถึง Gingerbread คุณสมบัติใหม่ช่วยลดรหัสสำเร็จรูป ตัวอย่างเช่น lambdas สามารถแทนที่คลาสภายในที่ไม่ระบุชื่อเมื่อจัดให้ผู้ฟังเหตุการณ์ คุณลักษณะบางอย่างของภาษา Java 8 - เช่นวิธีการเริ่มต้นและแบบคงที่สตรีมและอินเตอร์เฟสที่ใช้งานได้ - ขณะนี้มีให้ใช้งานใน N และสูงกว่า ด้วยแจ็คเรารอคอยที่จะติดตามภาษา Java อย่างใกล้ชิดยิ่งขึ้นในขณะที่ยังคงความเข้ากันได้ย้อนหลัง
เราสามารถใช้ Java 8 โดยใช้:
ใน build.gradle (โครงการ: myProject) เพิ่มต่อไปนี้
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
ใน build.gradle (โมดูล: myModule) เพิ่มต่อไปนี้
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
อัพเดท 2020/01/17
Android Studio 4.0รองรับการใช้ API ภาษา Java 8 จำนวนหนึ่งโดยใช้เทคนิคที่เรียกว่า desugaring โดยไม่จำเป็นต้องมีระดับ API ขั้นต่ำสำหรับแอปของคุณ:
https://developer.android.com/studio/preview/features#j8-desugar
รองรับชุด API ต่อไปนี้ในรีลีสนี้:
- สตรีมแบบลำดับ (
java.util.stream
)- เซตย่อยของ
java.time
java.util.function
- เพิ่มล่าสุดไปที่
java.util.{Map,Collection,Comparator}
- optionals (
java.util.Optional
,java.util.OptionalInt
และjava.util.OptionalDouble
) และบางชั้นเรียนใหม่อื่น ๆ ที่มีประโยชน์กับ API ที่ดังกล่าวข้างต้น- การเพิ่มเติมบางส่วนไป
java.util.concurrent.atomic
(วิธีการใหม่ในการAtomicInteger
,AtomicLong
และAtomicReference
)ConcurrentHashMap
(พร้อมการแก้ไขข้อบกพร่องสำหรับ Android 5.0)เพื่อรองรับ API ภาษาเหล่านี้ D8 จะรวบรวมไฟล์ DEX ของไลบรารีแยกต่างหากที่มีการใช้ API ที่ขาดหายไปและรวมไว้ในแอปของคุณ กระบวนการ desugaring จะเขียนรหัสแอปของคุณใหม่เพื่อใช้ไลบรารีนี้แทนขณะใช้งานจริง
หากต้องการเปิดใช้งานการสนับสนุน API ภาษาเหล่านี้ให้รวมสิ่งต่อไปนี้ใน
build.gradle
ไฟล์โมดูลของคุณ: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
Android Studio 3.0เริ่มให้การสนับสนุนในตัวสำหรับคุณสมบัติบางอย่างของภาษา Java 8 ซึ่ง ได้แก่ :
เริ่มจาก API ระดับ 24 ด้วย Java 8 API ดังต่อไปนี้:
java.util.stream
java.util.function
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
java.lang.reflect.Method.isDefault()
นอกจากนั้นการtry-with-resources
สนับสนุนยังขยายไปถึง Android API ทุกระดับ
คุณสมบัติเพิ่มเติมของ Java 8 จะถูกเพิ่มในอนาคต
ในการเริ่มใช้คุณสมบัติภาษา Java 8 ที่รองรับให้อัพเดตปลั๊กอิน Android เป็น 3.0.0-alpha1 (หรือสูงกว่า) และเพิ่มสิ่งต่อไปนี้ในไฟล์ build.gradle ของโมดูลของคุณ:
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
สำหรับรายละเอียดเพิ่มเติมเยี่ยมชม:
https://developer.android.com/studio/write/java8-support.html
2.4.0-alpha6
) โปรดตรวจสอบบล็อกใบเสนอราคาในคำตอบ
คุณสามารถเปิดใช้งานการสนับสนุน java 1.8 สำหรับโครงการ Android
เปิดโครงสร้างโครงการ
ทั้งโดยการกด Ctrl + Shift + Alt + S
หรือ File > Project Structure
อัพเดตความเข้ากันได้ของแหล่งที่มาและความเข้ากันได้ของเป้าหมายเป็น1.8ในกล่องโต้ตอบโครงสร้างโครงการตามที่แสดง (คลิกไฟล์> โครงสร้างโครงการ)
หรือคุณสามารถใช้เกรน
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ซิงค์โครงการ และนั่นมัน!
หมายเหตุ:รองรับ Java 1.8 สามารถเปิดใช้งานสำหรับAndroid Studio 3.0.0หรือสูงกว่า ดูเอกสารประกอบสำหรับการอ่านเพิ่มเติม
เมื่อฉันถามคำถามนี้เมื่อเกือบ 2 ปีที่แล้วคำตอบคือ“ เป็นทางการ” ไม่ใช่ แต่ตามที่ระบุโดยคำตอบของ ekcr1 คุณจะได้รับหนึ่งในคุณสมบัติที่คาดว่าจะสูงที่สุด (lambdas) หากคุณใช้ retrolamba ในขณะที่ฉันยังคงใช้ eclipse อยู่เนื่องจาก Android Studio อยู่ในโหมด“ ดูตัวอย่าง” ดังนั้นฉันไม่เคยไล่ตามเส้นทางนี้
วันนี้ฉันคิดว่าคำตอบที่ "เป็นทางการ" ยังคงไม่เป็นและในขณะที่ retrolamba ยังคงดูเหมือนเป็นวิธีที่ดีที่จะไปมีตัวเลือกอื่นสำหรับผู้ที่ยินดีที่จะลงเส้นทางค่อนข้าง "ไม่เป็นทางการ" สามารถใช้เส้นทางคือ Kotlin
วันนี้ Kotlin ถึง 1.0.0 สำหรับผู้ที่ไม่คุ้นเคยกับ Kotlin สามารถดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ของพวกเขาที่นี่:
หรือดูวิดีโอ utube นี้ของการพูดคุยที่ได้รับจาก Jake Wharton
ข่าวล่าสุด:
Google ประกาศว่าด้วย Android N และ Android Studio 2.1+ แพลตฟอร์มจะรองรับ Java 8 และยังมีเวอร์ชั่นเสถียรของ studio 2.1 ที่วางจำหน่าย
ในที่สุดเราสามารถใช้แลมบ์ดานิพจน์ ไม่มีตัวกรองรายการเพิ่มเติมสำหรับ for loop Horeeey
เพิ่ม config.gradle นี้และซิงค์ gradle:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
// or
//sourceCompatibility 1.8
//targetCompatibility 1.8
}
}
Google เพิ่งประกาศว่า Java 8 จะได้รับการสนับสนุนจาก Android อย่างเป็นทางการและเครื่องมือของ Jack จะเลิกใช้แล้ว:
เราได้ตัดสินใจเพิ่มการสนับสนุนสำหรับคุณสมบัติภาษา Java 8 โดยตรงในชุดเครื่องมือ javac และ dx ปัจจุบันและเลิกใช้ toolchain ของแจ็ค ด้วยทิศทางใหม่นี้เครื่องมือและปลั๊กอินที่มีอยู่ขึ้นอยู่กับรูปแบบไฟล์คลาส Java ควรทำงานต่อไป การพัฒนาไปข้างหน้าคุณสมบัติภาษา Java 8 จะได้รับการสนับสนุนโดยระบบ Android เรามีเป้าหมายที่จะเปิดตัวผลิตภัณฑ์นี้เป็นส่วนหนึ่งของ Android Studio ในอีกไม่กี่สัปดาห์ข้างหน้าและเราต้องการแบ่งปันการตัดสินใจนี้กับคุณ
ข้อมูลเพิ่มเติมที่นี่: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
ใช่. เราจะใช้ Java 8 เร็ว ๆ นี้!
เราได้ตัดสินใจเพิ่มการสนับสนุนสำหรับคุณสมบัติภาษา Java 8 โดยตรงในชุดเครื่องมือ javac และ dx ปัจจุบันและเลิกใช้ toolchain ของแจ็ค ด้วยทิศทางใหม่นี้เครื่องมือและปลั๊กอินที่มีอยู่ขึ้นอยู่กับรูปแบบไฟล์คลาส Java ควรทำงานต่อไป การพัฒนาไปข้างหน้าคุณสมบัติภาษา Java 8 จะได้รับการสนับสนุนโดยระบบ Android เรามีเป้าหมายที่จะเปิดตัวผลิตภัณฑ์นี้เป็นส่วนหนึ่งของ Android Studio ในอีกไม่กี่สัปดาห์ข้างหน้าและเราต้องการแบ่งปันการตัดสินใจนี้กับคุณ
https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
เพิ่มบรรทัดนี้ลงในโมดูลเลเวลสร้างระดับ
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ฉันเขียนคำตอบที่คล้ายกับคำถามที่คล้ายกันใน Stack Overflow แต่นี่เป็นส่วนหนึ่งของคำตอบนั้น
Android Studio เวอร์ชันใหม่ (2.1) รองรับคุณสมบัติของ Java 8 นี่คือสารสกัดจากการโพสต์ blogspotของAndroid Developers :
... การเปิดตัว Android Studio 2.1 มีการรองรับคอมไพเลอร์แจ็คตัวใหม่และรองรับJava 88
...
ในการใช้คุณสมบัติภาษา Java 8 เมื่อพัฒนาด้วย N Developer Preview คุณจะต้องใช้คอมไพเลอร์แจ็ค ตัวช่วยสร้างโครงการใหม่ [ไฟล์→ใหม่→โครงการ] สร้างการกำหนดค่าที่ถูกต้องสำหรับโครงการที่กำหนดเป้าหมายเป็น N
Android ยังไม่รองรับ Java 1.8 (รองรับได้สูงสุด 1.7 เท่านั้น) ดังนั้นคุณไม่สามารถใช้คุณสมบัติ Java 8 เช่น lambdas
คำตอบนี้ให้รายละเอียดเพิ่มเติมเกี่ยวกับความเข้ากันได้ของ Android Studio ; มันระบุว่า:
หากคุณต้องการใช้ lambdas ซึ่งเป็นหนึ่งในคุณสมบัติหลักของ Java 8 ใน Android คุณสามารถใช้ gradle-retrolamba
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการใช้gradle-retrolambda
, คำตอบนี้ให้มากของรายละเอียดในการทำว่า
"SDK Location"
(นี่เป็น Mac FWIW) เพิ่งบอกว่า"/Users/me/Library/Android/sdk"
ฉันใช้ Java8 - วิธีใช้ Java8 หรือไม่? ขอบคุณ!
ฉันคิดว่าฉันจะโพสต์คำตอบที่อัปเดตสำหรับผู้ที่มองหาบางสิ่งที่เป็นปัจจุบันมากขึ้น
ปัจจุบัน Android และ Android Studio รองรับคุณสมบัติย่อยของคุณสมบัติ Java 8 ตามเอกสาร Android ที่อยู่บนเว็บไซต์ Google กล่าวว่า:
การสนับสนุนคุณสมบัติภาษา Java 8 ต้องใช้คอมไพเลอร์ใหม่ที่ชื่อว่า Jack แจ็ครองรับเฉพาะใน Android Studio 2.1 และสูงกว่า ดังนั้นหากคุณต้องการใช้คุณสมบัติภาษา Java 8 คุณต้องใช้ Android Studio 2.1 เพื่อสร้างแอปของคุณ
หากคุณติดตั้ง Android Studio อยู่แล้วให้แน่ใจว่าคุณอัปเดตเป็นเวอร์ชั่นล่าสุดโดยคลิกวิธีใช้> ตรวจสอบการอัปเดต (สำหรับ Mac, Android Studio> ตรวจสอบการอัปเดต) หากคุณยังไม่ได้ติดตั้ง IDE บนเวิร์กสเตชันของคุณให้ดาวน์โหลด Android Studio ที่นี่
รองรับคุณสมบัติ Java 8 Language และ API
Android ไม่รองรับคุณสมบัติภาษา Java 8 ทั้งหมด อย่างไรก็ตามคุณสมบัติต่อไปนี้จะสามารถใช้งานได้เมื่อพัฒนาแอปที่กำหนดเป้าหมายเป็น Android 7.0 (API ระดับ 24):
- วิธีการเริ่มต้นและส่วนต่อประสานคงที่นิพจน์แลมบ์ดา (มีในระดับ API 23 และต่ำกว่า)
- คำอธิบายประกอบที่ทำซ้ำได้
- วิธีการอ้างอิง (ยังมีอยู่ในระดับ API 23 และต่ำกว่า)
- พิมพ์คำอธิบายประกอบ (ยังมีอยู่ในระดับ API 23 และต่ำกว่า)
นอกจากนี้ API ภาษา Java 8 ต่อไปนี้ยังมีอยู่:
การสะท้อนและ API ที่เกี่ยวข้องกับภาษา:
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.Method.isDefault () และ Reflection API ที่เกี่ยวข้องกับคำอธิบายประกอบที่ทำซ้ำได้เช่น AnnotatedElement.getAnnotationsByType (Class)
API ยูทิลิตี้:
- java.util.function
- java.util.stream
ในการใช้คุณสมบัติภาษา Java 8 ใหม่คุณต้องใช้เครื่องมือ toolchainด้วย toolchain ใหม่ของ Android นี้รวบรวมแหล่งที่มาของภาษา Java ลงใน DEX bytecode ที่ Android อ่านได้มีรูปแบบไลบรารี. jack และมีคุณสมบัติ toolchain ส่วนใหญ่เป็นส่วนหนึ่งของเครื่องมือชิ้นเดียวคือการบรรจุหีบห่อลดขนาด obfuscation และ multidex
นี่คือการเปรียบเทียบของสอง toolchains ที่ใช้สร้างไฟล์ Android DEX:
Legacy javac toolchain: javac (.java → .class) → dx (.class → .dex) New Jack toolchain: Jack (.java → .jack → .dex)
ฉันถามคำถามนี้เมื่อ 3 ปีที่แล้วและเห็นได้ชัดว่าคำตอบเปลี่ยนไปหลายปี ดังที่หลายคนได้ตอบไปแล้วบางครั้งคำตอบก็กลายเป็นใช่ใช่ฉันไม่เคยอัปเดตคำตอบที่ยอมรับเพราะเป็นคำตอบที่ถูกต้องในเวลานั้น (ฉันไม่แน่ใจว่านโยบาย Stack Overflow นั้นเป็นอย่างไร)
ฉันแค่ต้องการเพิ่มคำตอบสำหรับผู้ที่ยังคงค้นหาหัวข้อนี้อยู่ ตั้งแต่วันที่ 5/17/2017 Google ยังประกาศด้วยว่าKotlinเป็นภาษาทางการสำหรับการพัฒนา Android ด้วย
ฉันยังไม่พบว่ามีการแถลงข่าวอย่างเป็นทางการ แต่ฉันไม่ได้ดูบางส่วนของ Google I / O วิดีโอที่มีการประกาศ นี่คือลิงค์ไปยังบล็อกโพสต์โดยทีม Kotlin ในการประกาศ
การเพิ่มสิ่งต่อไปนี้แก้ไขปัญหาสำหรับฉัน (Android studio 2.3.2):
build.gradle (โครงการ)
buildscript {
repositories {
...
jcenter()
}
dependencies {
...
classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
...
}
}
build.gradle (โมดูล: แอป)
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
...
}
Java 8 รองรับส่วนย่อยของ Android Studio แล้ว เพียงทำการปรับเปลี่ยนความเข้ากันได้ของแหล่งที่มาและเป้าหมายจากหน้าต่างด้านล่าง:
ไฟล์ -> โครงสร้างโครงการ
ข้อมูลเพิ่มเติมมีอยู่ในลิงค์ด้านล่าง
https://developer.android.com/studio/write/java8-support.html
อัพเดท 2019/10/28
สตูดิโอ Android 4.0แก้นี้ปัญหาปัญหา
คอมไพเลอร์ D8 แพทช์ backport ของ Java 8 native APIs ลงใน APK ของคุณในเวลารวบรวมและแอปของคุณจะใช้รหัสนั้นแทน API ดั้งเดิมที่รันไทม์ กระบวนการนี้เรียกว่าdesugaring
โซลูชันทั้งหมดข้างต้นดูเหมือนจะไม่สามารถใช้งานได้ในปี 2019ด้วยAndroid Studio 3.4+ล่าสุด
ฉันคิดออกที่สมบูรณ์แบบและถึงวิธีการแก้ปัญหาวันที่จะโยกย้ายหรือปรับโครงการ Android ของคุณเพื่อJava 8
การแก้ไข:
คลิกที่ไฟล์ -> โครงสร้างโครงการ -> โมดูล -> แท็บ
คุณสมบัติ
เปลี่ยนความเข้ากันได้ของแหล่งที่มาและความเข้ากันได้ของเป้าหมายเป็น1.8 (Java 8)
ใช่คุณสามารถใช้คุณสมบัติ Java 8 Language ใน Android Studio แต่รุ่นต้องเป็น 3.0 หรือสูงกว่า อ่านบทความนี้สำหรับวิธีการใช้คุณสมบัติ java 8 ใน android studio
https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html
วิธีที่ง่ายที่สุดในการเพิ่มการรองรับ Java 8
compileOptions {
targetCompatibility = '1.8'
sourceCompatibility = '1.8'
}
เพียงเพิ่มในไฟล์ build.gradle ของคุณ