Xây dựng Android

Làm theo hướng dẫn trên trang này để tạo Android.

Thiết lập môi trường tạo bản dựng

Trong thư mục làm việc, hãy tìm nguồn tập lệnh envsetup.sh để thiết lập môi trường tạo bản dựng:

source build/envsetup.sh

Tập lệnh này nhập một số lệnh cho phép bạn làm việc với mã nguồn Android, bao gồm cả các lệnh được dùng trên trang này. Để xem nguồn của tập lệnh, hãy tham khảo platform/build/envsetup.sh. Để xem phần trợ giúp tích hợp, hãy nhập hmm.

Chọn mục tiêu

Trước khi tạo Android, bạn phải xác định một mục tiêu để tạo. Mục tiêu phản ánh nền tảng nhắm mục tiêu mà bạn đang xây dựng. Để xác định mục tiêu cần tạo bản dựng, hãy sử dụng lệnh lunch, theo sau là một chuỗi đại diện cho mục tiêu. Ví dụ:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Bạn sẽ thấy bản tóm tắt về mục tiêu và môi trường tạo bản dựng:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

Chuỗi đại diện cho mục tiêu có định dạng sau:

lunch product_name-release_config-build_variant

Các thành phần của chuỗi này là:

  • product_name là tên của sản phẩm mà bạn muốn tạo, chẳng hạn như aosp_cf_x86_64_only_phone hoặc aosp_husky. product_name cụ thể của bạn có thể tuân theo định dạng riêng cho thiết bị của bạn, nhưng định dạng mà Google sử dụng cho các thiết bị của mình có những thành phần sau:

    • aosp là Dự án nguồn mở Android.
    • Bạn có thể thêm cf khi mục tiêu dự kiến sẽ chạy trong trình mô phỏng Cuttlefish.
    • Tên mã phần cứng và cấu trúc, chẳng hạn như x86_64_only_phone hoặc husky. Đây là tên mã của Pixel 8 Pro. Để biết danh sách tên mã cho các thiết bị của Google, hãy xem phần Tên mã thiết bị.
  • release_config được đặt thành một cấu hình bản phát hành, chẳng hạn như cấu hình bản phát hành dành cho quá trình phát triển có tên là aosp_current. Cấu hình phát hành xác định một số tính năng và mã nằm sau cờ ra mắt tính năng, đồng thời được bật hoặc tắt cho một bản dựng. Để biết thêm thông tin về cấu hình phát hành, hãy xem phần Đặt giá trị khởi chạy cờ tính năng.

  • Phần build_variant của chuỗi có thể là một trong 3 giá trị trong bảng sau:

    build_variant Mô tả
    user Biến thể bản dựng này cung cấp quyền truy cập bảo mật hạn chế và phù hợp với hoạt động sản xuất.
    userdebug Biến thể bản dựng này giúp các nhà phát triển thiết bị hiểu được hiệu suất và mức tiêu thụ điện năng của các bản phát hành đang trong quá trình phát triển. Khi phát triển bằng bản dựng userdebug, hãy tuân theo Nguyên tắc cho userdebug.
    eng Biến thể bản dựng này có thời gian xây dựng nhanh hơn và phù hợp nhất với môi trường phát triển hằng ngày (nơi hiệu suất và sức mạnh ít quan trọng hơn).

Nếu bạn chạy lunch mà không có đối số nào, thì lunch sẽ cung cấp danh sách các mục tiêu phổ biến. Để tạo chuỗi mục tiêu tuỳ chỉnh, hãy kết hợp các phần tử chuỗi mục tiêu với tên mã phần cứng. Để biết danh sách tên mã, hãy xem phần Tên mã thiết bị.

Xem mục tiêu hiện tại

Để xem chế độ cài đặt hiện tại của lunch, hãy chạy:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Tạo mã

Chạy lệnh sau để tạo mục tiêu. Tuỳ thuộc vào thông số kỹ thuật của máy trạm, bản dựng đầu tiên có thể mất chưa đến một giờ và tối đa vài giờ. Các bản dựng tiếp theo sẽ mất ít thời gian hơn đáng kể.

m

Đầu ra của bản dựng sẽ xuất hiện trong $OUT_DIR. Nếu bạn tạo các mục tiêu khác nhau, thì mỗi bản dựng mục tiêu sẽ xuất hiện trong $OUT_DIR.

Lệnh m sẽ tạo từ đầu cây, vì vậy, bạn có thể chạy m trong các thư mục con. Nếu bạn đã đặt biến môi trường TOP, thì lệnh m sẽ sử dụng biến đó. Nếu TOP chưa được đặt, lệnh m sẽ tra cứu cây từ thư mục hiện tại, cố gắng tìm phần trên cùng của cây.

Lệnh m có thể xử lý các tác vụ song song bằng đối số -jN. Nếu bạn không cung cấp đối số -j, hệ thống xây dựng sẽ tự động chọn số lượng tác vụ song song mà hệ thống cho là tối ưu cho hệ thống của bạn.

Bạn có thể tạo các mô-đun cụ thể thay vì toàn bộ hình ảnh thiết bị bằng cách liệt kê tên mô-đun trong dòng lệnh m. Ngoài ra, lệnh m cung cấp một số mục tiêu giả, được gọi là mục tiêu. Ví dụ: m nothing không tạo bất kỳ thứ gì, nhưng sẽ phân tích cú pháp và xác thực cấu trúc bản dựng. Để xem danh sách các mục tiêu hợp lệ, hãy nhập m help.

Khắc phục lỗi bản dựng

Phần này chứa hướng dẫn xử lý lỗi bản dựng.

Lỗi hệ thống tệp chỉ đọc (Android 17 trở lên)

Trong quá trình tạo bản dựng, cây nguồn AOSP ở chế độ chỉ đọc. Nếu bản dựng mà bạn đang chạy cố gắng sửa đổi cây nguồn trong cấu hình sản phẩm hoặc bất kỳ phần nào khác của bản dựng, thì bản dựng có thể không thành công và báo cáo lỗi hệ thống tệp chỉ đọc. Bạn có thể sử dụng các lựa chọn này để tạm thời thay đổi cây nguồn thành chế độ đọc-ghi:

  • Để thay đổi toàn bộ cây nguồn thành chế độ đọc-ghi trong quá trình tạo, hãy thêm BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true vào môi trường tạo bản dựng.

  • Để thay đổi một phần của cây thành chế độ đọc-ghi trong quá trình tạo, hãy sử dụng BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ...". Đường dẫn phải là đường dẫn của các thư mục mà bạn được phép ghi, tương ứng với đầu không gian làm việc.

Sai phiên bản Java (Android 8.0 trở xuống)

Nếu bạn đang tạo Android 8.0 (cấp độ API 26) trở xuống, m có thể hủy khi gặp vấn đề với phiên bản Java của bạn. Ví dụ: bạn có thể nhận được thông báo sau:

************************************************************
You are attempting to build with the incorrect version of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************

Sau đây là các nguyên nhân và giải pháp có thể:

  • Bạn chưa cài đặt đúng JDK. Để biết thêm thông tin, hãy xem phần Thiết lập để phát triển AOSP (2.3 – 8.0).
  • Có một JDK khác đã được cài đặt trước đó xuất hiện trong đường dẫn của bạn. Thêm JDK chính xác vào đầu đường dẫn hoặc xoá JDK có vấn đề.