플랫폼용 Android 스튜디오 (ASfP)는 atest 및 Soong 테스트 모듈과 통합되므로 IDE에서 Linux 호스트 머신, 연결된 기기 또는 Cuttlefish 가상 기기에서 플랫폼 테스트를 실행하고 디버그할 수 있습니다.
기본 요건
- AOSP 체크아웃 및
lunch타겟으로 구성된 ASfP 프로젝트를 엽니다. - 기기 테스트의 경우 실제 기기를 연결하거나 일치하는 빌드를 실행하는 Cuttlefish 가상 기기를 실행합니다.
테스트 실행 및 디버그
ASfP의 여러 위치에서 플랫폼 테스트와 디버그 세션을 실행할 수 있습니다.
Android.bp테스트 타겟:Android.bp파일을 열고 테스트 모듈 (*_test또는*_test_host) 옆의 여백에서 실행을 클릭합니다.- 실행: 모든 Soong 테스트 모듈 유형 (
android_test,java_test_host,cc_test,rust_test,python_test,sh_test,android_robolectric_test)에 사용할 수 있습니다. - 디버그:
android_test모듈 (atest --wait-for-debugger를 사용하여 Java 디버거에 연결됨)과 C++ 또는 Rust 테스트 모듈(cc_test,cc_test_host,rust_test,rust_test_host, ASfP의 내장 LLDB 디버거에서 실행됨)에 사용할 수 있습니다.
- 실행: 모든 Soong 테스트 모듈 유형 (
- 소스 파일 여백 아이콘: 소스 코드에서 테스트 클래스 또는
@Test메서드 옆에 있는 실행을 클릭하여 해당 테스트를 실행하거나 디버그합니다. - 마우스 오른쪽 버튼 클릭 컨텍스트 메뉴: 테스트 파일, 클래스, 메서드 또는
Android.bp모듈을 마우스 오른쪽 버튼으로 클릭하고 Run 또는 Debug를 선택합니다. - 기본 제공 에이전트 (Android 스튜디오의 AI): 에이전트 도구 창에서 기본 제공 에이전트는
atest타겟을 실행하여 코드를 수정한 후 변경사항을 확인할 수 있습니다. - 통합 터미널: 보기 > 도구 창 > 터미널을 열어
atest명령어를 직접 실행합니다.
스마트 테스트 구성 및 디버깅
여백 또는 컨텍스트 메뉴에서 테스트를 실행하면 ASfP가 Android.bp 모듈 그래프를 사용하여 Soong 테스트 실행 구성을 만들고 구성합니다.
android_test Java 및 Kotlin 타겟 디버그
Android.bp의 android_test 모듈 옆에 있는 여백 아이콘을 클릭하거나 Java 또는 Kotlin JUnit 클래스 또는 @Test 메서드 옆에 있는 여백 아이콘을 클릭한 다음 '<TestName>' 디버그를 선택합니다. 소스 파일 여백에서 ASfP는 파일이 포함된 srcs이 있는 가장 가까운 android_test 모듈을 선택하고 구성 이름을 <module>, <module>:<SimpleClass> 또는 <module>:<SimpleClass>#<method>로 지정합니다.
ASfP는 --wait-for-debugger로 atest를 실행하고, 모듈의 AndroidManifest.xml에서 타겟 package 속성을 읽고, 연결된 기기에서 해당 프로세스를 기다리고, Java 디버거를 연결합니다.

LLDB에서 cc_test 및 rust_test 타겟 디버그
C++ 또는 Rust 테스트 모듈 (cc_test, cc_test_host, rust_test 또는 rust_test_host)을 디버그하려면 Android.bp 여백 아이콘을 클릭하고 Debug '<TestName>'을 선택합니다. ASfP는 atest을 통해 실행하는 대신 내장 LLDB 디버거에서 컴파일된 테스트 바이너리를 실행합니다.
Soong 테스트 실행 구성 구성
실행 > 구성 수정을 열고 Soong 테스트 구성을 선택하여 테스트 빌드, 배포, 실행 방식을 맞춤설정합니다.
- 모듈 자동 완성 및
Android.bp탐색: 모듈 필드는 프로젝트에서 색인이 생성된 Soong 테스트 모듈에서 자동 완성됩니다. 필드 옆에 있는 Android.bp로 이동을 클릭하여Android.bp의 모듈 선언으로 이동합니다. - 실행 위치: 기기 또는 호스트 (
host_supported: true포함): ASfP는 모듈 규칙과 전이적defaults체인(host_supported,device_supported,enabled,target.android.enabled,target.host.enabled)을 평가합니다.- 이중 타겟 테스트 (
cc_test및rust_test,host_supported: true포함): 기기 및 호스트 라디오 버튼을 모두 사용할 수 있습니다 (기본값은 기기). 기기와 호스트는 각각 독립적인 LLDB 디버거 템플릿을 유지합니다. 기기와 호스트 간에 다음에서 실행을 전환하면 각 타겟에서 이루어진 맞춤설정을 유지하면서 원격 기기lldb-server구성과 로컬 호스트 바이너리 구성 간에 전환됩니다. - 단일 타겟 테스트: C++ 또는 Rust 테스트가 하나의 환경(예: 기기 전용
cc_test또는 호스트 전용cc_test_host또는rust_test_host)에 대해서만 빌드되는 경우 ASfP는 지원되는 타겟을 선택하고 지원되지 않는 라디오 버튼을 설명 툴팁과 함께 사용 중지합니다('<module> (<ruleType>) doesn't build for the host or device.').
- 이중 타겟 테스트 (
- 출시 전 작업 (네이티브 테스트 모듈 빌드 및 atest로 배포): 모든 Soong 테스트 구성에는 기본적으로 두 개의 출시 전 작업이 포함됩니다.
- 네이티브 테스트 모듈 빌드: LLDB를 시작하기 전에
<module>-target(기기용) 또는<module>-host(호스트용)를 빌드합니다. - atest로 배포: 기기에서 디버깅할 때
atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi>를 실행하므로 Tradefed는 LLDB가 바이너리를 실행하기 전에 테스트 종속 항목을 푸시하고 타겟 준비자를 실행합니다. atest로 배포 칩 위로 포인터를 가져가면 정확한atest명령어를 미리 볼 수 있습니다. 종속 항목이 이미 기기에 있는 경우 더 빠른 반복을 위해 atest로 배포를 삭제하여 ASfP가 테스트 바이너리만 직접 푸시하도록 합니다. Run on: Host를 선택하면 ASfP가 Deploy with atest를 자동으로 건너뜁니다.
- 네이티브 테스트 모듈 빌드: LLDB를 시작하기 전에
- 옵션 및 디버거 수정 (LLDB 옵션 카드): 옵션 수정을 사용하여 선택적 구성 필드를 추가합니다.
- 프로그램 인수 (운영체제, C++ 및 Rust 테스트만 해당): 디버깅 시
--gtest_filter또는libtest필터 뒤에cc_test또는rust_test바이너리에 직접 전달되는 추가 인수입니다. - atest 인수 (테스트): 테스트를 실행하거나 atest로 배포로 기기를 준비할 때
atest에 전달되는 추가 플래그입니다. - 디버거 (C++ 및 Rust 테스트만 해당): 모듈이
cc_test*또는rust_test*타겟인 경우 표시됩니다. LLDB 옵션 카드 (예: Rust 테스트의 경우 진입 시 중지, 세션 간에 기호 캐시, 요청 시 기호 로드, Rust 시각화 도구 사용)을 전환하거나, 기본값으로 재설정을 클릭하여 활성 기기 또는 호스트 템플릿을 재설정하거나, 옵션 수정 > 디버거에서 기호 디렉터리, 초기화, 사전 실행, 사후 실행 또는 종료 명령, 실행 JSON (DAP 설정)을 추가합니다.
- 프로그램 인수 (운영체제, C++ 및 Rust 테스트만 해당): 디버깅 시

테스트 결과 보기
테스트 실행 진행 상황, 통과 또는 실패 상태, 스택 트레이스, 기기 로그가 ASfP의 실행 또는 디버그 도구 창에 실시간으로 표시됩니다.
테스트 관련 도움말
- 타겟팅된 테스트 실행: 전체 테스트 모음을 실행하지 않고 편집기 여백에서 개별 메서드를 테스트합니다.
- Cuttlefish 스냅샷 사용: Cuttlefish 가상 기기에서 기기 테스트를 실행할 때 스냅샷을 사용하여 실행 사이에 정리된 기기 상태를 복원합니다.
- Soong 빌드 로그 검사: 테스트가 실행되기 전에 컴파일에 실패하면 Soong 도구 창에서 컴파일러 진단을 확인합니다.