빌드 플래그 선언 및 사용

빌드 플래그는 빌드 시간 상수이며 런타임 중에 변경할 수 없습니다. 이러한 플래그는 다음과 같이 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에서 빌드 플래그 사용

make 파일에서 빌드 플래그는 읽기 전용 make 변수입니다. 다음 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에서 workflow 필드가 PREBUILT로 설정되어 있고 trunk_staging 개발 구성의 플래그 값 파일인 RELEASE_PACKAGE_NFC_STACK.textproto에서 문자열 값이 com.android.nfcservices입니다.

ifeq (,$(RELEASE_MY_FLAG))