ซอร์สโค้ดของคุณเขียนด้วย Java, Kotlin หรือทั้งคู่ คุณต้องเลือกภาษา JDK หรือ Java จากหลายที่ สำหรับบิลด์ของคุณ
อภิธานศัพท์
- Java Development Kit (JDK)
-
Java Development Kit (JDK)
ประกอบด้วย:
- เครื่องมือต่างๆ เช่น คอมไพเลอร์ เครื่องมือสร้างโปรไฟล์ และผู้สร้างที่เก็บถาวร วิดีโอเหล่านี้จะใช้เบื้องหลังระหว่างการสร้างเพื่อ สร้างแอปพลิเคชันของคุณ
- ไลบรารีที่มี API ที่คุณสามารถเรียกใช้จาก ซอร์สโค้ด Kotlin หรือ Java โปรดทราบว่ามีเพียงบางฟังก์ชันเท่านั้น ที่พร้อมใช้งานบน Android
- Java Virtual Machine (JVM) ซึ่งเป็นอินเทอร์พรีเตอร์ที่ประมวลผล แอปพลิเคชัน Java คุณใช้ JVM ในการเรียกใช้ Android Studio IDE และเครื่องมือสร้าง Gradle ไม่มีการใช้ JVM บน Android อุปกรณ์และโปรแกรมจำลองต่างๆ
- รันไทม์ของ JetBrains (JBR)
- รันไทม์ของ JetBrains (JBR) เป็น JDK ที่ได้รับการปรับปรุงและจัดจำหน่ายโดยใช้ Android Studio มีการเพิ่มประสิทธิภาพหลายอย่างสำหรับใช้ใน Studio และ JetBrains ที่เกี่ยวข้อง แต่ยังสามารถใช้เพื่อเรียกใช้แอปพลิเคชัน Java อื่นๆ ได้ด้วย
ฉันจะเลือก JDK เพื่อเรียกใช้ Android Studio ได้อย่างไร
เราขอแนะนำให้ใช้ JBR เพื่อเรียกใช้ Android Studio ติดตั้งใช้งานแล้ว
ร่วมกับและใช้เพื่อทดสอบ Android Studio และยังรวมถึงการเพิ่มประสิทธิภาพเพื่อ
การใช้งาน Android Studio เพื่อให้แน่ใจว่าจะเป็นเช่นนี้ อย่าตั้งค่า STUDIO_JDK
ตัวแปรสภาพแวดล้อม
สคริปต์การเริ่มต้นสำหรับ Android Studio จะค้นหา JVM ใน คำสั่งซื้อ:
- ตัวแปรสภาพแวดล้อม
STUDIO_JDK
- ไดเรกทอรี
studio.jdk
(ในการเผยแพร่ของ Android Studio) - ไดเรกทอรี
jbr
(JetBrains Runtime) ใน Android Studio แนะนำ - ตัวแปรสภาพแวดล้อม
JDK_HOME
- ตัวแปรสภาพแวดล้อม
JAVA_HOME
- ไฟล์ปฏิบัติการ
java
ในตัวแปรสภาพแวดล้อมPATH
ฉันจะเลือกให้ JDK เรียกใช้บิลด์ Gradle ของฉันได้อย่างไร
ถ้าคุณเรียกใช้ Gradle โดยใช้ปุ่มใน Android Studio จะเห็นว่า JDK ตั้งค่าใน
ใช้การตั้งค่า Android Studio เพื่อเรียกใช้ Gradle หากเรียกใช้ Gradle ในเทอร์มินัล
ทั้งภายในหรือภายนอก Android Studio, ตัวแปรสภาพแวดล้อม JAVA_HOME
(หากตั้งค่า) จะกำหนดว่า JDK ใดจะเรียกใช้สคริปต์ Gradle หาก JAVA_HOME
ไม่ได้ตั้งค่าไว้ แต่จะใช้คำสั่ง java
ในสภาพแวดล้อม PATH
ของคุณ
ตัวแปร
เพื่อให้ได้ผลลัพธ์ที่สม่ำเสมอมากที่สุด ให้ตรวจสอบว่าได้ตั้งค่าJAVA_HOME
ตัวแปรสภาพแวดล้อม และ
การกำหนดค่า Gradle JDK ใน Android Studio เป็นค่าเดียวกัน
JDK
เมื่อเรียกใช้บิลด์ Gradle สร้างกระบวนการที่เรียกว่า daemon เพื่อ ดำเนินการสร้างจริง สามารถนำกระบวนการนี้มาใช้ซ้ำได้ ตราบใดที่บิลด์ใช้ JDK และ Gradle เวอร์ชันเดียวกัน การนำมาใช้ซ้ำ Daemon จะลดเวลาเริ่ม JVM ใหม่และเริ่มต้นระบบบิลด์
หากคุณเริ่มสร้างบิลด์ด้วย JDK หรือ Gradle เวอร์ชันอื่น ให้ใช้ การมีการสร้าง Daemon ทำให้ใช้ CPU และหน่วยความจำมากขึ้น
การกำหนดค่า Gradle JDK ใน Android Studio
หากต้องการแก้ไขการกำหนดค่า Gradle JDK ของโปรเจ็กต์ที่มีอยู่ ให้เปิด Gradle การตั้งค่าจากไฟล์ (หรือ Android Studio ใน macOS) > การตั้งค่า > สร้าง, ดำเนินการ, ทำให้ใช้งานได้ > เครื่องมือสร้าง > Gradle Gradle JDK จะมีตัวเลือกต่อไปนี้ให้คุณเลือก
- มาโคร เช่น
JAVA_HOME
และGRADLE_LOCAL_JAVA_HOME
- รายการตาราง JDK ในรูปแบบ
vendor-version
เช่นjbr-17
ซึ่งจัดเก็บไว้ ในไฟล์การกำหนดค่า Android - การดาวน์โหลด JDK
- การเพิ่ม JDK เฉพาะ
- JDK ที่ตรวจพบในเครื่องจากการติดตั้ง JDK เริ่มต้นของระบบปฏิบัติการ ไดเรกทอรี
ตัวเลือกที่เลือกจะจัดเก็บอยู่ในตัวเลือก gradleJvm
ใน
ไฟล์ .idea/gradle.xml
ของโปรเจ็กต์ และความละเอียดเส้นทาง JDK จะใช้เพื่อเรียกใช้
Gradle เมื่อเริ่มต้นผ่าน Android Studio
มาโครจะเปิดใช้การเลือกเส้นทาง JDK ของโปรเจ็กต์แบบไดนามิก ดังนี้
JAVA_HOME
: ใช้ตัวแปรสภาพแวดล้อมที่มีชื่อเดียวกันGRADLE_LOCAL_JAVA_HOME
: ใช้พร็อพเพอร์ตี้java.home
ใน ไฟล์.gradle/config.properties
ที่มีค่าเริ่มต้นเป็นรันไทม์ของ JetBrains
JDK ที่เลือกจะใช้เพื่อเรียกใช้บิลด์ Gradle และแก้ไข JDK API
อ้างอิงเมื่อแก้ไขสคริปต์บิลด์และซอร์สโค้ด โปรดทราบว่า
compileSdk
ที่ระบุจะจำกัดยิ่งขึ้นว่าสัญลักษณ์ Java ใดจะเป็น
พร้อมใช้งานเมื่อแก้ไขและสร้างซอร์สโค้ด
ตรวจสอบว่าเลือกเวอร์ชัน JDK ที่สูงกว่าหรือเท่ากับ JDK เวอร์ชันที่ปลั๊กอินใช้ในบิลด์ Gradle หากต้องการทราบ เวอร์ชัน JDK ขั้นต่ำที่จำเป็นสำหรับปลั๊กอิน Android Gradle (AGP) โปรดดู ตารางความเข้ากันได้ในบันทึกประจำรุ่น
เช่น ปลั๊กอิน Android Gradle เวอร์ชัน 8.x ต้องใช้ JDK 17 หากคุณพยายามเรียกใช้บิลด์ Gradle ที่ใช้เวอร์ชันของ Gradle เวอร์ชันก่อนหน้า JDK จะรายงานข้อความ เช่น
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
Your current JDK is located in /usr/local/buildtools/java/jdk11
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.
ฉันสามารถใช้ Java API ใดในซอร์สโค้ด Java หรือ Kotlin ของฉัน
แอปพลิเคชัน Android สามารถใช้ API บางรายการที่กำหนดไว้ใน JDK ได้ แต่ไม่ใช่ทั้งหมด
ทั้งหมด Android SDK มีการกำหนดการใช้งานฟังก์ชันไลบรารี Java จำนวนมาก
เป็นส่วนหนึ่งของ API ที่พร้อมใช้งาน พร็อพเพอร์ตี้ compileSdk
ระบุว่า
เวอร์ชัน Android SDK ที่จะใช้เมื่อคอมไพล์ซอร์สโค้ด Kotlin หรือ Java
Kotlin
android {
...
compileSdk = 33
}
ดึงดูด
android {
...
compileSdk 33
}
Android แต่ละเวอร์ชันรองรับ JDK เวอร์ชันเฉพาะและชุดย่อยของ
Java API ที่พร้อมใช้งาน หากคุณใช้ Java API ที่มีใน
compileSdk
ที่ไม่มีอยู่ใน
คุณ minSdk
คุณอาจใช้ API นี้ได้
ใน Android เวอร์ชันก่อนหน้าผ่านกระบวนการที่เรียกว่า
ใช้สารดูดน้ำตาล
ดู Java 11+ API ที่พร้อมให้บริการผ่านการย่อยน้ำตาลเพื่อดูการรองรับ
API
ใช้ตารางนี้เพื่อระบุว่า Java เวอร์ชันใดได้รับการรองรับจาก Android API แต่ละรายการ รวมถึงตำแหน่งที่จะดูรายละเอียดว่ามี Java API ใดบ้าง
Android | Java | ฟีเจอร์ API และภาษาที่รองรับ |
---|---|---|
14 (API 34) | 17 | ไลบรารีหลัก |
13 (API 33) | 11 | ไลบรารีหลัก |
12 (API 32) | 11 | Java API |
11 หรือต่ำกว่า | เวอร์ชัน Android |
JDK ใดคอมไพล์ซอร์สโค้ด Java ของฉัน
Java Toolchain JDK มีคอมไพเลอร์ Java ที่ใช้ในการคอมไพล์ Java ซอร์สโค้ด JDK นี้ยังเรียกใช้ Javadoc และการทดสอบหน่วยระหว่างบิลด์ด้วย
เครื่องมือเชนมีค่าเริ่มต้นเป็น JDK ที่ใช้เพื่อเรียกใช้ Gradle หากคุณใช้ค่าเริ่มต้น และเรียกใช้บิลด์บนเครื่องอื่น (เช่น เครื่องของคุณเองและ เซิร์ฟเวอร์ Continuous Integration ที่แยกต่างหาก) ผลลัพธ์ของบิลด์ อาจแตกต่างกันไปหากใช้ JDK เวอร์ชันแตกต่างกัน
หากต้องการสร้างบิลด์ที่สอดคล้องกันมากขึ้น คุณสามารถระบุ เวอร์ชัน Java Toolchain การระบุ:
- ค้นหา JDK ที่เข้ากันได้ในระบบที่เรียกใช้บิลด์
- หากไม่มี JDK ที่เข้ากันได้ (และกำหนดรีโซลเวอร์ Toolchain แล้ว) ดาวน์โหลด 1 รายการ
- แสดง Java API ของ Toolchain สำหรับการเรียกจากซอร์สโค้ด
- คอมไพล์ซอร์สของ Java โดยใช้เวอร์ชันภาษา Java
- ค่าเริ่มต้นสำหรับ
sourceCompatibility
และtargetCompatibility
เราขอแนะนำให้คุณระบุ Java Toolchain เสมอและตรวจสอบว่า มีการติดตั้ง JDK ที่ระบุ หรือเพิ่ม รีโซลเวอร์เครื่องมือเชน กับงานสร้างของคุณ
คุณสามารถระบุ Toolchain ได้ว่า "ซอร์สโค้ดของคุณเขียนด้วย Java" หรือไม่
Kotlin หรือทั้ง 2 อย่าง ระบุ Toolchain ที่ระดับบนสุดของโมดูล
build.gradle(.kts)
ไฟล์
ระบุเวอร์ชันของเครื่องมือเชน Java ดังนี้
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
ดึงดูด
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
ซึ่งจะใช้ได้หากแหล่งที่มาของคุณคือ Kotlin, Java หรือทั้ง 2 อย่างร่วมกัน
เวอร์ชันเครื่องมือเชน JDK สามารถเหมือนกับเวอร์ชัน JDK ที่ใช้เรียกใช้ Gradle ได้ แต่ทำหน้าที่ไม่เหมือนกัน
ฟีเจอร์ใดของที่มาภาษา Java ที่ฉันสามารถใช้ในซอร์สโค้ด Java ของฉัน
พร็อพเพอร์ตี้ sourceCompatibility
กำหนดฟีเจอร์ภาษา Java
สามารถใช้งานได้ระหว่างการคอมไพล์ซอร์สของ Java
โดยไม่ส่งผลต่อแหล่งที่มาของ Kotlin
หากไม่ได้ระบุ ค่าเริ่มต้นจะเป็น Java Toolchain หรือ
JDK เคยเรียกใช้ Gradle เราขอแนะนำให้คุณระบุ
Toolchain (แนะนำ) หรือ sourceCompatibility
ระบุ sourceCompatibility
ในไฟล์ build.gradle(.kts)
ของโมดูล
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
ดึงดูด
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
ฟีเจอร์ไบนารีของ Java ใดบ้างที่ใช้ได้เมื่อคอมไพล์แหล่งที่มา Kotlin หรือ Java
การระบุ targetCompatibility
และ jvmTarget
จะเป็นตัวกำหนด Java
เวอร์ชันคลาสรูปแบบที่ใช้เมื่อสร้างไบต์โค้ดสำหรับ Java และ Kotlin ที่คอมไพล์
แหล่งที่มาตามลำดับ
ฟีเจอร์บางอย่างของ Kotlin มีอยู่ก่อนที่จะเพิ่มฟีเจอร์ Java ที่เทียบเท่ากัน
ผู้คอมไพเลอร์ Kotlin ยุคแรกๆ ต้องสร้างสรรค์แนวทางของตัวเองขึ้นมาเพื่อนำเสนอ Kotlin เหล่านั้น
ใหม่ๆ คุณลักษณะเหล่านี้บางส่วนได้เพิ่มเข้ามาใน Java ในภายหลัง
เมื่อใช้ jvmTarget
ระดับหลังจากนั้น คอมไพเลอร์ Kotlin อาจใช้
ฟีเจอร์ Java ซึ่งอาจทำให้ประสิทธิภาพดีขึ้น
targetCompatibility
มีค่าเริ่มต้นเป็นค่าเดียวกับ
sourceCompatibility
,
แต่หากระบุ ค่าดังกล่าวต้องมากกว่าหรือเท่ากับ sourceCompatibility
jvmTarget
มีค่าเริ่มต้นเป็นเวอร์ชัน toolchain
Android เวอร์ชันต่างๆ รองรับ Java เวอร์ชันต่างๆ คุณสามารถ
ใช้ประโยชน์จากฟีเจอร์ของ Java เพิ่มเติมด้วยการ
targetCompatibility
และ jvmTarget
แต่การดำเนินการนี้อาจบังคับให้คุณ
เพิ่ม
เวอร์ชัน SDK ขั้นต่ำของ Android เพื่อให้
ฟีเจอร์นี้พร้อมใช้งาน
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
ดึงดูด
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}