빌드 플래그는 빌드 시간 상수이며 런타임 중에 변경할 수 없습니다. 이러한 플래그는 다음과 같이 aconfig 플래그를 사용할 수 없는 상황에서 사용됩니다.
- 빌드에 선택적으로 포함하려는 사전 컴파일되거나 사전 빌드된 코드가 있습니다.
- 빌드 시스템 자체를 변경하려고 합니다.
- 코드 크기를 관리하기 위해 종속 항목에 플래그를 배치하려고 합니다.
- 기능 출시를 관리하려고 하는데 시스템에서 aconfig 플래그를 사용할 수 있게 되기 전에 플래그의 값을 확인해야 합니다.
빌드 플래그 선언
빌드 플래그는 textproto 파일에 선언됩니다. 빌드 플래그를 선언하는 방법은 다음과 같습니다.
WORKING_DIRECTORY/build/release/flag_declarations/
까지 경로 안내RELEASE_MY_FLAG_NAME.textproto
라는 파일을 만듭니다.파일을 수정하고 다음과 유사한 항목을 추가합니다.
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의 빈 문자열로 표시됩니다.workflow
은LAUNCH
또는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))