Od 27 marca 2025 r. zalecamy używanie android-latest-release zamiast aosp-main do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Flagi kompilacji to stałe wartości w czasie kompilacji, których nie można zmienić w czasie wykonywania. Te flagi są używane w sytuacjach, gdy nie można użyć flag aconfig, na przykład:
Masz wstępnie skompilowany lub wstępnie utworzony fragment kodu, który chcesz opcjonalnie uwzględnić w kompilacji.
Chcesz wprowadzić zmiany w systemie budowania.
Chcesz umieścić flagi wokół zależności, aby zarządzać rozmiarem kodu.
Chcesz zarządzać wdrażaniem funkcji, ale musisz sprawdzić wartość flagi, zanim flagi aconfig staną się dostępne w systemie.
Deklarowanie flagi kompilacji
Flagi kompilacji są deklarowane w plikach textproto. Aby zadeklarować flagę kompilacji:
Utwórz plik o nazwie RELEASE_MY_FLAG_NAME.textproto.
W pliku dodaj wpis podobny do tego:
name: "RELEASE_MY_FLAG_NAME"
namespace: "android_UNKNOWN"
description: "Control if we should read from new storage."
workflow: LAUNCH
containers: "product"
containers: "system"
containers: "system_ext"
containers: "vendor"
Gdzie:
name zawiera nazwę flagi poprzedzoną przez RELEASE_. Dozwolone są tylko wielkie litery i podkreślenia.
namespace zawiera przestrzeń nazw dla wkładów. Aby określić swoją przestrzeń nazw, musisz skontaktować się z powierzonym recenzentem Google. Jeśli używasz flag uruchamiania funkcji, aby zachować stabilność własnego mirroru AOSP, możesz dowolnie korzystać z przestrzeni nazw.
value to początkowy typ i wartość flagi. Typ może być bool_value lub string_value. Jeśli typ to string_value, wartość musi być ujęta w cudzysłowy. Jeśli nie podasz żadnej wartości, będzie ona pusta. Wartości logiczne są reprezentowane jako true lub pusty ciąg znaków w przypadku wartości fałsz.
workflow może być LAUNCH lub PREBUILT. Używaj LAUNCH w przypadku flag logicznych, które przechodzą z false na true, podobnie jak flagi uruchamiania funkcji.
Użyj PREBUILT w przypadku flag, które ustawiają wersję, zwykle w ramach wstępnie skompilowanego pakietu.
containers typ kodu, który piszesz, np. „vendor” (dostawca) w przypadku kodu dostawcy lub „product” (produkt) w przypadku kodu produktu. Jeśli nie masz pewności, której wartości użyć, użyj wszystkich 4 typów kontenerów, jak w poprzednim przykładzie.
Używanie flagi kompilacji w pliku Soong
W pliku kompilacji i module, w których chcesz wysłać zapytanie o wartość flagi, użyj instrukcji warunkowej, aby utworzyć gałąź na podstawie tej wartości. Na przykład w tym fragmencie kodu zapytanie dotyczy wartości flagi RELEASE__READ_FROM_NEW_STORAGE:
Jeśli wartość tego parametru to true, moduł libaconfig_storage_read_api_cc jest dynamicznie powiązany z modułem cc_defaults.
Jeśli wartość tego oznaczenia to false, nic się nie dzieje (default: [],).
Używanie flagi kompilacji w pliku makefile
W pliku make flaga kompilacji jest zmienną make tylko do odczytu. W tym przykładzie makefile uzyskuje dostęp do flagi kompilacji o nazwie RELEASED_PACKAGE_NFC_STCK:
# NFC and Secure Element packagesPRODUCT_PACKAGES+=\
$(RELEASE_PACKAGE_NFC_STACK)\
Tag\
SecureElement\
android.hardware.nfc-service.st\
android.hardware.secure_element@1.0-service.st\
NfcOverlayCoral
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Declare and use a build flag\n\nBuild flags are build-time constants and can't be changed during runtime. These\nflags are used in circumstances where aconfig flags can't be used, such as\n\n- You have a precompiled or prebuilt piece of code that you want include optionally in a build.\n- You want to make changes to build system itself.\n- You want to put flags around dependencies to manage code size.\n- You want to manage the launch of a feature, but you need to check the value of the flag before aconfig flags are made available by the system.\n\nDeclare a build flag\n--------------------\n\nBuild flags are declared in textproto files. To declare a build flag:\n\n1. Navigate to \u003cvar translate=\"no\"\u003eWORKING_DIRECTORY\u003c/var\u003e`/build/release/flag_declarations/`\n2. Create a file called `RELEASE_`\u003cvar translate=\"no\"\u003eMY_FLAG_NAME\u003c/var\u003e`.textproto`.\n3. Edit the file and add an entry similar to the following:\n\n name: \"RELEASE_MY_FLAG_NAME\"\n namespace: \"android_UNKNOWN\"\n description: \"Control if we should read from new storage.\"\n workflow: LAUNCH\n containers: \"product\"\n containers: \"system\"\n containers: \"system_ext\"\n containers: \"vendor\"\n\n Where:\n - `name` contains the name of the flag preceded by `RELEASE_`. Only uppercase letters and underscore are allowed.\n - `namespace` contains the namespace for contributions. You must work with the assigned Google reviewer to determine your namespace. If you are using feature launch flags to maintain stability of your own AOSP mirror, you can use namespace however you like.\n - `value` is the initial type and value for the flag. The type can be `bool_value` or `string_value`. If type is `string_value` then the value must be in quotes. If not specified, the value is an empty string. Boolean values are represented as either `true` or the empty string for false.\n - `workflow` is either `LAUNCH` or `PREBUILT`. Use `LAUNCH` for boolean flags that advance from `false` to `true`, similar to feature launch flags. Use `PREBUILT` for flags that set a version, typically of a prebuilt.\n - `containers` the type of code you are writing, such as \"vendor\" for vendor code or \"product\" for product code. If you are in doubt of the value to use, use all four containers types as shown in the previous sample.\n\nUse a build flag in a Soong file\n--------------------------------\n\nIn the build file and module where you want to query the flag value, use a\nconditional to branch on the flag value. For example, in the following snippet,\nthe `RELEASE__READ_FROM_NEW_STORAGE` flag's value is queried: \n\n cc_defaults {\n name: \"aconfig_lib_cc_shared_link.defaults\",\n shared_libs: select(release_flag(\"RELEASE_READ_FROM_NEW_STORAGE\"), {\n true: [\"libaconfig_storage_read_api_cc],\n default: [],\n }),\n }\n\nIf this flag's value is `true`, the `libaconfig_storage_read_api_cc` module is\ndynamically linked into the `cc_defaults` module.\n\nIf this flag's value is `false`, nothing (`default: [],`) happens.\n\nUse a build flag in a makefile\n------------------------------\n\nIn the make file, a build flag is a read-only make variable. The following\nmakefile sample accesses a build flag called `RELEASED_PACKAGE_NFC_STCK`: \n\n # NFC and Secure Element packages\n PRODUCT_PACKAGES += \\\n $(RELEASE_PACKAGE_NFC_STACK) \\\n Tag \\\n SecureElement \\\n android.hardware.nfc-service.st \\\n android.hardware.secure_element@1.0-service.st \\\n NfcOverlayCoral\n\nThis flag's declaration has a `workflow` field set to `PREBUILT` in\n[`RELEASE_PACKAGE_NFC_STACK.textproto`](https://cs.android.com/android/platform/superproject/+/android-latest-release:build/release/flag_declarations/RELEASE_PACKAGE_NFC_STACK.textproto?q=%22RELEASE_PACKAGE_NFC_STACK%22&ss=android%2Fplatform%2Fsuperproject%2Fmain)\nand a string value of\n`com.android.nfcservices` [`RELEASE_PACKAGE_NFC_STACK.textproto`](https://cs.android.com/android/platform/superproject/+/android-latest-release:build/release/flag_values/ap3a/RELEASE_PACKAGE_NFC_STACK.textproto)\nthe flag values file for the `trunk_staging` development configuration.\n| **Note:** Flags whose `workflow` field is set to `LAUNCH` should always be compared to an empty string, for example if `flag == true` is written `ifneq (,$(RELEASE_MY_FLAG))` and if `flag == false` is written `ifeq (,$(RELEASE_MY_FLAG))`."]]