เป็นไปได้ไหมที่จะใช้ Java 8 สำหรับการพัฒนา Android?


609

การค้นหาเว็บจะไม่ชัดเจนถ้ารองรับ Java 8 สำหรับการพัฒนา Android หรือไม่

ก่อนที่ฉันจะดาวน์โหลด / ติดตั้ง Java 8 ฉันสามารถชี้ไปที่เอกสาร "ทางการ" ใด ๆ ที่ระบุว่า Java 8 เป็นหรือไม่รองรับการพัฒนา Android


21
ฉันไม่รู้เกี่ยวกับแถลงการณ์อย่างเป็นทางการ แต่ฉันมี Java 8 (แก้ไข: JDK 8) ทำงานได้ดีกับ Android SDK สำหรับฉัน Windows 8.1 64 บิตที่นี่
Hoang Huynh


2
@HoangHuynh คุณสามารถใช้ JDK 6 ขึ้นไปสำหรับการพัฒนา Android อย่างไรก็ตามการคอมไพล์สนับสนุน Java เวอร์ชัน 6 (และ 7 ในกรณีของ KitKat) ฉันคิดว่าสิ่งที่ OP หมายถึงสำหรับรุ่น java (ไม่ใช่ JDK)
waqaslam

13
Java 8 รองรับอย่างเป็นทางการใน Android N. android-developers.blogspot.com/2016/03/…
Jay

2
อาจจะเร็ว ๆ นี้: developer.android.com/preview/j8-jack.html
Ray Tayek

คำตอบ:


189

java 8

Android รองรับคุณสมบัติภาษา Java 7 ทั้งหมดและชุดย่อยของคุณสมบัติภาษา Java 8 ที่แตกต่างกันไปตามเวอร์ชั่นแพลตฟอร์ม

เพื่อตรวจสอบว่าคุณสมบัติใดของจาวา 8 ที่รองรับ

ใช้คุณสมบัติภาษา Java 8

เราได้ตัดสินใจเพิ่มการสนับสนุนสำหรับคุณสมบัติภาษา Java 8 โดยตรงในชุดเครื่องมือ javac และ dx ปัจจุบันและเลิกใช้ toolchain ของแจ็ค ด้วยทิศทางใหม่นี้เครื่องมือและปลั๊กอินที่มีอยู่ขึ้นอยู่กับรูปแบบไฟล์คลาส Java ควรทำงานต่อไป การพัฒนาไปข้างหน้าคุณสมบัติภาษา Java 8 จะได้รับการสนับสนุนโดยระบบ Android เรามีเป้าหมายที่จะเปิดตัวผลิตภัณฑ์นี้เป็นส่วนหนึ่งของ Android Studio ในอีกไม่กี่สัปดาห์ข้างหน้าและเราต้องการแบ่งปันการตัดสินใจนี้กับคุณ

รองรับฟีเจอร์อนาคตของ Java 8 Language บน Android

ผู้ใช้ Eclipse:

สำหรับนักพัฒนาเก่าที่ชอบ Eclipse google จะหยุดสนับสนุนเครื่องมือของ Eclipse Android Developer

หากคุณติดตั้ง Java JDK 8 แล้วให้มันลองถ้ามีปรากฏปัญหาพยายามที่จะตั้งคอมไพเลอร์เป็น 1.6 ใน Eclipse จากเมนู→หน้าต่างการตั้งค่าJava → คอมไพเลอร์ Java 7 ก็จะทำงานเช่นกัน:

Eclipse Preferences -> Java -> Compiler

จำเป็นต้องใช้ Java 7 หรือสูงกว่าหากคุณกำหนดเป้าหมายเป็น Android 5.0 ขึ้นไป

ติดตั้งหลาย JDK แล้วลอง


2
Java 8 เปลี่ยนวิธีการทำงานของ bytecode หรือไม่ ถ้าไม่ควรใช้ Java เวอร์ชันใดก็ได้ตามหลักวิชาการตราบใดที่คอมไพล์แล้ว
Ben Leggiero

6
คำถามที่ถูกต้องคือ: ถ้าคุณใช้ฟีเจอร์ใหม่ใน java 8 ไม่มีอยู่ใน java 7 เพื่อสร้างแอพ android, มันใช้ได้ไหม? ที่จะอยู่ในด้านความปลอดภัยทำตามคำแนะนำอย่างเป็นทางการ
อังกฤษ Samer T

12
@ BenC.R.Leggiero ไม่มี bytecode ใหม่ในชวา 8 แต่ความหมายและโครงสร้างมีการเปลี่ยนแปลงstackoverflow.com/questions/28228450/... stackoverflow.com/questions/16143684/...
phuclv

17
โปรดอย่าโพสต์ "อัพเดต N" ในคำตอบของคุณ เขียนใหม่เพื่อให้มีข้อมูลที่ทันสมัย ไม่เช่นนั้น SO จะได้รับข้อมูลจากฟอรัมในอีกไม่กี่ปีข้างหน้า
Aleksandr Dubinsky

1
คำตอบจะต้องมีการปรับปรุง Java 8 จะรองรับตั้งแต่ Android Studio 3.0 และ Gradle Plugin 3.0
ЮрійМазуревич

350

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 แทนการสนับสนุนอย่างเป็นทางการ


13
มันเป็นการดิ้นรนเพื่อให้มันทำงานได้ แต่เมื่อฉันทำตามคำแนะนำที่ถูกต้องแล้วมันก็ใช้งานได้ดี หมายเหตุสำหรับผู้ใช้ Eclipse: Eclipse ใช้งานได้ไม่ดีผมขอแนะนำให้โยกย้ายไปยัง Android Studio (ฉันจะคิดถึง Eclipse แต่นั่นเป็นวิธีที่มันเป็นตอนนี้!)
Simon Forsberg

2
Nitpick: Android ไม่รองรับคำสั่ง multi-catch จาก Java 7
csvan

11
รองรับการใช้งานมัลติแคปคุณสมบัติเฉพาะ JDK7 ที่ Android ไม่รองรับคือการลองใช้ทรัพยากร
Matthieu Harlé

12
Java 7 ทำงานกับ Android ทุกรุ่น ข้อยกเว้นหนึ่งข้อ: ใช้try-with-resourcesงานได้ตั้งแต่ Kitkat เท่านั้น
Dmitry Zaytsev

2
@Simon André Forsberg (ข้อควรระวัง: ปลั๊กไร้ยางอาย!) - เพื่อไม่รองรับ Java 8 stream API คุณสามารถใช้ประโยชน์จากห้องสมุดของฉันได้ที่sourceforge.net/projects/streamsupport - มันสนับสนุนการรองรับ Android อย่างชัดเจน
Stefan Zobel

99

คุณสามารถใช้gradle-retrolambagradle 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จะต้องอยู่ร่วมกันในเครื่องพัฒนา ต้องทำตามขั้นตอนด้านล่างเพื่อติดตั้ง:

  • ไปที่หน้าตัวอย่างก่อนเข้าใช้งาน JDK 8 http://jdk8.java.net
  • ดาวน์โหลด JDK 8u20 และติดตั้ง ไม่จำเป็นต้องทำการติดตั้ง JRE 8 และสามารถข้ามได้
  • ไปที่หน้าปล่อยมั่นคงล่าสุดของ JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • ดาวน์โหลด JDK 7u65 และติดตั้ง ไม่จำเป็นต้องทำการติดตั้ง JRE 7 อีกครั้งและสามารถข้ามได้
  • เพิ่ม JDK 8 โฮมโฟลเดอร์และโฟลเดอร์ JDK 8 binให้กับ%PATH%ตัวแปรของคุณ
  • สร้างตัวแปรสภาพแวดล้อมใหม่JAVA_HOMEด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 8
  • สร้างตัวแปรสภาพแวดล้อมใหม่JAVA8_HOMEอีกครั้งด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 8
  • สร้างตัวแปรสภาพแวดล้อมใหม่JAVA7_HOMEด้วยค่าของพา ธ ของโฮมโฟลเดอร์ JDK 7
  • เปิดหน้าต่างเทอร์มินัลแล้วรันjava -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

  • ดาวน์โหลด ADT และคลายซิปเนื้อหาลงในโฟลเดอร์เช่น 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%ตัวแปรของคุณ
  • สร้างทางลัดไปยัง Eclipse IDE หากคุณต้องการ มันอยู่ภายใต้โฟลเดอร์การติดตั้ง ADT ของคุณเช่นD:\adt\eclipse
  • รัน Eclipse IDE และสร้างเวิร์กสเปซเช่น 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.zip
  • เปิดเครื่องรูดเนื้อหาลงในโฟลเดอร์เช่น D:\adt\gradle
  • กำหนดตัวแปรสภาพแวดล้อมใหม่ที่เรียกว่า GRADLE_HOMEค่าพา ธ ของโฟลเดอร์การติดตั้ง Gradle ของคุณเช่นD:\adt\gradle
  • เพิ่มโฟลเดอร์ไบนารี Gradle ของคุณเช่นD:\adt\gradle\binไปยัง%PATH%ตัวแปรของคุณ
  • เปิดหน้าต่างเทอร์มินัลและเรียกใช้gradle -vคำสั่งและตรวจสอบว่ามันทำงานแล้วหากคุณมาถึงจุดนี้ได้สำเร็จหมายความว่าคุณพร้อมที่จะสร้างแอป Android เครื่องแรกของคุณโดยใช้คุณสมบัติ Java 8

แอพสาธิต

แอพที่เรียบง่ายจะถูกสร้างขึ้นเพื่อแสดงการใช้งานเครื่องมือที่อธิบายไว้ในส่วนก่อนหน้า คุณสามารถทำตามขั้นตอนที่ระบุด้านล่างเพื่อรับข้อมูลเชิงลึกเกี่ยวกับการใช้แลมบ์ดานิพจน์ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android:

  • เรียกใช้ Eclipse IDE และสร้างแอป 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
  • กรอกแบตช์ไฟล์เหล่านี้ดังนี้:

gradle_build.cmd:

ป้อนคำอธิบายรูปภาพที่นี่

gradle_post_build.cmd:

ป้อนคำอธิบายรูปภาพที่นี่

gradle_clean.cmd:

ป้อนคำอธิบายรูปภาพที่นี่

  • ยกเลิกการเลือกProject -> Build Automaticallyตัวเลือกเมนู
  • คลิกขวาที่โครงการและเลือกProperties -> Buildersและยกเลิกการเลือกผู้สร้างเริ่มต้นทั้งหมดที่ระบุโดย ADT
  • คลิกNewปุ่มในหน้าต่างเดียวกันและเลือก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โฟลเดอร์ด้วย
  • สลับกลับไปที่ Eclipse และเลือกProject -> Cleanตัวเลือกเมนู กรอกแบบฟอร์มที่แสดงดังนี้

Clean Project หน้าต่าง

ป้อนคำอธิบายรูปภาพที่นี่

  • คลิกOKและรอจนกระทั่งกระบวนการทำความสะอาดเสร็จสมบูรณ์
  • เพิ่มข้อมูลโค้ด Java ที่ระบุด้านล่างทันทีหลังจากการเรียกไปยัง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:

แอปพลิเคชัน HelloLambda

ป้อนคำอธิบายรูปภาพที่นี่

คุณอาจสังเกตในLogCatหน้าต่างว่าข้อมูลโค้ดที่มีนิพจน์แลมบ์ดาแบบธรรมดาทำงานได้อย่างถูกต้อง

ป้อนคำอธิบายรูปภาพที่นี่

ที่มา: การใช้ Java 8 Lambda Expressions ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Android


แต่คุณจะสามารถดีบักรหัสนี้โดยใช้ตัวดีบัก Android หรือไม่ ฉันเดาว่าหมายเลขสแต็ค / สายเข้ากันไม่ได้ ดูเหมือนว่าเป็นอุปสรรคสำคัญในการพัฒนาด้วย Java 8 บน Android
Zombies

2
@ Zombies ใช่คุณยังสามารถแก้ไขข้อบกพร่องได้ ทุกอย่างใช้ได้ดี
Korniltsev Anatoly

42

ตามลิงค์นี้เพื่อรับการปรับปรุงใหม่ ใช้คุณสมบัติภาษา 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อะไรบ้าง?
WindRider

ฉันคิดว่ามีเพียงการแสดงออกแลมบ์ดาที่เข้ากันได้แบบย้อนกลับคุณสมบัติ Java 8 อื่น ๆ จะใช้งานได้เฉพาะใน N (หรือเวอร์ชันในอนาคต) ฉันไม่ได้ทดสอบสิ่งนี้ แต่นี่คือสิ่งที่ฉันเข้าใจจากเอกสาร Android ดังนั้นสำหรับคุณสมบัติของ Java 8 minSdkVersion คือ N, นอกจากการแสดงออกแลมบ์ดา

ดังนั้น ... อีกสองสามปีกว่าที่ N จะเป็นผู้นำในแดชบอร์ด :(
WindRider

น่าเสียดายใช่ หรือจนกว่า Android จะให้ความเข้ากันได้แบบย้อนหลังเช่นแลมบ์ดา

1
@WindRider คุณสามารถใช้ minSdkVersion 15 ขึ้นไป ขณะนี้ฉันกำลังใช้ minSdkVersion 17 ในโครงการ Android ของฉันกับ Lambdas และทุกอย่างทำงานได้
YYamil

22

ใช่ Android รองรับ Java 8 ทันที (24.1.17)

ตอนนี้มันเป็นไปได้

แต่คุณจะต้องให้อุปกรณ์ของคุณทำงานบน 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 ของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


1
สกาล่าจะหนักมากที่จะจัดทำแพ็คเกจด้วย apk
TechSpellBound

โปรดอ้างอิงโซลูชันนี้สำหรับ android studio 2.0 ที่อัปเดตเนื่องจากพวกเขาได้อัปเดตตัวเลือกการกำหนดค่าที่ จำกัด
Gaurav Sharma

19

Android ใช้ Java ที่แยกออกจาก Java 6

ในฐานะของ Android SDK รุ่น 19 คุณสามารถใช้ Java 7 คุณสมบัติโดยการทำเช่นนี้ ยังไม่รองรับ Java 8 อย่างสมบูรณ์


1
คุณเป็นผู้ช่วยชีวิต คุณรู้หรือไม่ว่ามีบางสิ่งที่จะใช้การลองกับทรัพยากรในลักษณะเดียวกัน
galets

@galets ยังไม่มีวิธี แต่ฉันจะเดิมพันกับ Google เพื่อเพิ่มในบางจุดในอนาคต ข้อมูลเพิ่มเติมโปรดดูที่: stackoverflow.com/questions/16921337/…
chaqke

16

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 แล้ว:

  • นิพจน์แลมบ์ดา
  • วิธีการอ้างอิง
  • พิมพ์คำอธิบายประกอบ (ขณะนี้ข้อมูลคำอธิบายประกอบประเภทไม่สามารถใช้งานได้ในขณะทำงาน แต่ใช้เวลาในการรวบรวมเท่านั้น)
  • คำอธิบายประกอบซ้ำ
  • วิธีการเริ่มต้นและส่วนต่อประสานแบบคงที่ (ระดับ API 24 หรือสูงกว่าไม่มีการสนับสนุนการเรียกใช้ทันที);

นอกจากนี้จาก min API level 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 ()

เพิ่มบรรทัดเหล่านี้ใน build.gradle ของโมดูลแอปพลิเคชันของคุณเพื่อแจ้งโครงการระดับภาษา:

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

ปิดใช้งานการสนับสนุนคุณสมบัติ Java 8 Language ด้วยการเพิ่มไฟล์ต่อไปนี้ในไฟล์gradle.propertiesของคุณ:

android.enableDesugar=false

คุณทำเสร็จแล้ว! ตอนนี้คุณสามารถใช้ native java8!


14

Android OFFICIALLY รองรับ Java 8 ตั้งแต่ Android N

การประกาศคุณสมบัติอยู่ที่นี่การประกาศภาษา Java 8 คือ:

ปรับปรุงการรองรับภาษา Java 8 - เราตื่นเต้นที่จะนำคุณสมบัติภาษา Java 8 มาสู่ Android ด้วยคอมไพเลอร์แจ็คของ Android ตอนนี้คุณสามารถใช้คุณสมบัติภาษา Java 8 ยอดนิยมมากมายรวมถึง lambdas และอื่น ๆ สำหรับเวอร์ชัน Android ที่ย้อนกลับไปถึง Gingerbread คุณสมบัติใหม่ช่วยลดรหัสสำเร็จรูป ตัวอย่างเช่น lambdas สามารถแทนที่คลาสภายในที่ไม่ระบุชื่อเมื่อจัดให้ผู้ฟังเหตุการณ์ คุณลักษณะบางอย่างของภาษา Java 8 - เช่นวิธีการเริ่มต้นและแบบคงที่สตรีมและอินเตอร์เฟสที่ใช้งานได้ - ขณะนี้มีให้ใช้งานใน N และสูงกว่า ด้วยแจ็คเรารอคอยที่จะติดตามภาษา Java อย่างใกล้ชิดยิ่งขึ้นในขณะที่ยังคงความเข้ากันได้ย้อนหลัง


มันยังค่อนข้างบั๊กในวันนี้ตัวอย่างเช่นการรันทันทีไม่ทำงานกับลูกแกะ: ถ้าคุณเปลี่ยนรหัสภายในฟังก์ชั่นแลมบ์ดาของคุณมันจะไม่เปลี่ยนแปลง
adriendenat

12

เราสามารถใช้ Java 8 โดยใช้:

  1. ใน build.gradle (โครงการ: myProject) เพิ่มต่อไปนี้

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. ใน build.gradle (โมดูล: myModule) เพิ่มต่อไปนี้

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

1
คำตอบแรกที่แตกต่างจากคำแนะนำแลมบ์ดาคืออะไร?
Maarten Bodewes

2
@MaartenBodewes ดูเหมือนจะชี้ให้เห็นว่ามันง่ายกว่าคำตอบที่ยอมรับ อ้างอิงmedium.com/android-news/ …
TechSpellBound

อย่าใช้มัน plugin buggy
Akshay Mukadam

11

อัพเดท 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


สิ่งที่ฉันไม่ได้รับคืออะไรสตูดิโอ Android ต้องทำอย่างไรกับการสนับสนุน java8 (ไม่เคยมี intellij มาก่อน)! นั่นหมายความว่าถ้าฉันใช้ gradle บนเทอร์มินัลเพื่อคอมไพล์โปรเจ็กต์มันจะไม่คอมไพล์?!
cesarferreira

1
@cesarferreira คุณต้องอัปเดตปลั๊กอิน Android เป็นเวอร์ชันล่าสุด (ซึ่งอยู่ในขณะนี้2.4.0-alpha6) โปรดตรวจสอบบล็อกใบเสนอราคาในคำตอบ
ไอดอล

การเพิ่มไปยังโมดูล (ไม่ใช่แอป) ฉันกำลังทำงานอยู่คือสิ่งที่จับได้ การเพิ่มโมดูลแอปไม่ได้ช่วย
Surekha

6

ทางที่ง่าย

คุณสามารถเปิดใช้งานการสนับสนุน 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หรือสูงกว่า ดูเอกสารประกอบสำหรับการอ่านเพิ่มเติม


วิธีนี้ใช้ได้ผลกับฉัน: stackoverflow.com/a/55467237/4698320
DäñishShärmà

5

เมื่อฉันถามคำถามนี้เมื่อเกือบ 2 ปีที่แล้วคำตอบคือ“ เป็นทางการ” ไม่ใช่ แต่ตามที่ระบุโดยคำตอบของ ekcr1 คุณจะได้รับหนึ่งในคุณสมบัติที่คาดว่าจะสูงที่สุด (lambdas) หากคุณใช้ retrolamba ในขณะที่ฉันยังคงใช้ eclipse อยู่เนื่องจาก Android Studio อยู่ในโหมด“ ดูตัวอย่าง” ดังนั้นฉันไม่เคยไล่ตามเส้นทางนี้

วันนี้ฉันคิดว่าคำตอบที่ "เป็นทางการ" ยังคงไม่เป็นและในขณะที่ retrolamba ยังคงดูเหมือนเป็นวิธีที่ดีที่จะไปมีตัวเลือกอื่นสำหรับผู้ที่ยินดีที่จะลงเส้นทางค่อนข้าง "ไม่เป็นทางการ" สามารถใช้เส้นทางคือ Kotlin

วันนี้ Kotlin ถึง 1.0.0 สำหรับผู้ที่ไม่คุ้นเคยกับ Kotlin สามารถดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ของพวกเขาที่นี่:

https://kotlinlang.org

หรือดูวิดีโอ utube นี้ของการพูดคุยที่ได้รับจาก Jake Wharton

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


4

ข่าวล่าสุด:

Google ประกาศว่าด้วย Android N และ Android Studio 2.1+ แพลตฟอร์มจะรองรับ Java 8 และยังมีเวอร์ชั่นเสถียรของ studio 2.1 ที่วางจำหน่าย

ในที่สุดเราสามารถใช้แลมบ์ดานิพจน์ ไม่มีตัวกรองรายการเพิ่มเติมสำหรับ for loop Horeeey


4

เพิ่ม 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
    }
}

1
นี่เป็นวิธีที่ถูกต้องในการเพิ่มการสนับสนุนสำหรับ Java 8 สำหรับโครงการ Android ข้อเสียคือการเรียกใช้ทันทีไม่ได้ทำงานในขณะที่เปิดใช้แจ็ค
Ionut Negru

ไม่สนับสนุนอย่างเต็มที่
Ahmad Aghazadeh

2

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


2

ใช่. เราจะใช้ 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


2

เพิ่มบรรทัดนี้ลงในโมดูลเลเวลสร้างระดับ

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

ฉันเขียนคำตอบที่คล้ายกับคำถามที่คล้ายกันใน Stack Overflow แต่นี่เป็นส่วนหนึ่งของคำตอบนั้น

Android Studio 2.1:

Android Studio เวอร์ชันใหม่ (2.1) รองรับคุณสมบัติของ Java 8 นี่คือสารสกัดจากการโพสต์ blogspotของAndroid Developers :

... การเปิดตัว Android Studio 2.1 มีการรองรับคอมไพเลอร์แจ็คตัวใหม่และรองรับJava 88

...

ในการใช้คุณสมบัติภาษา Java 8 เมื่อพัฒนาด้วย N Developer Preview คุณจะต้องใช้คอมไพเลอร์แจ็ค ตัวช่วยสร้างโครงการใหม่ [ไฟล์→ใหม่→โครงการ] สร้างการกำหนดค่าที่ถูกต้องสำหรับโครงการที่กำหนดเป้าหมายเป็น N


ก่อนหน้า Android Studio 2.1:

Android ยังไม่รองรับ Java 1.8 (รองรับได้สูงสุด 1.7 เท่านั้น) ดังนั้นคุณไม่สามารถใช้คุณสมบัติ Java 8 เช่น lambdas

คำตอบนี้ให้รายละเอียดเพิ่มเติมเกี่ยวกับความเข้ากันได้ของ Android Studio ; มันระบุว่า:

หากคุณต้องการใช้ lambdas ซึ่งเป็นหนึ่งในคุณสมบัติหลักของ Java 8 ใน Android คุณสามารถใช้ gradle-retrolamba

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการใช้gradle-retrolambda, คำตอบนี้ให้มากของรายละเอียดในการทำว่า


สวัสดี Farbod! ฉันใช้ AndroidStudio 2.2.2 ของฉัน"SDK Location"(นี่เป็น Mac FWIW) เพิ่งบอกว่า"/Users/me/Library/Android/sdk" ฉันใช้ Java8 - วิธีใช้ Java8 หรือไม่? ขอบคุณ!
Fattie

1

ฉันคิดว่าฉันจะโพสต์คำตอบที่อัปเดตสำหรับผู้ที่มองหาบางสิ่งที่เป็นปัจจุบันมากขึ้น

ปัจจุบัน 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)

1

ฉันถามคำถามนี้เมื่อ 3 ปีที่แล้วและเห็นได้ชัดว่าคำตอบเปลี่ยนไปหลายปี ดังที่หลายคนได้ตอบไปแล้วบางครั้งคำตอบก็กลายเป็นใช่ใช่ฉันไม่เคยอัปเดตคำตอบที่ยอมรับเพราะเป็นคำตอบที่ถูกต้องในเวลานั้น (ฉันไม่แน่ใจว่านโยบาย Stack Overflow นั้นเป็นอย่างไร)

ฉันแค่ต้องการเพิ่มคำตอบสำหรับผู้ที่ยังคงค้นหาหัวข้อนี้อยู่ ตั้งแต่วันที่ 5/17/2017 Google ยังประกาศด้วยว่าKotlinเป็นภาษาทางการสำหรับการพัฒนา Android ด้วย

ฉันยังไม่พบว่ามีการแถลงข่าวอย่างเป็นทางการ แต่ฉันไม่ได้ดูบางส่วนของ Google I / O วิดีโอที่มีการประกาศ นี่คือลิงค์ไปยังบล็อกโพสต์โดยทีม Kotlin ในการประกาศ


1

การเพิ่มสิ่งต่อไปนี้แก้ไขปัญหาสำหรับฉัน (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
    ...
}

1

Java 8 รองรับส่วนย่อยของ Android Studio แล้ว เพียงทำการปรับเปลี่ยนความเข้ากันได้ของแหล่งที่มาและเป้าหมายจากหน้าต่างด้านล่าง:

ไฟล์ -> โครงสร้างโครงการ

หน้าต่างการปรับ

ข้อมูลเพิ่มเติมมีอยู่ในลิงค์ด้านล่าง

https://developer.android.com/studio/write/java8-support.html


1

อัพเดท 2019/10/28

สตูดิโอ Android 4.0แก้นี้ปัญหาปัญหา

คอมไพเลอร์ D8 แพทช์ backport ของ Java 8 native APIs ลงใน APK ของคุณในเวลารวบรวมและแอปของคุณจะใช้รหัสนั้นแทน API ดั้งเดิมที่รันไทม์ กระบวนการนี้เรียกว่าdesugaring


0

โซลูชันทั้งหมดข้างต้นดูเหมือนจะไม่สามารถใช้งานได้ในปี 2019ด้วยAndroid Studio 3.4+ล่าสุด

ฉันคิดออกที่สมบูรณ์แบบและถึงวิธีการแก้ปัญหาวันที่จะโยกย้ายหรือปรับโครงการ Android ของคุณเพื่อJava 8

การแก้ไข: คลิกที่ไฟล์ -> โครงสร้างโครงการ -> โมดูล -> แท็บ คุณสมบัติ

เปลี่ยนความเข้ากันได้ของแหล่งที่มาและความเข้ากันได้ของเป้าหมายเป็น1.8 (Java 8)

ป้อนคำอธิบายรูปภาพที่นี่



-1

วิธีที่ง่ายที่สุดในการเพิ่มการรองรับ Java 8

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

เพียงเพิ่มในไฟล์ build.gradle ของคุณ


คำตอบที่ซ้ำกัน, ที่มีคุณภาพต่ำ
JanPl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.