Derleme işareti tanımlama ve kullanma

Derleme işaretleri, derleme zamanı sabitleridir ve çalışma zamanında değiştirilemez. Bu işaretler, aconfig işaretlerinin kullanılamadığı durumlarda (ör.

  • Derlemeye isteğe bağlı olarak dahil etmek istediğiniz önceden derlenmiş veya önceden oluşturulmuş bir kod parçanız var.
  • Derleme sisteminde değişiklik yapmak istiyorsanız.
  • Kod boyutunu yönetmek için bağımlılıkların etrafına işaretler yerleştirmek istiyorsunuz.
  • Bir özelliğin kullanıma sunulmasını yönetmek istiyorsunuz ancak sistem tarafından aconfig işaretleri kullanıma sunulmadan önce işaretin değerini kontrol etmeniz gerekiyor.

Derleme işareti bildirme

Derleme işaretleri, textproto dosyalarında tanımlanır. Derleme işareti bildirmek 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üzenleyerek 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şaret adını içerir. Yalnızca büyük harflere ve alt çizgiye izin verilir.
    • namespace, katkılar için ad alanını içerir. Ad alanınızı belirlemek için atanan Google inceleme uzmanıyla birlikte çalışmanız gerekir. Kendi AOSP yansıtmanızın kararlılığını korumak için özellik lansmanı işaretleri 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ğer tırnak içinde olmalıdır. Belirtilmezse değer boş bir dizedir. Boole değerleri, doğru için true, yanlış için ise boş dize olarak gösterilir.
    • workflow, LAUNCH veya PREBUILT'dir. Özellik lansmanı işaretlerine benzer şekilde false'dan true'ye geçen boole işaretleri için LAUNCH kullanın. Genellikle önceden oluşturulmuş bir sürümü ayarlayan işaretler için PREBUILT kullanın.
    • containers Yazdığınız kodun türü (ör. tedarikçi kodu için "tedarikçi" veya ürün kodu için "ürün"). Kullanılacak değerden emin değilseniz önceki örnekte gösterildiği gibi dört kapsayıcı türünü de 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 dallanmak için koşullu bir 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'da derleme işareti kullanma

Make dosyasında derleme işareti, salt okunur bir make değişkenidir. Aşağıdaki makefile örneği, RELEASED_PACKAGE_NFC_STCK adlı bir derleme işaretine erişir:

# 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 bildiriminde, workflow alanı RELEASE_PACKAGE_NFC_STACK.textproto için PREBUILT olarak ayarlanmış 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.