2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
전역 구성으로 프로토콜 로드
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
이 섹션을 이해하려면 먼저 Tradefed @Option부터 살펴봐야 합니다.
Tradefed의 일반적인 옵션을 사용하면 클래스를 테스트하여 XML 구성 또는 명령줄에서 추가 정보를 가져올 수 있습니다. 이 기능을 사용하면 필요한 경우 하나의 추가 단계를 통해 이러한 추가 정보의 일부를 리졸브할 수 있습니다.
파일 옵션의 예
예시 파일 @option:
@Option(name = 'config-file')
private File mConfigFile;
위의 예시는 XML 구성을 통해 설정할 수 있습니다.
<option name="config-file" value="/tmp/file" />
명령어를 통해 설정할 수도 있습니다.
--config-file /tmp/file
설명
이 기능을 사용하면 원격인 파일 형식 @Options를 로컬 파일로 리졸브하여 사용자의 입장에서 원활하게 사용할 수 있도록 할 수 있습니다.
이 작업의 경우 파일을 원격 형식 경로로 지정해야 합니다. 예를 들면 다음과 같습니다.
--config-file gs://bucket/tmp/file
이 경로는 경로가 저장되는 GCS(Google Cloud Storage) 버킷 내의 파일을 가리킵니다. Tradefed는 원격 경로를 보자마자 로컬에서 파일을 다운로드하여 @Option에 할당하려고 시도합니다. 따라서 mConfigFile
변수가 이제 테스트에서 사용할 수 있는 파일의 로컬 버전을 가리키게 됩니다.
어떠한 이유로든 원격 파일을 다운로드할 수 없는 경우 Tradefed에서 테스트의 실행을 막는 ConfigurationException
이 발생합니다. 일부 테스트 아티팩트가 함께 누락될 수 있는 만큼 Google은 이러한 파일의 누락을 치명적인 결함으로 간주합니다.
쿼리 매개변수 사용
?
를 사용하여 쿼리 매개변수를 URL에 추가할 수 있습니다. 예를 들면 다음과 같습니다. gs://bucket/path?unzip=true
. 키/값 unzip=true
는 IRemoteFileResolver 인터페이스 구현에서 사용할 수 있습니다.
다음 두 가지 기본 제공 동작을 사용할 수 있습니다.
- unzip:
true
로 설정하고 다운로드한 파일이 zip이면 임시 위치에 자동으로 압축 해제됩니다. 예: ?unzip=true
- optional: 기본값은
false
입니다. true
로 설정하고 확인이 실패하면 예외가 발생하지 않으며 파일이 대체되지만 않습니다. 예: ?optional=true
호출에서 시도한 모든 동적 다운로드에 키/값을 전달하는 --dynamic-download-args key=value
를 통해 전역 쿼리 인수를 전달할 수도 있습니다.
지원되는 프로토콜
공식적으로 지원되는 프로토콜과 이에 상응하는 형식은 다음과 같습니다.
- Google Cloud Storage, 프로토콜:
gs
, 형식: gs://<bucket name>/path
- 로컬 파일, 프로토콜:
file
, 형식: file:/local/path
- http 링크, 프로토콜:
http
, 형식: http://url
- https 링크, 프로토콜:
https
, 형식: https://url
제한사항
@Option의 동적 해결책은 현재 다운로드할 제한된 수의 프로토콜과 위치만 지원합니다. @Option의 해결책은 현재 기본 XML Tradefed 구성에 의해서만 사용 설정됩니다.
도구 모음으로 실행 중인 경우 현재 모듈(AndroidTest.xml
)은 기본적으로 파일을 확인하지 않습니다.
이는 모듈에 의해 알 수 없는 종속 항목이 생성되지 않도록 하기 위함입니다. 도구 모음 수준에서 --enable-module-dynamic-download
를 사용하여 이스케이프할 수 있지만 호환성 테스트 모음(CTS) 및 공급업체 테스트 모음(VTS)과 같은 주요 도구 모음에서 사용 설정하지 않습니다.
새 프로토콜 구현
지원되는 프로토콜은 IRemoteFileResolver 인터페이스의 Tradefed에 구현되어 있으며 getSupportedProtocol
을 통한 파일 경로에서 일치할 프로토콜의 짧은 태그를 정의합니다. 예를 들어 gs
는 Google Cloud Storage 프로토콜에 사용됩니다. 구현할 권장 인터페이스는 #resolveRemoteFiles(RemoteFileResolverArgs)
이며 장기적으로 유지되는 인터페이스입니다.
구현된 프로토콜은 하네스 META-INF 서비스 파일에 추가하여 공식적으로 지원을 사용 설정할 수 있습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Load protocols with global config\n\nIn order to understand this section, first study the Tradefed\n[@Option](/docs/core/tests/tradefed/fundamentals/options).\n\nTypical options in Tradefed allow for test classes to receive additional\ninformation from the XML configuration or command line. This feature allows you\nto go one extra step and resolve some of this additional information if\nnecessary.\n\nFile option example\n-------------------\n\nExample File @option: \n\n @Option(name = 'config-file')\n private File mConfigFile;\n\nThe above can be set via XML configuration: \n\n \u003coption name=\"config-file\" value=\"/tmp/file\" /\u003e\n\nor via command: \n\n --config-file /tmp/file\n\nDescription\n-----------\n\nThe feature allows you to resolve File-typed @Options that are remote into a\nlocal file to be available seamlessly from a user standpoint.\n\nFor this to work, the file needs to be specified with a *remote style path*. For\nexample: \n\n --config-file gs://bucket/tmp/file\n\nThis path points to a file within a Google Cloud Storage (GCS) bucket where it's\nstored. Tradefed upon seeing that remote path, will attempt to download the file\nlocally and assign it to the @Option. This results in the `mConfigFile` variable\nto now point to the local version of the file, which can be used by the test.\n\nIf the remote file cannot be downloaded for any reason, Tradefed will throw a\n`ConfigurationException` that will prevent the test from running. We consider\nmissing those files a critical failure since some test artifacts will also be\nmissing.\n\nUse query parameters\n--------------------\n\nAdding query parameters to a URL is possible using `?`. For example,\n`gs://bucket/path?unzip=true`. The key/value `unzip=true` will be available in\nthe [IRemoteFileResolver\ninterface](https://android.googlesource.com/platform/tools/tradefederation/+/refs/heads/android16-release/src/com/android/tradefed/config/remote/IRemoteFileResolver.java)\nimplementation.\n\nTwo built-in behaviors are available:\n\n- unzip: If set to `true` and the downloaded file is a zip, it will be automatically unzipped to a temporary location. Example: `?unzip=true`\n- optional: Defaults to `false`. If set to `true` and the resolution fails, it won't throw an exception and will simply not replace the file. Example: `?optional=true`\n\nYou can also pass global query arguments via `--dynamic-download-args key=value`\nthat will pass the key/value to all the dynamic downloads attempted in the\ninvocation.\n\nSupported protocols\n-------------------\n\nThe officially supported protocols and their corresponding formats are:\n\n- Google Cloud Storage, protocol: `gs`, format: `gs://\u003cbucket name\u003e/path`\n- Local files, protocol: `file`, format: `file:/local/path`\n- http links, protocol: `http`, format: `http://url`\n- https links, protocol: `https`, format: `https://url`\n\nLimitations\n-----------\n\nThe dynamic resolution of @Option currently supports only a limited number of\nprotocols and locations to download from. The resolution of @Option is currently\nenabled only for the main XML Tradefed configuration.\n\nIf running as a suite, current modules (`AndroidTest.xml`) will not resolve the\nfiles by default.\n*This is meant to prevent modules from creating some unknown dependencies* . This\ncan be escaped by using `--enable-module-dynamic-download` at the suite level,\nbut major suites such as the [Compatibility Test Suite\n(CTS)](/docs/compatibility/cts) and [Vendor Test Suite\n(VTS)](/docs/compatibility/vts) will not enable it.\n\nImplement a new protocol\n------------------------\n\nThe protocols that are supported have an implementation in Tradefed of the\n[IRemoteFileResolver\ninterface](https://android.googlesource.com/platform/tools/tradefederation/+/refs/heads/android16-release/src/com/android/tradefed/config/remote/IRemoteFileResolver.java)\n,which defines the short tag of the protocol that will be matched in the\nfile path through `getSupportedProtocol`. For example, `gs` is used for the\nGoogle Cloud Storage protocol. The recommended interface to implement is\n`#resolveRemoteFiles(RemoteFileResolverArgs)` which will be the long-term\nmaintained interface.\n\nThe protocols implemented can be added to [the harness META-INF\nservices](https://android.googlesource.com/platform/tools/tradefederation/+/refs/heads/android16-release/res/META-INF/services/com.android.tradefed.config.remote.IRemoteFileResolver)\nfile to officially turn on the support."]]