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 |
proto 정의를 다시 컴파일합니다. |
테스트 실행
Winscope에는 단위 테스트와 엔드 투 엔드 테스트가 포함되어 있습니다. 실행하려면 npm run
<command>
를 사용하세요.
명령어 | 설명 |
---|---|
test:unit:ci |
CI 또는 사전 제출 후크의 경우 덜 상세한 형식으로 단위 테스트를 실행합니다. |
test:unit:dev |
로컬 개발을 위해 더 상세한 형식으로 단위 테스트를 실행합니다. 이 모드는 변경사항을 감시하고 올바른 테스트를 자동으로 다시 실행합니다. |
test:e2e |
교차 도구 프로토콜과 같은 엔드 투 엔드 테스트를 실행합니다. |
test:presubmit:quiet |
CI 또는 사전 제출 후크용으로 더 간결한 형식으로 모든 사전 제출 단위 테스트, 린터, 그래프 분석을 빌드합니다. |
test:presubmit |
로컬 개발을 위해 더 상세한 형식으로 모든 사전 제출 단위 테스트, 린터, 그래프 분석을 빌드합니다. |
test:all |
로컬 개발을 위해 모든 테스트 (단위 테스트 및 엔드 투 엔드 테스트), 린터, 그래프 분석을 더 상세한 형식으로 실행합니다. |
@IntDef 매핑 업데이트
@IntDef
는 Android에서 정수의 가능한 값을 제한하는 데 사용되는 주석입니다. Winscope는 이러한 주석의 매핑을 사용하여 정수 대신 값의 이름을 표시합니다.
@IntDef
매핑을 업데이트하려면 다음 단계를 따르세요.
주석 전처리기를 실행할
:framework-minus-apex-intdefs
를 빌드합니다.mp :framework-minus-apex-intdefs
생성된
intDefMapping.json
파일을 사전 빌드 저장소에 복사합니다.$ 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
이는 새 필수 필드가 포함된 새 proto 정의로 트레이스 파일이 생성된 경우에 발생합니다.
- 올바른 Winscope 버전(마스터, S, R)에서 트레이스를 열고 있는지 확인합니다.
proto에서 새 필드를 만드는 경우
npm run build:protos
를 사용하여 Winscope에서 proto를 다시 컴파일합니다.
설치된 일부 종속 항목 버전이 잘못됨 (빌드 실패)
package.json
및package-lock.json
의 변경사항을 되돌립니다.node_modules
를 삭제합니다.npm install
를 다시 실행합니다.
proto 파일 중 하나에 새 필드를 추가했습니다. 어떻게 표시하나요?
- Winscope는 컴파일 시의 proto 정의가 사용되므로 새 필드는 기본적으로 표시되지 않습니다. 새 필드를 표시하려면
npm run build:protos
를 사용하여 프로토를 다시 빌드합니다.
- Winscope는 컴파일 시의 proto 정의가 사용되므로 새 필드는 기본적으로 표시되지 않습니다. 새 필드를 표시하려면