ไม่ว่าซอร์สโค้ดจะเขียนด้วย Java, Kotlin หรือทั้ง 2 อย่าง คุณต้องเลือกเวอร์ชัน JDK หรือภาษา Java สำหรับบิลด์ในหลายตำแหน่ง
อภิธานศัพท์
- ชุดพัฒนาซอฟต์แวร์ Java (JDK)
-
ชุดพัฒนาซอฟต์แวร์ Java (JDK)
ประกอบด้วยสิ่งต่อไปนี้
- เครื่องมือต่างๆ เช่น คอมไพเลอร์ เครื่องมือวิเคราะห์ และเครื่องมือสร้างไฟล์เก็บถาวร ซึ่งจะใช้อยู่เบื้องหลังระหว่างการสร้างเพื่อสร้างแอปพลิเคชัน
- ไลบรารีที่มี API ที่คุณเรียกใช้ได้จากซอร์สโค้ด Kotlin หรือ Java โปรดทราบว่าฟังก์ชันบางอย่างอาจไม่พร้อมใช้งานใน Android
- Java Virtual Machine (JVM) ซึ่งเป็นอินเทอร์พรีเตอร์ที่เรียกใช้แอปพลิเคชัน Java คุณใช้ JVM เพื่อเรียกใช้ IDE ของ Android Studio และเครื่องมือสร้าง Gradle JVM ไม่ได้ใช้ในอุปกรณ์ Android หรือโปรแกรมจำลอง
- รันไทม์ของ JetBrains (JBR)
- JetBrains Runtime (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 เวอร์ชันเดียวกัน การใช้โปรแกรมเดรัมซ้ำจะช่วยลดเวลาในการเริ่ม JVM ใหม่และเริ่มต้นระบบการบิลด์
หากเริ่มต้นบิลด์ด้วย JDK หรือ Gradle เวอร์ชันอื่น ระบบจะสร้าง Daemon เพิ่มด้วย ทำให้ใช้ CPU และหน่วยความจำมากขึ้น
การกำหนดค่า Gradle JDK ใน Android Studio
หากต้องการแก้ไขการกำหนดค่า Gradle JDK ของโปรเจ็กต์ที่มีอยู่ ให้เปิดการตั้งค่า Gradle จาก File (หรือ Android Studio ใน macOS) > การตั้งค่า > Build, Execution, Deployment > Build Tools > 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 ซึ่งใช้กับ 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/jdk
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
}
Groovy
android {
...
compileSdk 33
}
Android แต่ละเวอร์ชันรองรับ JDK เวอร์ชันหนึ่งๆ และชุดย่อยของ Java API ที่พร้อมใช้งาน หากคุณใช้ Java API ที่มีให้บริการใน compileSdk
แต่ไม่พร้อมใช้งานใน minSdk
ที่ระบุ คุณอาจใช้ API ดังกล่าวใน Android เวอร์ชันเก่าได้ผ่านกระบวนการที่เรียกว่า Desugaring
ดู API ของ Java 11 ขึ้นไปที่ใช้ได้ผ่านการถอด Sugar เพื่อดู API ที่รองรับ
ใช้ตารางนี้เพื่อดูว่า Android API แต่ละรายการรองรับ Java เวอร์ชันใด และดูรายละเอียดเกี่ยวกับ Java API ที่พร้อมใช้งาน
Android | Java | ฟีเจอร์ API และภาษาที่รองรับ |
---|---|---|
14 (API 34) | 17 | ไลบรารีหลัก |
13 (API 33) | 11 | ไลบรารีหลัก |
12 (API 32) | 11 | Java API |
11 หรือต่ำกว่า | เวอร์ชัน Android |
JDK ใดคอมไพล์ซอร์สโค้ด Java ของฉัน
JDK Java Toolchain มีคอมไพเลอร์ Java ที่ใช้ในการคอมไพล์ซอร์สโค้ดของ Java JDK นี้จะเรียกใช้ Javadoc และการทดสอบ 1 หน่วยระหว่างการสร้างด้วย
เครื่องมือนี้จะตั้งค่าเริ่มต้นเป็น JDK ที่ใช้เรียกใช้ Gradle หากคุณใช้ค่าเริ่มต้นและเรียกใช้บิลด์บนเครื่องเครื่องอื่น (เช่น เครื่องของคุณเองและเซิร์ฟเวอร์การผสานรวมอย่างต่อเนื่องที่แยกต่างหาก) ผลลัพธ์ของบิลด์อาจแตกต่างกันไปหากใช้ JDK เวอร์ชันอื่น
หากต้องการสร้างบิลด์ที่สอดคล้องกันมากขึ้น คุณสามารถระบุเวอร์ชันของเครื่องมือทางเทคนิค Java อย่างชัดเจน การระบุข้อมูลนี้
- ค้นหา JDK ที่เข้ากันได้ในระบบที่ใช้บิลด์
- หากไม่มี JDK ที่เข้ากันได้ (และมีการกำหนดรีโซลเวอร์ Toolchain) ให้ดาวน์โหลด 1 รายการ
- แสดง Java API ของเครื่องมือทางเทคนิคสำหรับการเรียกจากซอร์สโค้ด
- คอมไพล์ซอร์สโค้ด Java โดยใช้เวอร์ชันภาษา Java
- อุปกรณ์เริ่มต้นสำหรับ
sourceCompatibility
และtargetCompatibility
เราขอแนะนำให้คุณระบุเครื่องมือทางเทคนิคของ Java เสมอ และตรวจสอบว่าได้ติดตั้ง JDK ที่ระบุไว้แล้ว หรือเพิ่มเครื่องมือแก้ไขเครื่องมือทางเทคนิคลงในบิลด์
คุณระบุ Toolchain ได้ว่าซอร์สโค้ดของคุณจะเขียนด้วย Java, Kotlin หรือทั้ง 2 อย่าง ระบุ Toolchain ที่ระดับบนสุดของไฟล์ build.gradle(.kts)
ของโมดูล
ระบุเวอร์ชันของเครื่องมือเชน Java ดังนี้
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
ซึ่งจะใช้ได้หากแหล่งที่มาของคุณคือ Kotlin, Java หรือทั้ง 2 อย่างร่วมกัน
เวอร์ชัน JDK ของเครื่องมือทํางานอาจเหมือนกับ JDK ที่ใช้เรียกใช้ Gradle แต่โปรดทราบว่าเครื่องมือทํางานมีวัตถุประสงค์ต่างกัน
ฉันใช้ฟีเจอร์แหล่งที่มาของภาษา Java ใดได้บ้างในซอร์สโค้ด Java
พร็อพเพอร์ตี้ sourceCompatibility
จะกำหนดฟีเจอร์ภาษา Java ที่พร้อมใช้งานระหว่างการคอมไพล์ซอร์สโค้ด Java
โดยจะไม่ส่งผลต่อแหล่งที่มาของ Kotlin
ระบุ sourceCompatibility
ในไฟล์ build.gradle(.kts)
ของโมดูลดังนี้
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
หากไม่ได้ระบุไว้ พร็อพเพอร์ตี้นี้จะมีค่าเริ่มต้นเป็นเวอร์ชัน Java Toolchain หากคุณไม่ได้ใช้ชุดเครื่องมือ Java เครื่องมือดังกล่าวจะเป็นเวอร์ชันเริ่มต้นที่ปลั๊กอิน Gradle ของ Android เลือก (เช่น Java 8 ขึ้นไป)
ฟีเจอร์ไบนารีของ Java ใดบ้างที่ฉันใช้ได้เมื่อคอมไพล์ซอร์สโค้ด Kotlin หรือ Java
พร็อพเพอร์ตี้ targetCompatibility
และ jvmTarget
จะกำหนดเวอร์ชัน Java Class-Format ที่ใช้เมื่อสร้างไบต์โค้ดสำหรับซอร์สของ Java และ Kotlin ที่คอมไพล์แล้ว
ฟีเจอร์ Kotlin บางรายการมีอยู่แล้วก่อนที่จะมีการเพิ่มฟีเจอร์ Java ที่เทียบเท่า
คอมไพเลอร์ Kotlin รุ่นแรกๆ ต้องสร้างวิธีของตัวเองเพื่อแสดงฟีเจอร์ Kotlin เหล่านั้น ฟีเจอร์เหล่านี้บางรายการได้เพิ่มลงใน Java ในภายหลัง
เมื่อใช้ jvmTarget
ระดับที่ใหม่กว่า คอมไพเลอร์ Kotlin อาจใช้ฟีเจอร์ Java โดยตรง ซึ่งอาจส่งผลให้ประสิทธิภาพดีขึ้น
Android แต่ละเวอร์ชันรองรับ Java เวอร์ชันต่างกัน คุณใช้ประโยชน์จากฟีเจอร์ Java เพิ่มเติมได้โดยการเพิ่ม targetCompatibility
และ jvmTarget
แต่วิธีนี้อาจทำให้คุณต้องเพิ่มเวอร์ชัน Android SDK ขั้นต่ำด้วยเพื่อให้ฟีเจอร์ใช้งานได้
โปรดทราบว่า targetCompatibility
ต้องมากกว่าหรือเท่ากับ
sourceCompatibility
ในทางปฏิบัติ โดยทั่วไปแล้ว sourceCompatibility
,
targetCompatibility
และ jvmTarget
ควรใช้ค่าเดียวกัน
โดยคุณตั้งค่าได้ดังนี้
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
ดึงดูด
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}
หากไม่ได้ระบุ ระบบจะใช้เวอร์ชันเครื่องมือทํางาน Java เป็นค่าเริ่มต้น หากคุณไม่ได้ใช้ชุดเครื่องมือ Java ค่าเริ่มต้นอาจแตกต่างกันและทำให้เกิดปัญหาการสร้าง ดังนั้น เราขอแนะนำให้คุณระบุค่าเหล่านี้อย่างชัดแจ้งหรือใช้ Java Toolchain