Winscope 실행

Winscope 추적은 Android 프레임워크의 일부입니다. 이 페이지에서는 Winscope 트레이스 뷰어를 로컬로 다운로드하고 빌드하고 실행하는 데 필요한 단계를 간략히 설명합니다.

로컬에서 Winscope 빌드

다음 단계에 따라 Winscope 추적기를 실행하도록 PC를 설정하세요.

  1. Android 소스 다운로드
  2. Winscope 폴더로 이동합니다.

    cd development/tools/winscope
    
  3. 다음을 사용하여 종속 항목을 설치합니다.

    npm install
    

    사용 가능한 명령어 목록을 보려면 npm run를 실행합니다.

  4. 다음을 사용하여 모든 프로덕션 및 테스트 타겟을 빌드합니다.

    npm run build:prod
    
  5. 다음을 사용하여 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 매핑을 업데이트하려면 다음을 실행하세요.

  1. 주석 전처리기가 실행되도록 :framework-minus-apex-intdefs 빌드

    mp :framework-minus-apex-intdefs
    
  2. 생성된 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
    
  3. 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

    • 필수 필드가 포함된 새 프로토 정의로 트레이스 파일을 만든 경우에 발생합니다.

      1. 올바른 Winscope 버전(master, S 또는 R)에서 트레이스를 열어야 합니다.
      2. 프로토에 새 필드를 만드는 경우 npm run build:protos를 사용하여 Winscope에서 프로토를 다시 컴파일합니다.

  • 설치된 일부 종속 항목 버전이 잘못됨 (빌드 실패)

    • package.jsonpackage-lock.json의 변경사항을 되돌립니다. node_modules을 삭제합니다. npm install를 다시 실행합니다.
  • 프로토 파일 중 하나에 새 필드를 추가했습니다. 어떻게 표시하나요?

    • Winscope는 컴파일된 시점의 프로토 정의를 사용하므로 기본적으로 새 필드가 표시되지 않습니다. 새 필드를 표시하려면 npm run build:protos를 사용하여 프로토콜을 다시 빌드하세요.