Bir derleme işareti tanımlama ve kullanma

Derleme işaretleri, derleme zamanı sabitleridir ve çalışma zamanında değiştirilemez. Bu işaretler, örneğin bir yapılandırma 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 kod parçanız var.
  • Kendi sisteminizi derlemek için değişiklikler 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.

Derleme işareti beyan etme

Derleme işaretleri, textproto dosyalarında tanımlanır. Bir derleme işareti tanımlamak için:

  1. WORKING_DIRECTORY/build/release/flag_declarations/ konumuna git
  2. RELEASE_MY_FLAG_NAME.textproto adlı bir dosya oluşturun.
  3. 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 için ad alanı içerir. Alan adınızı belirlemek için atanan Google inceleme uzmanıyla çalışmanız gerekir. Kendi AOSP aynanızın kararlılığını korumak için özellik başlatma bayrakları kullanıyorsanız ad alanını istediğiniz gibi kullanabilirsiniz.
    • value, işaretin ilk türü ve değeridir. Tür bool_value veya string_value olabilir. Tür string_value ise değerin tırnak içinde olması gerekir. Belirtilmezse değer boş bir dize olur. Boole değerleri true veya yanlış için boş dize olarak temsil edilir.
    • workflow, LAUNCH veya PREBUILT olur. Ö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 oluşturulmuş bir sürümü belirleyen işaretler için PREBUILT kullanın.
    • containers, yazdığınız kod türünü (ör. tedarikçi kodu için "tedarikçi firma" veya ürün kodu için "ürün") kullanın. Kullanılacak değerden emin değilseniz önceki örnekte gösterildiği gibi dört kapsayıcı türünün tümünü kullanın.

Yakındag dosyasında derleme bayrağı 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:

cc_defaults {
  name: "aconfig_lib_cc_shared_link.defaults",
  shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
    true: ["libaconfig_storage_read_api_cc],
    default: [],
  }),
}

Bu işaretin değeri true ise libaconfig_storage_read_api_cc modülü dinamik olarak cc_defaults modülüne bağlanır.

Bu işaretin değeri false ise hiçbir şey (default: [],) olmaz.

Makefile'da derleme işareti kullanma

Yapma dosyasındaki derleme işareti, salt okunur bir yapma değişkenidir. Aşağıdaki makefile örneği, RELEASED_PACKAGE_NFC_STCK adlı bir derleme işaretine erişiyor:

# NFC and Secure Element packages
PRODUCT_PACKAGES += \
    $(RELEASE_PACKAGE_NFC_STACK) \
    Tag \
    SecureElement \
    android.hardware.nfc-service.st \
    android.hardware.secure_element@1.0-service.st \
    NfcOverlayCoral

Bu işaretin beyanında, RELEASE_PACKAGE_NFC_STACK.textproto bölümünde PREBUILT olarak ayarlanmış bir workflow alanı ve trunk_staging geliştirme yapılandırması için işaret değerleri dosyasında com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto dize değeri bulunur.