빌드 플래그 선언 및 사용

빌드 플래그는 빌드 시간 상수이며 런타임 중에 변경할 수 없습니다. 이러한 플래그는 aconfig 플래그를 사용할 수 없는 상황에서 사용됩니다. 예를 들면 다음과 같습니다.

  • 빌드에 선택적으로 포함하려는 미리 컴파일된 코드 또는 미리 빌드된 코드가 있습니다.
  • 빌드 시스템 자체를 변경하려고 합니다.
  • 코드 크기를 관리하기 위해 종속 항목 주변에 플래그를 배치하려고 합니다.
  • 기능 출시를 관리하고 싶지만 시스템에서 aconfig 플래그를 사용할 수 있게 되기 전에 플래그 값을 확인해야 합니다.

빌드 플래그 선언

빌드 플래그는 textproto 파일에 선언됩니다. 빌드 플래그를 선언하려면 다음을 실행하세요.

  1. WORKING_DIRECTORY/build/release/flag_declarations/까지 경로 안내
  2. RELEASE_MY_FLAG_NAME.textproto라는 파일을 만듭니다.
  3. 파일을 수정하고 다음과 유사한 항목을 추가합니다.

    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"
    

    각각의 의미는 다음과 같습니다.

    • name에는 RELEASE_이 앞에 오는 플래그 이름이 포함됩니다. 대문자와 밑줄만 허용됩니다.
    • namespace에는 기여의 네임스페이스가 포함됩니다. 할당된 Google 검토자와 협력하여 네임스페이스를 결정해야 합니다. 기능 출시 플래그를 사용하여 자체 AOSP 미러의 안정성을 유지하는 경우 원하는 대로 네임스페이스를 사용할 수 있습니다.
    • value은 플래그의 초기 유형과 값입니다. 유형은 bool_value 또는 string_value일 수 있습니다. 유형이 string_value이면 값은 따옴표로 묶어야 합니다. 지정하지 않으면 값은 빈 문자열입니다. 불리언 값은 true 또는 false의 경우 빈 문자열로 표시됩니다.
    • workflowLAUNCH 또는 PREBUILT입니다. 기능 출시 플래그와 유사하게 false에서 true로 진행되는 불리언 플래그에는 LAUNCH를 사용합니다. 버전을 설정하는 플래그에는 PREBUILT를 사용합니다(일반적으로 사전 빌드).
    • containers 작성 중인 코드의 유형입니다(예: 공급업체 코드의 경우 'vendor', 제품 코드의 경우 'product'). 사용할 값이 확실하지 않은 경우 이전 샘플에 표시된 대로 네 가지 컨테이너 유형을 모두 사용하세요.

Soong 파일에서 빌드 플래그 사용

플래그 값을 쿼리하려는 빌드 파일과 모듈에서 조건을 사용하여 플래그 값에 따라 분기합니다. 예를 들어 다음 스니펫에서는 RELEASE__READ_FROM_NEW_STORAGE 플래그의 값을 쿼리합니다.

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: [],
  }),
}

이 플래그의 값이 true이면 libaconfig_storage_read_api_cc 모듈이 cc_defaults 모듈에 동적으로 연결됩니다.

이 플래그의 값이 false이면 아무 일도 일어나지 않습니다 (default: [],).

Makefile에서 빌드 플래그 사용

메이크 파일에서 빌드 플래그는 읽기 전용 메이크 변수입니다. 다음 메이크파일 샘플은 RELEASED_PACKAGE_NFC_STCK라는 빌드 플래그에 액세스합니다.

# 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

이 플래그의 선언에는 RELEASE_PACKAGE_NFC_STACK.textproto에서 PREBUILT로 설정된 workflow 필드와 trunk_staging 개발 구성의 플래그 값 파일인 com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto 문자열 값이 있습니다.