Derleme işareti tanımlama ve kullanma

Derleme işaretleri, derleme zamanı sabitleridir ve çalışma zamanında değiştirilemez. Bu işaretler, 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 kodunuz var.
  • Sistem oluşturma işleminde 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 yapılandırma 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. 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 harf 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:

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ü, 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 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 vardır.