Winscope 추적은 Android 프레임워크의 일부입니다. 이 페이지에서는 Winscope 트레이스 뷰어를 로컬로 다운로드하고 빌드하고 실행하는 데 필요한 단계를 간략히 설명합니다.
로컬에서 Winscope 빌드
다음 단계에 따라 Winscope 추적기를 실행하도록 PC를 설정하세요.
- Android 소스 다운로드
Winscope 폴더로 이동합니다.
cd development/tools/winscope
다음을 사용하여 종속 항목을 설치합니다.
npm install
사용 가능한 명령어 목록을 보려면
npm run
를 실행합니다.다음을 사용하여 모든 프로덕션 및 테스트 타겟을 빌드합니다.
npm run build:prod
다음을 사용하여 Winscope를 실행합니다.
npm run start
별도의 파트 빌드
다음 명령어를 사용하여 Winscope의 개별 부분을 별도로 빌드할 수 있습니다.
명령어 | 설명 |
---|---|
build:trace_processor |
Perfetto의 최신 버전 trace_processor 을 체크아웃하고 다시 빌드합니다. |
build:protos |
프로토 정의를 다시 컴파일합니다. |
테스트 실행
Winscope에는 단위 테스트와 엔드 투 엔드 테스트가 포함되어 있습니다. 이를 실행하려면 npm run
<command>
를 사용하세요.
명령어 | 설명 |
---|---|
test:unit:ci |
CI 또는 사전 제출 후크를 위해 덜 상세한 형식으로 단위 테스트를 실행합니다. |
test:unit:dev |
로컬 개발을 위해 더 자세한 형식으로 단위 테스트를 실행합니다. 이 모드는 변경사항을 감시하고 올바른 테스트를 자동으로 다시 실행합니다. |
test:e2e |
교차 도구 프로토콜과 같은 엔드 투 엔드 테스트를 실행합니다. |
test:presubmit:quiet |
CI 또는 사전 제출 후크를 위해 장황하지 않은 형식으로 모든 사전 제출 단위 테스트, 린터, 그래프 분석을 빌드합니다. |
test:presubmit |
로컬 개발을 위해 사전 제출 단위 테스트, 린터, 그래프 분석을 더 자세한 형식으로 빌드합니다. |
test:all |
로컬 개발을 위해 모든 테스트 (단위 및 엔드 투 엔드), 린터, 그래프 분석을 더 자세한 형식으로 실행합니다. |
엔드 투 엔드 테스트
엔드 투 엔드 테스트를 실행하기 전에 원격 도구를 시작하고 올바른 버전의 Chrome 드라이버를 설치해야 합니다. 다음 코드 스니펫에서 run test:e2e
명령어는 Chrome 드라이버를 자동으로 설치합니다.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
다음 표에는 필요한 명령어와 설명이 나와 있습니다. 이를 실행하려면 npm run command
을 사용하세요.
명령어 | 설명 |
---|---|
start:remote_tool_mock |
교차 도구 프로토콜 테스트를 위해 원격 도구 모의를 시작합니다. |
install:chromedriver |
엔드 투 엔드 테스트를 실행하는 데 필요한 Chrome 드라이버를 설치합니다. |
@IntDef 매핑 업데이트
@IntDef
는 Android에서 정수의 가능한 값을 제한하는 데 사용되는 주석입니다. Winscope는 이러한 주석의 매핑을 사용하여 정수 대신 값의 이름을 표시합니다.
@IntDef
매핑을 업데이트하려면 다음을 실행하세요.
주석 전처리기가 실행되도록
:framework-minus-apex-intdefs
빌드mp :framework-minus-apex-intdefs
생성된
intDefMapping.json
파일을 prebuilts 저장소에 복사합니다.$ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
repo upload
를 사용하여 Winscope에서 변경사항을 업로드합니다.
기타 명령어
빌드 및 테스트 외에도 Winscope 스크립트에는 표에 표시된 대로 다른 기능이 포함되어 있습니다. 이를 실행하려면 npm run command
를 사용하세요.
명령어 | 설명 |
---|---|
format:check |
prettier 를 사용하여 코드 형식 문제를 확인합니다. |
format:fix |
prettier 를 사용하여 코드 형식 문제를 확인하고 자동으로 수정합니다. |
eslint:check |
eslint 를 사용하여 코드 형식 문제를 확인합니다. |
eslint:fix |
eslint 를 사용하여 코드 형식 문제를 확인하고 자동으로 수정합니다. |
tslint:check |
tslint 를 사용하여 코드 형식 문제를 확인합니다. |
tslint:fix |
tslint 를 사용하여 코드 형식 문제를 확인하고 자동으로 수정합니다. |
deps_graph:check_cycles |
순환 종속 항목이 있는지 코드를 분석합니다. |
문제 해결
문제 해결을 위해 다음 도움말을 참고하세요.
오류
ProtocolError: missing required '<FIELD>'
또는TypeError: Cannot read property '<PROP>' of null
새 필수 필드가 포함된 새 프로토 정의로 트레이스 파일을 만든 경우에 발생합니다.
- 올바른 Winscope 버전(master, S 또는 R)에서 트레이스를 열어야 합니다.
프로토에 새 필드를 만드는 경우
npm run build:protos
를 사용하여 Winscope에서 프로토를 다시 컴파일합니다.
설치된 일부 종속 항목 버전이 잘못됨 (빌드 실패)
package.json
및package-lock.json
의 변경사항을 되돌립니다.node_modules
을 삭제합니다.npm install
를 다시 실행합니다.
프로토 파일 중 하나에 새 필드를 추가했습니다. 어떻게 표시하나요?
- Winscope는 컴파일된 시점의 프로토 정의를 사용하므로 기본적으로 새 필드가 표시되지 않습니다. 새 필드를 표시하려면
npm run build:protos
를 사용하여 프로토콜을 다시 빌드하세요.
- Winscope는 컴파일된 시점의 프로토 정의를 사용하므로 기본적으로 새 필드가 표시되지 않습니다. 새 필드를 표시하려면