27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main yerine android-latest-release kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Derleme işaretleri, derleme zamanı sabitleridir ve çalışma zamanında değiştirilemez. Bu işaretler, aconfig işaretlerinin kullanılamadığı durumlarda kullanılır. Örneğin:
İsteğe bağlı olarak bir derlemeye dahil etmek istediğiniz önceden derlenmiş veya önceden oluşturulmuş bir kodunuz var.
Sistemde değişiklik yapmak istiyorsunuz.
Kod boyutunu yönetmek için bağımlılıkların etrafına işaretler koymak istiyorsunuz.
Bir özelliğin lansmanını yönetmek istiyorsunuz ancak aconfig işaretleri sistem tarafından kullanıma sunulmadan önce işaretin değerini kontrol etmeniz gerekiyor.
RELEASE_MY_FLAG_NAME.textproto adlı bir dosya oluşturun.
Dosyayı düzenleyip aşağıdakine benzer bir giriş ekleyin:
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"
Nerede:
name, RELEASE_ ile başlayan işaretin adını içerir. Yalnızca büyük harflere ve alt çizgiye izin verilir.
namespace, katkıların ad alanını içerir. Alan adınızı belirlemek için atanan Google inceleme uzmanıyla çalışmanız gerekir. Kendi AOSP yansımanızın kararlılığını korumak için özellik lansmanı işaretlerini kullanıyorsanız ad alanını istediğiniz şekilde kullanabilirsiniz.
value, işaretin ilk türü ve değeridir. Tür bool_value veya string_value olabilir. Tür string_value ise değer tırnak içinde olmalıdır. Bir değer belirtilmezse boş bir dize kullanılır. Boole değerleri true veya yanlış için boş dize olarak temsil edilir.
workflow, LAUNCH veya PREBUILT değerini alır. Özellik lansmanı işaretlerine benzer şekilde, false değerinden true değerine geçen boole işaretleri için LAUNCH değerini kullanın.
Genellikle önceden derlenmiş bir sürümün sürümünü ayarlayan işaretler için PREBUILT kullanın.
containers Yazdığınız kod türü (ör. tedarikçi kodu için "tedarikçi" veya ürün kodu için "ürün"). Kullanılacak değer konusunda şüpheniz varsa önceki örnekte gösterildiği gibi dört kapsayıcı türünün tümünü kullanın.
Soong dosyasında derleme işareti kullanma
İşaret değerini sorgulamak istediğiniz derleme dosyasında ve modülde, işaret değerine göre dallanma yapmak için koşullu ifade kullanın. Örneğin, aşağıdaki snippet'te RELEASE__READ_FROM_NEW_STORAGE işaretinin değeri sorgulanır:
Bu işaretin değeri true ise libaconfig_storage_read_api_cc modülü, cc_defaults modülüne dinamik olarak bağlanır.
Bu işaretin değeri false ise hiçbir şey (default: [],) olmaz.
Makefile'de derleme işareti kullanma
Derleme dosyasındaki derleme işareti, salt okunur bir derleme değişkenidir. Aşağıdaki makefile örneği, RELEASED_PACKAGE_NFC_STCK adlı bir derleme işaretine erişiyor:
# 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
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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))`."]]