Java, C, C++, Rust 코드에서 aconfig 플래그를 사용할 수 있습니다. AOSP 빌드 시스템 aconfig라는 도구를 실행하여 각 플래그의 값에 액세스하는 데 사용할 수 있는 메서드가 있습니다. 배포를 생성하기 전에 라이브러리를 사용하려면 플래그를 선언하고 빌드에 추가해야 합니다.
Java의 aconfig 플래그 선언
Java용 aconfig 플래그를 선언하려면 다음 안내를 따르세요.
새 코드가 있는 디렉터리에서 확장자가
.aconfig
인 파일(예:my_new_aconfig_flag_declarations.aconfig
)을 만듭니다. aconfig 파일은 표준 스키마를 따르는 텍스트 proto 파일입니다.다음과 유사한 플래그 선언을 추가합니다.
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
각각의 의미는 다음과 같습니다.
package
는 플래그 이름과 결합하면 고유한 키를 제공합니다. Java에서package
를foo.bar
로 설정하면foo.bar.Flags
입니다. C++에서는 플래그 액세스 메서드의 이름이foo::bar::"flagname"
입니다. 동일한 선언의 플래그 파일은 같은 패키지에 속하지만 여러 선언 파일은 플래그를 추가할 수도 있습니다container
는 바이너리로 함께 빌드되고 제공되는 코드 모음을 정의합니다. 유효한 컨테이너는system
,vendor
,system_ext
,product
,name.of.apex
,name.of.apk
입니다.name
에는 소문자, 밑줄, 숫자만 포함된 플래그 이름이 포함됩니다.namespace
에는 참여의 네임스페이스가 포함됩니다. 여러분은 할당된 Google 검토자가 네임스페이스를 결정합니다. 자체 AOSP 미러의 안정성을 유지하기 위해 기능 출시 플래그를 사용하는 경우 네임스페이스를 원하는 대로 사용할 수 있습니다.description
는 기능 또는 변경사항에 대한 간단한 설명을 포함합니다. 신고했습니다.bug
는 새 코드 기여와 관련된 버그 번호입니다. 다음을 수행해야 합니다. Google 검토자와 함께bug
를 결정하세요. 만약 자체 AOSP 미러의 안정성을 유지하기 위해 기능 실행 플래그를 사용합니다. 버그 운송장 번호를 사용하거나<none>
를 사용하면 됩니다.
파일을 저장하고 편집기를 종료합니다.
빌드 설정
플래그를 선언한 후 다음을 생성할 수 있도록 빌드를 설정합니다. 플래그 값에 액세스하는 데 사용되는 라이브러리 코드입니다.
Android.bp
빌드 파일에aconfig_declarations
섹션을 추가합니다. 다음과 비슷합니다.aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
각각의 의미는 다음과 같습니다.
name
에는 소문자, 밑줄, 숫자package
에는 선언에 사용된 것과 동일한 패키지 이름이 포함되어 있습니다.srcs
에는 플래그가 선언된.aconfig
파일의 이름이 포함됩니다.
파일을 저장하고 편집기를 종료합니다.
C 및 C++용 aconfig 플래그 선언
C 및 C++용 aconfig 플래그를 선언하려면 다음을 실행합니다.
새 코드가 있는 디렉터리에서 확장자가 포함된 파일을 만듭니다.
.aconfig
(예:my_new_aconfig_flag_declarations.aconfig
). aconfig 파일은 표준 스키마를 따르는 텍스트 proto 파일입니다.다음과 유사한 플래그 선언을 추가합니다.
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
각각의 의미는 다음과 같습니다.
package
는 플래그 이름과 결합하면 고유한 키를 제공합니다. Java에서package
를foo.bar
로 설정하면foo.bar.Flags
입니다. C++에서는 플래그 액세스 메서드의 이름이foo::bar::"flagname"
입니다. 동일한 선언의 플래그 파일은 같은 패키지에 속하지만 여러 선언 파일은 플래그를 추가할 수도 있습니다container
는 바이너리로 함께 빌드되고 제공되는 코드 모음을 정의합니다. 유효한 컨테이너는system
,vendor
,system_ext
,product
,name.of.apex
,name.of.apk
입니다.name
에는 소문자, 밑줄, 숫자만 포함된 플래그 이름이 포함됩니다.namespace
에는 참여의 네임스페이스가 포함됩니다. 여러분은 할당된 Google 검토자가 네임스페이스를 결정합니다. 자체 AOSP 미러의 안정성을 유지하기 위해 기능 출시 플래그를 사용하는 경우 네임스페이스를 원하는 대로 사용할 수 있습니다.description
는 기능 또는 변경사항에 대한 간단한 설명을 포함합니다. 신고했습니다.bug
는 새 코드 기여와 관련된 버그 번호입니다. 다음을 수행해야 합니다. Google 검토자와 함께bug
를 결정하세요. 만약 자체 AOSP 미러의 안정성을 유지하기 위해 기능 실행 플래그를 사용합니다. 버그 운송장 번호를 사용하거나<none>
를 사용하면 됩니다.
파일을 저장하고 편집기를 종료합니다.
빌드 설정
플래그를 선언한 후 플래그 값에 액세스하는 데 사용되는 라이브러리 코드를 생성할 수 있도록 빌드를 설정합니다.
Android.bp
빌드 파일에aconfig_declarations
섹션을 추가합니다. 다음과 비슷합니다.aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
각각의 의미는 다음과 같습니다.
name
에는 소문자, 밑줄, 숫자package
에는 선언에 사용된 것과 동일한 패키지 이름이 포함되어 있습니다.srcs
에는 플래그가 선언된 aconfig 파일의 이름이 포함됩니다.
동일한 파일에서 다음과 유사한
cc_aconfig_library
타겟을 만듭니다. 있습니다.cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
각각의 의미는 다음과 같습니다.
name
에는 소문자, 밑줄, 숫자aconfig_declarations
에는 선언에 사용된 것과 동일한name
가 포함되어 있습니다.
cc_aconfig_library
빌드 타겟은 C 또는 C++ Codegen을 호출하여 라이브러리를 생성할 수 있습니다CC aconfig 라이브러리는 CC 라이브러리 타겟과 유사하지만
vendor_available
,product_available
,host_supported
,vndk
입니다. 이cc_aconfig_library
에 종속된 빌드 타겟에 특정 유형의 변형이 필요한 경우 CC aconfig 라이브러리 타겟에 상응하는 설정을 추가해야 할 수도 있습니다. 예를 들어 상위 빌드 타겟의vendor_available
가true
로 설정된 경우 이cc_aconfig_library
타겟에서도vendor_available
를true
로 설정할 수 있습니다.이 빌드 대상을 추가한 후 코드에서 이 라이브러리에 액세스할 수 있습니다. 나
static_lib
를 사용하여 이 라이브러리를 포함할 수 있습니다.shared_lib
문법 이 라이브러리를static_lib
로 추가하려면 다음을 참고하세요.server_configurable_flags
에shared_lib
종속 항목을 추가합니다. 3단계 코드에서 생성된 플래그 라이브러리를libexample_cpp_lib
다음 예와 같이 aconfig 플래그를 사용하는 대상을 만듭니다.
cc_library
:cc_library { name: "libexample_cpp_lib", srcs: ["src/example_cpp_lib.cc"], double_loadable: true, cflags: [ "-Wall", "-Werror", "-Wno-unused-function", "-Wno-unused-parameter", ], header_libs: [ "jni_headers", ], shared_libs: [ "server_configurable_flags", ], static_libs: [ "aconfig_demo_flags_c_lib", ], export_include_dirs: ["src/include"], }
각각의 의미는 다음과 같습니다.
shared_libs
에는 aconfig 플래그에 필요한 추가 종속 항목이 포함되어 있습니다.static_libs
은cc_aconfig_library
name
필드를 입력합니다.cc_library
항목 만들기 을 사용하면 코드에서 aconfig 플래그를 사용할 수 있습니다.
Rust용 aconfig 플래그 선언
Rust의 aconfig 플래그를 선언하려면 다음을 실행합니다.
새 코드가 있는 디렉터리에서 확장자가 포함된 파일을 만듭니다.
.aconfig
(예:my_new_aconfig_flag_declarations.aconfig
). aconfig 파일은 표준 스키마를 따르는 텍스트 proto 파일입니다.다음과 유사한 플래그 선언을 추가합니다.
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
각각의 의미는 다음과 같습니다.
package
는 플래그 이름과 결합하면 고유한 키를 제공합니다. Java에서package
를foo.bar
로 설정하면foo.bar.Flags
입니다. C++에서는 플래그 액세스 메서드의 이름이foo::bar::"flagname"
입니다. 동일한 선언의 플래그 파일은 같은 패키지에 속하지만 여러 선언 파일은 플래그를 추가할 수도 있습니다container
는 바이너리로 함께 빌드되고 제공되는 코드 모음을 정의합니다. 유효한 컨테이너는system
,vendor
,system_ext
,product
,name.of.apex
,name.of.apk
입니다.name
에는 소문자, 밑줄, 숫자만 포함된 플래그 이름이 포함됩니다.namespace
에는 참여의 네임스페이스가 포함됩니다. 여러분은 할당된 Google 검토자가 네임스페이스를 결정합니다. 자체 AOSP 미러의 안정성을 유지하기 위해 기능 출시 플래그를 사용하는 경우 네임스페이스를 원하는 대로 사용할 수 있습니다.description
는 기능 또는 변경사항에 대한 간단한 설명을 포함합니다. 신고했습니다.bug
는 새 코드 기여와 관련된 버그 번호입니다. 다음을 수행해야 합니다. Google 검토자와 함께bug
를 결정하세요. 만약 자체 AOSP 미러의 안정성을 유지하기 위해 기능 실행 플래그를 사용합니다. 버그 운송장 번호를 사용하거나<none>
를 사용하면 됩니다.
파일을 저장하고 편집기를 종료합니다.
빌드 설정
플래그를 선언한 후 다음을 생성할 수 있도록 빌드를 설정합니다. 플래그 값에 액세스하는 데 사용되는 라이브러리 코드입니다.
Android.bp
빌드 파일에 다음과 유사한aconfig_declarations
섹션을 추가합니다.aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
각각의 의미는 다음과 같습니다.
name
에는 소문자, 밑줄, 숫자package
에는 선언에 사용된 것과 동일한 패키지 이름이 포함되어 있습니다.srcs
에는 플래그가 선언된 aconfig 파일의 이름이 포함됩니다.
다음 예와 유사한
rust_aconfig_library
타겟을 만듭니다. 이 target이 Rust Codegen을 호출하고 생성된 코드로 Rust 라이브러리를 생성함 빌드 시간 중에 말입니다rust_aconfig_library { name: "libaconfig_demo_flags_rust", crate_name: "aconfig_demo_flags_rust", aconfig_declarations: "aconfig_demo_flags", }
각각의 의미는 다음과 같습니다.
name
에는 소문자, 밑줄, 숫자crate_name
에는 선언에 사용된 것과 동일한 패키지 이름이 포함됩니다.aconfig_declarations
에는 선언에 사용된 것과 동일한name
가 포함되어 있습니다.
이렇게 변경하면 코드가 이 Rust 라이브러리에 종속될 수 있습니다.
같은 파일에서 다음과 유사한
rust_library
항목을 만듭니다.rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }
이 샘플을 사용하면 소스 코드 빌드에서
libexample_demo_flags_rust
을(를) 타겟팅할 수 있습니다. 코드 생성 플래그 라이브러리를 포함할 수 있습니다.파일을 저장하고 편집기를 종료합니다.