Cấu trúc bản dựng Android

Các dự án Android chứa nhiều tệp và cấu trúc thư mục liên quan đến bản dựng để sắp xếp nguồn và tài nguyên ứng dụng. Trước khi tìm hiểu chi tiết cấu hình, chúng ta sẽ xem xét cấu trúc tổng thể và các khái niệm cơ bản thuộc về những gì thuộc từng phần.

Bảng này liệt kê các tệp điển hình trong một dự án Android. Mô tả của từng tệp hoặc thư mục bao gồm các ghi chú về loại nội dung thuộc loại nào. Tốt nhất thực tiễn phát triển theo thời gian và những nội dung mô tả này có thể không phù hợp với dự án mà bạn đã kế thừa hoặc tải xuống từ Internet.

Khi viết các tệp bản dựng, hãy sử dụng phương pháp khai báo; logic và nhiệm vụ tạo bản dựng định nghĩa chỉ nên xuất hiện trong trình bổ trợ. Bằng cách giới hạn logic bản dựng ở các trình bổ trợ, tệp bản dựng trở thành nội dung khai báo dữ liệu, giúp bạn dễ dàng nắm được và chỉnh sửa video. Các phiên bản trong tương lai có thể bao gồm thông số kỹ thuật thay thế, chẳng hạn như Gradle khai báo, sẽ ngăn chặn logic bản dựng trong phần tử tệp.

Thư mục/Tệp

Mục đích sử dụng

.gradle/

Thư mục bộ nhớ đệm của dự án Gradle

Do Gradle quản lý và chứa bản phân phối Gradle, bộ nhớ đệm dự án và các tệp cấu hình đã tải xuống.

Không thay đổi các tệp trong thư mục này!

.idea/

Siêu dữ liệu dự án trong Android Studio

Không thay đổi các tệp trong thư mục này!

build.gradle(.kts)

Tệp bản dựng gốc

Chỉ nên chứa các nội dung khai báo trình bổ trợ để thiết lập một đường dẫn lớp trình bổ trợ chung trên các dự án phụ.

Mã khác phải nằm trong phần cài đặt hoặc tệp bản dựng cấp dự án lồng nhau.

gradle.properties

Cấu hình thực thi Gradle

Chứa các thuộc tính Gradle, kiểm soát các khía cạnh môi trường xây dựng Gradle, chẳng hạn như kích thước vùng nhớ khối xếp, chức năng lưu vào bộ nhớ đệm và thực thi song song.

Một số thuộc tính Android tạm thời được định nghĩa tại đây để giảm các thay đổi đối với AGP DSL khi các thuộc tính này được thêm vào và sau đó bị xoá.

gradlew (linux, Mac)

gradlew.bat (Windows)

Tệp trình bao bọc Gradle

Tự khởi động bản dựng của bạn bằng cách tải bản phân phối Gradle xuống, sau đó chuyển tiếp các lệnh tới bản dựng đó. Việc này cho phép bạn chạy các bản dựng mà không cần cài đặt sẵn Gradle.

local.properties

Cấu hình máy cục bộ

Chứa các thuộc tính liên quan đến máy cục bộ, chẳng hạn như vị trí của SDK Android.

Hãy loại trừ tệp này khỏi chế độ kiểm soát nguồn!

settings.gradle(.kts)

Khởi chạy bản dựng Gradle

Chứa thông tin bản dựng chung để khởi chạy Gradle và cấu hình dự án, chẳng hạn như

  • tên dự án
  • danh sách dự án phụ cần đưa vào bản dựng này
  • thông số kỹ thuật của kho lưu trữ để xác định vị trí các trình bổ trợ và phần phụ thuộc
  • nhập Danh mục phiên bản bên ngoài.

gradle/

↳ libs.versions.toml

Danh mục phiên bản

Xác định biến cho các phần phụ thuộc và trình bổ trợ dùng bên trong bản dựng. Bạn chỉ định các phiên bản mình muốn sử dụng tại đây nhằm đảm bảo tính nhất quán giữa tất cả các dự án phụ trong dự án.

↳ trình bao bọc/

↳ gradle-wrapper.jar

Quy trình khởi động Gradle có thể thực thi

Tải bản phân phối Gradle được chỉ định xuống (nếu chưa có) rồi chạy phân phối đó, truyền bất kỳ đối số nào

↳ gradle-wrapper.properties

Cấu hình cho trình bao bọc Gradle

Chỉ định nơi tải bản phân phối Gradle xuống (bao gồm cả phiên bản sẽ sử dụng).

ứng dụng/

Thư mục dự án phụ

Các dự án phụ (còn gọi là "mô-đun" trong Android Studio) có thể xây dựng các ứng dụng hoặc thư viện và có thể phụ thuộc vào các dự án phụ khác hoặc các phần phụ thuộc bên ngoài.

app là tên thông thường của một dự án ứng dụng cấp cao nhất (nhưng không phải là tên bắt buộc). Các dự án phụ khác có cấu trúc tương tự với tên khác.

Mọi thư mục đều có thể là dự án phụ và phải chứa ít nhất một tệp build.gradle(.kts), đồng thời được đưa vào bản dựng bằng settings.gradle(.kts).

↳ build.gradle(.kts)

Tệp bản dựng cấp dự án phụ

Khai báo cách xây dựng dự án phụ này. Mỗi dự án phụ cần một tệp bản dựng riêng và phải chứa

  • các plugin được dùng để xây dựng dự án phụ này
  • các khối cấu hình do trình bổ trợ yêu cầu
  • các phần phụ thuộc (thư viện và nền tảng) được đưa vào khi xây dựng dự án phụ này

Bạn không nên đưa logic bản dựng (chẳng hạn như định nghĩa hoặc điều kiện của hàm Kotlin) hoặc khai báo tác vụ vào tệp bản dựng. Logic bản dựng và nhiệm vụ chỉ nên được chứa bên trong trình bổ trợ.

↳ src/

Tệp nguồn dự án phụ

Nhóm các tệp nguồn (mã ứng dụng và tài nguyên) thành nhóm tài nguyên. Nhóm tài nguyên main chứa các tệp nguồn chung cho tất cả biến thể, trong khi các nhóm tài nguyên khác chứa các tệp nguồn dành riêng cho một biến thể.

↳ chính/

Nhóm tài nguyên chính

Mã nguồn và tài nguyên phổ biến trên tất cả các biến thể bản dựng. Nguồn này đóng vai trò là cơ sở cho tất cả bản dựng và các nhóm tài nguyên cụ thể khác sẽ thêm vào hoặc ghi đè nguồn này.

↳ java/

↳ kotlin/

Mã nguồn Kotlin và Java

Thư mục java có thể chứa mã nguồn Java và Kotlin kết hợp. Nếu dự án phụ này chỉ chứa mã Kotlin, bạn có thể đổi tên thư mục này kotlin.

Android
là một nền tảng ưu tiên Kotlin. Nguồn Java được hỗ trợ, nhưng các API mới sẽ nhắm đến ngôn ngữ Kotlin. Bạn nên sử dụng Kotlin cho tất cả mã mới và bản cập nhật chính cho mã hiện có.

↳ res/

Tệp tài nguyên Android

Chứa các tài nguyên ứng dụng, chẳng hạn như hình ảnh và tệp XML. Tất cả ứng dụng đều sử dụng một số tài nguyên cơ bản, chẳng hạn như biểu tượng trình chạy, nhưng nhiều tài nguyên trong số này (chẳng hạn như bố cục và trình đơn) chỉ được dùng trong các ứng dụng dựa trên khung hiển thị. Ứng dụng Compose sử dụng các tài nguyên Chuỗi được xác định trong thư mục này.

↳ AndroidManifest.xml

Siêu dữ liệu của ứng dụng Android

Trình quản lý gói Android đọc để thông báo cho hệ thống

  • do ứng dụng của bạn xác định
  • các quyền cần thiết
  • khả năng tương thích với thiết bị
  • Hạn chế của nền tảng Android

↳ androidTest/

Nhóm tài nguyên Kiểm thử thiết bị

Chứa nguồn cho các chương trình kiểm thử sẽ chạy trên một thiết bị hoặc trình mô phỏng chạy Android. Các chương trình kiểm thử này có quyền truy cập vào một môi trường Android thực tế, nhưng thực thi chậm hơn so với các chương trình kiểm thử trên máy chủ lưu trữ.

Bạn có thể sử dụng tất cả tệp nguồn trong nhóm tài nguyên main theo nguồn trong androidTest.

↳ thử nghiệm/

Nhóm tài nguyên thử nghiệm trên máy chủ

Chứa nguồn cho các chương trình kiểm thử chạy cục bộ trong máy ảo JVM, trái ngược với các chương trình kiểm thử chạy trên thiết bị. Các bài kiểm thử này chạy nhanh hơn nhiều so với kiểm thử thiết bị. Tuy nhiên, mọi lệnh gọi hệ thống (bao gồm cả vòng đời chạy ứng dụng) đều phải được mô phỏng, làm giả, loại bỏ hoặc mô phỏng theo cách khác.

Tất cả các tệp nguồn trong nhóm tài nguyên main đều có thể sử dụng cho nguồn đang được kiểm thử.

↳ proguard-rules.pro

Các quy tắc cấu hình R8

Xác định các quy tắc để kiểm soát việc rút gọn, tối ưu hoá và làm rối mã nguồn ứng dụng. R8 loại bỏ mã và tài nguyên không cần thiết, tối ưu hoá hiệu suất trong thời gian chạy và giảm thiểu mã hơn nữa bằng cách đổi tên giá trị nhận dạng.