Hãy 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 cho tập lệnh envsetup.sh để thiết lập môi trường tạo bản dựng:
source build/envsetup.shTậ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 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ụ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 tạo. Để xác định mục tiêu cần tạo, hãy 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-userdebugBạ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_variantCác thành phần của chuỗi này là:
product_namelà tên của sản phẩm bạn muốn tạo, chẳng hạn nhưaosp_cf_x86_64_only_phonehoặcaosp_husky.product_namecụ thể có thể tuân theo định dạng riêng của bạn cho thiết bị, nhưng định dạng mà Google dùng cho các thiết bị của mình có các thành phần sau:aospđề cập đến Nền tảng Android nguồn mở.- (không bắt buộc)
cfđược đưa vào khi mục tiêu dự định chạy trong trình mô phỏng Cuttlefish. - Kiến trúc và phần cứng (tên mã), chẳng hạn như
x86_64_only_phonehoặchusky, là tên mã cho Pixel 8 Pro. Để xem danh sách tên mã cho các thiết bị của Google, hãy xem bài viết Tên mã thiết bị.
release_configđược đặt thành 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 nhà phát triển có tên làaosp_current. Cấu hình bản phát hành xác định một số tính năng và mã nằm sau các cờ khởi chạy tính năng và được bật hoặc tắt cho một bản dựng. Để biết thêm về cấu hình bản phát hành, hãy xem bài viết Đặt giá trị khởi chạy cờ tính năng.Phần
build_variantcủa chuỗi có thể là một trong 3 giá trị trong bảng sau:build_variantMô tả userBiế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 sản xuất. userdebugBiến thể bản dựng này giúp nhà phát triển thiết bị hiểu rõ hiệu suất và sức mạnh của các bản phát hành đang phát triển. Khi phát triển bằng bản dựng
userdebug, hãy làm theo Nguyên tắc cho userdebug.eng| Biến thể bản dựng này có thời gian tạo bản dựng nhanh hơn và phù hợp nhất cho quá trình phát triển hằng ngày nếu bạn không quan tâm đến hiệu suất và sức mạnh.
Nếu bạn chạy lunch mà không có đối số nào, thì một danh sách các mục tiêu phổ biến sẽ được cung cấp.
Bạn cũng có thể tạo chuỗi mục tiêu của riêng mình bằng cách ghép các phần tử của
chuỗi mục tiêu lại với nhau bằng thông tin trên trang này và tên mã
đại diện cho phần cứng cụ thể của Google tại Tên mã thiết bị.
Xem mục tiêu hiện tại
Để xem các chế độ cài đặt lunch hiện tại, 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 mất ít thời gian hơn đáng kể.
mKết quả 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, mỗi bản dựng mục tiêu sẽ xuất hiện trong $OUT_DIR.
Lệnh m 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ày. 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 đầu 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 cứ 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 (Android 17 trở lên)
Phần này chứa hướng dẫn xử lý các lỗi chỉ đọc do cố gắng sửa đổi toàn bộ mã nguồn chỉ đọc của AOSP trong quá trình tạo bản dựng.
Việc cố gắng tạo sẽ dẫn đến lỗi hệ thống tệp chỉ đọc
Trong quá trình tạo, cây nguồn AOSP là 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 quá trình định 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ể dùng các lựa chọn này để tạm thời thay đổi cây nguồn thành đọc-ghi:
Để thay đổi toàn bộ cây nguồn thành đọc-ghi trong quá trình tạo, hãy thêm
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=truevào môi trường bản dựng.Để thay đổi một phần của cây thành đọc-ghi trong quá trình tạo, hãy 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à thao tác ghi được phép, tương ứng với đầu không gian làm việc.
Khắc phục lỗi bản dựng (8.0 trở xuống)
Nếu bạn đang tạo AOSP 8 trở xuống, m có thể huỷ bỏ 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 này:
************************************************************
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
************************************************************
Dưới đây là các nguyên nhân và giải pháp có thể xảy ra:
- Bạn không cài đặt được JDK chính xác như được chỉ định trong các phần JDK của bài viết Thiết lập để phát triển AOSP (2.3 – 8.0) .
- Có một JDK khác đã cài đặt trước đó xuất hiện trong đường dẫn của bạn. Hãy thêm JDK chính xác vào đầu đường dẫn hoặc xoá JDK có vấn đề.