Mã nguồn được viết bằng Java, Kotlin hay cả hai, bạn phải chọn ngôn ngữ JDK hoặc Java cho bản dựng của bạn.
Bảng chú giải thuật ngữ
- Bộ phát triển Java (JDK)
-
Bộ phát triển Java (JDK)
chứa:
- Các công cụ, chẳng hạn như trình biên dịch, trình phân tích tài nguyên và trình tạo lưu trữ. Những thông tin này được sử dụng ở chế độ hậu trường trong quá trình bạn xây dựng để hãy tạo ứng dụng của bạn.
- Thư viện chứa API mà bạn có thể gọi từ Mã nguồn Kotlin hoặc Java. Lưu ý rằng không phải tất cả các hàm đều có trên Android.
- Máy ảo Java (JVM), một trình thông dịch thực thi Ứng dụng Java. Bạn sử dụng JVM để chạy IDE Android Studio và công cụ xây dựng Gradle. JVM không được sử dụng trên Android hoặc trình mô phỏng.
- Thời gian chạy JetBrains (JBR)
- Thời gian chạy JetBrains (JBR) là một JDK nâng cao, được phân phối bằng Android Studio. Phiên bản này có một số tính năng tối ưu hoá để sử dụng trong Studio và các phiên bản JetBrains liên quan nhưng cũng có thể dùng để chạy các ứng dụng Java khác.
Làm cách nào để chọn JDK để chạy Android Studio?
Bạn nên sử dụng JBR để chạy Android Studio. Đã triển khai
và dùng để kiểm thử Android Studio, cũng như bao gồm các tính năng nâng cao để tối ưu hoá
Mức sử dụng Android Studio. Để đảm bảo điều này, đừng đặt STUDIO_JDK
biến môi trường.
Các tập lệnh khởi động cho Android Studio sẽ tìm một JVM như sau đơn đặt hàng:
STUDIO_JDK
biến môi trường- Thư mục
studio.jdk
(trong tệp phân phối của Android Studio) - Thư mục
jbr
(JetBrains Runtime) trong Android Studio phạm vi phân phối. Được đề xuất. JDK_HOME
biến môi trườngJAVA_HOME
biến môi trườngjava
có thể thực thi trong biến môi trườngPATH
Làm cách nào để chọn JDK chạy bản dựng Gradle của tôi?
Nếu bạn chạy Gradle bằng các nút trong Android Studio, JDK được thiết lập trong
Các chế độ cài đặt Android Studio được dùng để chạy Gradle. Nếu bạn chạy Gradle trong một thiết bị đầu cuối,
bên trong hoặc bên ngoài Android Studio, biến môi trường JAVA_HOME
(nếu được đặt) xác định JDK nào chạy tập lệnh Gradle. Nếu JAVA_HOME
chưa được thiết lập mà sẽ sử dụng lệnh java
trên môi trường PATH
của bạn
biến.
Để có kết quả nhất quán nhất, hãy nhớ đặt JAVA_HOME
biến môi trường và
Cấu hình JDK của Gradle trong Android Studio cũng vậy
JDK.
Khi chạy bản dựng, Gradle sẽ tạo một quy trình có tên là trình nền để xây dựng bản dựng thực tế. Bạn có thể sử dụng lại quy trình này, miễn là các bản dựng đang sử dụng cùng một phiên bản JDK và Gradle. Đang sử dụng lại một trình nền giúp giảm thời gian khởi động một máy JVM mới và khởi chạy hệ thống xây dựng.
Nếu bạn bắt đầu tạo bản dựng bằng nhiều phiên bản JDK hoặc Gradle, các trình nền được tạo, tốn nhiều CPU và bộ nhớ hơn.
Cấu hình JDK của Gradle trong Android Studio
Để sửa đổi cấu hình JDK Gradle của dự án hiện có, hãy mở Gradle cài đặt trong phần File (Tệp) (hoặc Android Studio trên macOS) > Cài đặt > Xây dựng, thực thi, triển khai > Công cụ tạo > Gradle. Gradle JDK trình đơn thả xuống chứa các tuỳ chọn sau để chọn:
- Các macro như
JAVA_HOME
vàGRADLE_LOCAL_JAVA_HOME
- Các mục trong bảng JDK ở định dạng
vendor-version
nhưjbr-17
được lưu trữ trong tệp cấu hình Android - Tải JDK xuống
- Thêm một JDK cụ thể
- Phát hiện cục bộ JDK qua bản cài đặt JDK mặc định của hệ điều hành thư mục
Lựa chọn đã chọn được lưu trữ trong tuỳ chọn gradleJvm
trong
tệp .idea/gradle.xml
của dự án và độ phân giải đường dẫn JDK của dự án được dùng để chạy
Gradle khi được khởi động thông qua Android Studio.
Các macro cho phép lựa chọn đường dẫn JDK dự án động:
JAVA_HOME
: sử dụng biến môi trường có cùng tênGRADLE_LOCAL_JAVA_HOME
: sử dụng thuộc tínhjava.home
trong tệp.gradle/config.properties
được đặt mặc định là Thời gian chạy JetBrains.
JDK đã chọn được dùng để chạy bản dựng Gradle và phân giải JDK API
khi chỉnh sửa tập lệnh bản dựng và mã nguồn. Lưu ý rằng
compileSdk
được chỉ định sẽ hạn chế hơn nữa các biểu tượng Java nào sẽ được
có sẵn khi chỉnh sửa và tạo mã nguồn.
Hãy nhớ chọn phiên bản JDK cao hơn hoặc bằng JDK phiên bản được sử dụng bởi các trình bổ trợ mà bạn dùng trong bản dựng Gradle của mình. Để xác định phiên bản JDK tối thiểu bắt buộc cho Trình bổ trợ Android cho Gradle (AGP), hãy xem bảng khả năng tương thích trong ghi chú phát hành.
Ví dụ: Trình bổ trợ Android cho Gradle phiên bản 8.x yêu cầu JDK 17. Nếu bạn cố chạy một bản dựng Gradle sử dụng nó với một phiên bản cũ hơn của JDK, công cụ này sẽ báo cáo một thông điệp như:
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`.
Tôi có thể sử dụng API Java nào trong mã nguồn Java hoặc Kotlin?
Ứng dụng Android có thể dùng một số API được xác định trong JDK, nhưng không phải tất cả
trong số chúng. Android SDK xác định cách triển khai nhiều hàm trong thư viện Java
như một phần của các API có sẵn. Thuộc tính compileSdk
chỉ định
Phiên bản SDK Android để sử dụng khi biên dịch mã nguồn Kotlin hoặc Java.
Kotlin
android {
...
compileSdk = 33
}
Groovy
android {
...
compileSdk 33
}
Mỗi phiên bản Android đều hỗ trợ một phiên bản JDK cụ thể và một tập hợp con
Java API có sẵn. Nếu bạn sử dụng API Java có trong
một compileSdk
không có trong phần tử được chỉ định
minSdk
, bạn có thể sử dụng API
trong phiên bản Android cũ thông qua một quy trình được gọi là
đơn giản hoá.
Xem các API Java 11 trở lên hiện có thông qua quá trình đơn giản hoá để được hỗ trợ
API.
Sử dụng bảng này để xác định phiên bản Java nào được hỗ trợ bởi từng API Android và nơi tìm thông tin chi tiết về API Java hiện có.
Android | Java | Các tính năng về API và ngôn ngữ được hỗ trợ |
---|---|---|
14 (API 34) | 17 | Thư viện chính |
13 (API 33) | 11 | Thư viện chính |
12 (API cấp 32) | 11 | API Java |
11 trở xuống | Phiên bản Android |
JDK nào biên dịch mã nguồn Java của tôi?
JDK của chuỗi công cụ Java chứa trình biên dịch Java dùng để biên dịch bất kỳ Java mã nguồn. JDK này cũng chạy các bài kiểm thử đơn vị và javadoc trong quá trình tạo bản dựng.
Chuỗi công cụ mặc định là JDK dùng để chạy Gradle. Nếu bạn sử dụng tuỳ chọn mặc định và chạy một bản dựng trên nhiều máy (ví dụ: máy cục bộ và máy chủ một máy chủ Tích hợp liên tục riêng biệt), kết quả bản dựng có thể khác nhau nếu sử dụng các phiên bản JDK khác nhau.
Để tạo bản dựng nhất quán hơn, bạn có thể chỉ định rõ ràng một Phiên bản chuỗi công cụ Java. Chỉ định nội dung này:
- Xác định vị trí JDK tương thích trên hệ thống đang chạy bản dựng.
- Nếu không có JDK tương thích (và đã xác định một trình phân giải chuỗi công cụ), tải xuống một.
- Hiển thị các API Java của chuỗi công cụ cho các lệnh gọi từ mã nguồn.
- Biên dịch nguồn Java bằng phiên bản ngôn ngữ Java.
- Sản phẩm mặc định cho
sourceCompatibility
vàtargetCompatibility
.
Bạn nên luôn chỉ định chuỗi công cụ Java và đảm bảo rằng JDK đã chỉ định được cài đặt hay thêm trình phân giải chuỗi công cụ vào bản dựng của bạn.
Bạn có thể chỉ định chuỗi công cụ cho dù mã nguồn của bạn được viết bằng Java,
Kotlin hoặc cả hai. Chỉ định chuỗi công cụ ở cấp cao nhất trong mô-đun của bạn
Tệp build.gradle(.kts)
.
Chỉ định phiên bản chuỗi công cụ Java như sau:
Kotlin
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Groovy
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
Cách này hiệu quả nếu nguồn của bạn là Kotlin, Java hoặc kết hợp cả hai.
Phiên bản JDK của chuỗi công cụ có thể giống với JDK dùng để chạy Gradle, nhưng hãy nhớ rằng chúng phục vụ những mục đích khác nhau.
Tôi có thể sử dụng tính năng nguồn ngôn ngữ Java nào trong mã nguồn Java của mình?
Thuộc tính sourceCompatibility
xác định các tính năng ngôn ngữ Java
có sẵn trong quá trình biên dịch nguồn Java.
Điều này không ảnh hưởng đến nguồn Kotlin.
Nếu không được chỉ định, chế độ mặc định sẽ là chuỗi công cụ Java hoặc
JDK dùng để chạy Gradle. Chúng tôi khuyên bạn nên luôn chỉ định rõ ràng
chuỗi công cụ (ưu tiên) hoặc sourceCompatibility
.
Hãy chỉ định sourceCompatibility
trong tệp build.gradle(.kts)
của mô-đun.
Kotlin
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
}
}
Groovy
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
Tôi có thể dùng các tính năng nhị phân Java nào khi biên dịch nguồn Kotlin hoặc Java?
Việc chỉ định targetCompatibility
và jvmTarget
sẽ xác định Java
phiên bản định dạng lớp được dùng khi tạo mã byte cho Java và Kotlin đã biên dịch
nguồn tương ứng.
Một số tính năng Kotlin đã tồn tại trước khi các tính năng Java tương đương được thêm vào.
Các trình biên dịch Kotlin ban đầu phải tạo ra cách riêng để thể hiện những Kotlin đó
các tính năng AI mới. Một số tính năng trong số này sau đó đã được thêm vào Java.
Với các cấp độ jvmTarget
sau đó, trình biên dịch Kotlin có thể trực tiếp sử dụng
tính năng Java, nhờ đó có thể mang lại hiệu suất tốt hơn.
targetCompatibility
mặc định có cùng giá trị với
sourceCompatibility
,
nhưng nếu được chỉ định, phải lớn hơn hoặc bằng sourceCompatibility
.
jvmTarget
mặc định là phiên bản chuỗi công cụ.
Các phiên bản Android khác nhau sẽ hỗ trợ các phiên bản Java khác nhau. Bạn có thể
tận dụng các tính năng Java bổ sung bằng cách tăng
targetCompatibility
và jvmTarget
, nhưng bạn cũng có thể buộc phải
tăng
phiên bản SDK Android tối thiểu để đảm bảo
bạn có thể sử dụng tính năng này.
Kotlin
android {
compileOptions {
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
Groovy
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}