Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release thay vì aosp-main để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Cờ phát hành tính năng được Google sử dụng như một phương pháp để đảm bảo các nhánh mã ổn định. Các cờ này cũng bắt buộc đối với một số loại nội dung đóng góp cho AOSP. Trước khi triển khai tính năng gắn cờ phát hành, hãy xác định xem bạn có cần gắn cờ cho thay đổi của mình hay không. Và nếu cần cờ, bạn nên xác định loại cờ sẽ sử dụng.
Xác định mức sử dụng cờ
Để xác định thời điểm sử dụng cờ phát hành tính năng, hãy làm theo các nguyên tắc sau:
Nếu bạn đang thực hiện một thay đổi có thể khiến cơ sở mã AOSP không ổn định, chẳng hạn như thêm một tính năng mới hoặc khắc phục một lỗi đặc biệt phức tạp, hãy sử dụng cờ khởi chạy tính năng.
Ngược lại, nếu bạn đang thực hiện thay đổi mã không dễ gây ra sự không ổn định cho cơ sở mã, chẳng hạn như sửa đổi nhận xét, thì bạn không cần sử dụng cờ phát hành tính năng.
Xác định loại cờ
Có hai loại cờ: cờ aconfig và cờ bản dựng.
Cờ Aconfig
Cờ Aconfig được dùng để tách biệt quá trình thực thi mã chưa phát hành với mã đã phát hành trong quá trình kiểm thử và phát hành. Cờ Aconfig có thể là chế độ đọc-ghi hoặc chỉ đọc:
Cờ aconfig đọc-ghi là các biến boolean mà bạn có thể bật (đặt thành true) hoặc tắt (đặt thành false) trong thời gian chạy. Sử dụng cờ đọc-ghi để kiểm thử và phát hành các thay đổi mà không ảnh hưởng đến độ ổn định của nhánh chính.
Cờ aconfig chỉ có thể đọc là các hằng số boolean mà bạn không thể thay đổi trong thời gian chạy. Bạn có thể chuyển đổi cờ aconfig đọc-ghi thành cờ aconfig chỉ có thể đọc cho mã ổn định và sẵn sàng phát hành.
Ngoài ra, tuỳ thuộc vào trình biên dịch bạn đang sử dụng, khi sử dụng cờ chỉ có thể đọc, mã không được thực thi có thể bị loại trừ khỏi bản dựng. Do đó, bạn có thể sử dụng cờ chỉ có thể đọc để ẩn mọi mã chưa sẵn sàng trở thành một phần của bản phát hành.
Cờ dựng
Cờ bản dựng là hằng số (chuỗi) tại thời điểm tạo bản dựng và bạn không thể thay đổi các cờ này trong thời gian chạy. Sử dụng các cờ này trong trường hợp bạn không thể sử dụng cờ aconfig, chẳng hạn như:
Bạn có một đoạn mã được biên dịch trước hoặc tạo sẵn mà bạn muốn đưa vào bản dựng.
Bạn muốn thay đổi chính hệ thống xây dựng.
Bạn muốn đặt cờ xung quanh các phần phụ thuộc để quản lý kích thước mã.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Determine flag usage and type\n\nFeature launch flags are used by Google as an approach to ensuring stable\ncode branches. These flags are also required for certain types of contributions\nto AOSP. Before implementing feature launch flagging, determine if\na flag is necessary for your change. And, if a flag is necessary, you should\ndetermine the type of flag to use.\n\nDetermine flag usage\n--------------------\n\nTo determine when to use a feature launch flag, follow these guidelines:\n\n- If you are making a change that could cause the AOSP codebase to be unstable,\n such as adding a new feature or fixing a particularly complex bug, use a feature\n launch flag.\n\n- Conversely, if you are making a code change that isn't apt to cause the\n codebase to be unstable, such as modifying comments, you don't need to use a\n feature launch flag.\n\nDetermine flag type\n-------------------\n\nThere are two types of flags: *aconfig flags* and *build flags*.\n\n### Aconfig flags\n\nAconfig flags are used to separate the execution of unreleased code from\nreleased code during the testing and release process. Aconfig flags can be\nread-write or read-only:\n\n- *Read-write aconfig flags* are boolean variables that you can enable (set to\n `true`) or disable (set to `false`) at runtime. Use a read-write flag to test\n and release changes without affecting the stability of a main branch.\n\n- *Read-only aconfig flags* are boolean constants that you can't change at\n runtime. You can convert read-write aconfig flags to read-only aconfig flags\n for code that is stable and ready to release.\n\n Additionally, depending on the compiler you're using, when a read-only flag\n is used, the code that isn't executed might be excluded\n from the build. Therefore, you can use read-only flags to hide any code that\n isn't ready to be part of a release.\n\n### Build flags\n\nBuild flags are build-time constants (strings) and you can't change them during\nruntime. Use these flags in circumstances where you can't use aconfig flags,\nsuch as:\n\n- You have a precompiled or prebuilt piece of code that you want to include in the build.\n- You want to make changes to build system itself.\n- You want to put flags around dependencies to manage code size.\n\n| **Note:** Build flags have special encodings for boolean values (`false: {empty string}, true: \"true\"`)."]]