Ab dem 27. März 2025 empfehlen wir, android-latest-release anstelle von aosp-main zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Build-Flags sind Konstanten zur Buildzeit und können während der Laufzeit nicht geändert werden. Diese Flags werden in Situationen verwendet, in denen aconfig-Flags nicht verwendet werden können, z. B.
Sie haben einen vorkompilierten oder vordefinierten Code, den Sie optional in einen Build einbinden möchten.
Sie möchten Änderungen am Build-System selbst vornehmen.
Sie möchten Abhängigkeiten mit Flags versehen, um die Codegröße zu verwalten.
Sie möchten die Einführung einer Funktion verwalten, müssen aber den Wert des Flags prüfen, bevor aconfig-Flags vom System verfügbar gemacht werden.
Build-Flag deklarieren
Build-Flags werden in Textproto-Dateien deklariert. So deklarieren Sie ein Build-Flag:
Zu WORKING_DIRECTORY/build/release/flag_declarations/ navigieren
Erstellen Sie eine Datei mit dem Namen RELEASE_MY_FLAG_NAME.textproto.
Bearbeiten Sie die Datei und fügen Sie einen Eintrag ähnlich dem folgenden hinzu:
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"
Dabei gilt:
name enthält den Namen des Flags, gefolgt von RELEASE_. Es sind nur Großbuchstaben und Unterstriche zulässig.
namespace enthält den Namespace für Beiträge. Sie müssen mit dem zugewiesenen Google-Rezensenten zusammenarbeiten, um Ihren Namespace zu bestimmen. Wenn Sie Flags für die Einführung von Funktionen verwenden, um die Stabilität Ihres eigenen AOSP-Mirrors aufrechtzuerhalten, können Sie den Namespace beliebig verwenden.
value ist der ursprüngliche Typ und Wert für das Flag. Der Typ kann bool_value oder string_value sein. Wenn der Typ string_value ist, muss der Wert in Anführungszeichen gesetzt werden. Wenn keine Angabe erfolgt, ist der Wert eine leere Zeichenfolge. Boolesche Werte werden entweder als true oder als leerer String für „falsch“ dargestellt.
workflow ist entweder LAUNCH oder PREBUILT. Verwenden Sie LAUNCH für boolesche Flags, die von false zu true fortschreiten, ähnlich wie bei Flags für die Einführung von Funktionen.
Verwenden Sie PREBUILT für Flags, mit denen eine Version festgelegt wird, in der Regel eine vordefinierte.
containers die Art des Codes, den Sie schreiben, z. B. „vendor“ für den Anbietercode oder „product“ für den Produktcode. Wenn Sie sich nicht sicher sind, welchen Wert Sie verwenden sollen, verwenden Sie alle vier Containertypen, wie im vorherigen Beispiel gezeigt.
Build-Flag in einer Soong-Datei verwenden
Verwenden Sie in der Build-Datei und im Modul, in dem Sie den Flag-Wert abfragen möchten, eine Bedingung, um nach dem Flag-Wert zu verzweigen. Im folgenden Snippet wird beispielsweise der Wert des Flags RELEASE__READ_FROM_NEW_STORAGE abgefragt:
Wenn der Wert dieses Flags true ist, wird das libaconfig_storage_read_api_cc-Modul dynamisch in das cc_defaults-Modul eingebunden.
Wenn der Wert dieses Flags false ist, passiert nichts (default: [],).
Build-Flag in einem Makefile verwenden
In der Makefile ist ein Build-Flag eine schreibgeschützte Make-Variable. Im folgenden Beispiel für ein Makefile wird auf ein Build-Flag namens RELEASED_PACKAGE_NFC_STCK zugegriffen:
# 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
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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))`."]]