Android 개발자 코드랩

지구 역사상 가장 널리 설치된 운영 체제를 개발하는 데 도움을 줄 수 있습니다. 예, 귀하는 Android 플랫폼 엔지니어가 되기 위한 여정을 시작하기 위해 여기에 왔습니다.

그 길은 험난하지만 Android 팀은 모든 릴리스에서 여러분의 여정을 단순화하기 위해 노력하고 있습니다. 그리고 팀은 Android 오픈소스 프로젝트(AOSP)에서 직접 작업을 통해 매일 개선을 이루고 있습니다.

그러니 편안히 앉아 터미널을 실행하고 역사를 만들어 봅시다.

목표

이 Codelab의 임무는 두 가지입니다.

  1. 플랫폼(운영 체제)에서 작업하는 Android 엔지니어의 개발자 워크플로가 어떤 것인지 간략하게 소개합니다.
  2. Android 도구, 문서, 개발자 워크플로에 대한 피드백을 제공하도록 권장하세요.

전제조건

이 Codelab의 요구사항 목록은 일반 플랫폼( AOSP ) 개발 요구사항에서 파생되었습니다. 이 Codelab을 진행하려면 다음을 설정하세요.

환경

일반적으로 사용자는 워크스테이션에서 직접 구축하고 개발합니다. 다양한 터미널에서 작업할 수 있고 사용되는 명령 중 다수가 터미널별로 다르므로 각 터미널 세션에서 해당 명령을 다시 실행해야 합니다. 특히 여기에는 source build/envsetup.shlunch 명령이 포함됩니다.

워크스테이션 설정

  1. 워크스테이션에 필요한 패키지를 설치합니다 .
  2. 터미널에 있는 동안 Repo를 설치하고 모든 Git 저장소에 대한 자격 증명을 얻습니다 .

코드 초기화 및 동기화

  1. 홈 디렉터리로 이동합니다.

    cd ~
    
  2. 그 안에 로컬 작업 하위 디렉터리를 만듭니다.

    mkdir aosp
    
  3. 다음 디렉터리로 이동합니다.

    cd aosp
    
  4. AOSP 저장소 소스 코드 기본 분기(기본값)를 초기화합니다.

    repo init -u https://android.googlesource.com/platform/manifest
    
  5. Git 자격 증명(이름, 이메일 주소)을 입력하거나 수락합니다.

  6. 소스 코드를 동기화합니다.

    repo sync -j8
    

초기 동기화에는 1시간 이상 걸릴 수 있습니다.

각 저장소 체크아웃은 매니페스트 파일 로 표시됩니다. 서로 다른 디렉토리에 존재하는 한 한 번에 2개 이상의 저장소 체크아웃을 허용합니다. 그러나 각 체크아웃 및 빌드 양은 약 300GB 사용량(및 증가)에 달하므로 저장소 체크아웃을 2번으로 제한하거나 보조 드라이브로 시스템을 늘리십시오.

코드 빌드

Android를 빌드하려면 lunch 명령으로 빌드할 대상 장치 유형을 선택해야 합니다. 대상은 특정 모델이나 폼 팩터와 같은 장치 순열입니다.

기기 타겟 aosp_cf_x86_64_phone-userdebug 하면 실제 기기 없이 테스트용 Cuttlefish 가상 Android 기기를 빌드할 수 있습니다.

대신 물리적 장치를 구축하고 업데이트하려면 다른 대상을 선택하고 장치 플래싱 에 대한 지침을 따르세요.

  1. 소스 코드 체크아웃 루트에서 다음 명령을 실행하여 Android 장치 빌드를 위한 환경을 설정합니다.

    source build/envsetup.sh
    
  2. 다음과 같이 빌드 대상을 lunch 명령에 전달합니다.

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. 다음을 사용하여 결제 과정 어디에서나 코드를 작성하세요 .

    m
    

첫 번째 빌드에는 몇 시간이 걸릴 것으로 예상됩니다. 후속 빌드에는 훨씬 적은 시간이 소요됩니다.

오징어 발사

Cuttlefish는 빌드를 테스트하는 데 사용되는 Android 에뮬레이터입니다.

  1. Cuttlefish를 설치한 적이 없다면 필요한 Cuttlefish 종속성을 설치해야 합니다. 터미널 창에서 다음 명령을 실행하여 호스트 Debian 패키지를 다운로드, 빌드 및 설치합니다.

    sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    for dir in base frontend; do
    pushd $dir
    # Install build dependencies
    sudo mk-build-deps -i
    dpkg-buildpackage -uc -us
    popd
    done
    sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
    sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
    sudo usermod -aG kvm,cvdnetwork,render $USER
    sudo reboot
    

    재부팅하면 추가 커널 모듈 설치가 트리거되고 udev 규칙이 적용됩니다.

  2. 오징어 실행:

    launch_cvd --daemon</code>
    
  3. 웹 브라우저에서 https://localhost:8443 으로 이동하여 Cuttlefish 장치에 연결합니다. 방금 만든 Android 기반 장치의 비디오 스트림이 표시됩니다.

변경하기

변경 목록 예시에 따라 소스 코드를 업데이트하세요.

  1. 체크아웃 루트( aosp/ 디렉터리)에서 frameworks/native Git 프로젝트로 이동합니다.

    cd frameworks/native
    
  2. 다음 명령을 사용하여 임시 프로젝트를 시작합니다.

    repo start <some-name> .
    
  3. 다음 위치에 있는 변경 목록의 업데이트를 포함하도록 SurfaceFlinger.cpp 편집하세요.

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. 다음 줄을 찾으세요:

    postComposition();
    
  5. 해당 두 줄을 다음으로 바꿉니다.

    postComposition();
    mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f},
                              vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
    updateColorMatrixLocked();
    
  6. 코드를 작성합니다:

    m
    
  7. 기기의 빌드를 업데이트합니다.

    adb root
    adb remount
    adb sync
    adb reboot
    

선택한 장치에서 그림 1에 표시된 것과 유사한 색상 변경이 나타나는지 확인하십시오.

Example of a successful color change

그림 1. 색상 변경 성공 후 화면 모습

코드 테스트

Codelab의 이 부분에서는 소스 트리에 있지만 실패하는 예시 테스트를 활용합니다. 이는 로컬에서 테스트를 실행하고 코드를 테스트하기 위해 Atest를 사용합니다.

테스트를 사용하려면 다음 지침을 따르십시오.

  1. 달리다:

    atest DevCodelabTest
    
  2. 테스트가 실패합니다. 이 문제를 해결하려면 실패한 테스트의 소스 코드를 찾으세요.

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. 그럼 여기를 보세요

    platform_testing/tests/example/devcodelab
    
  4. 편집할 파일을 얻으려면 android.test.example.devcodelab.DevCodelabTest 에서 테스트 이름을 가져와서 . / 사용하면 다음 결과를 얻을 수 있습니다.

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. 그런 다음 편집

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    교체

    Assert.assertTrue(false)
    

    ~와 함께

    Assert.assertTrue(true)
    
  6. 테스트를 다시 실행하여 문제가 해결되었는지 확인하세요.

    atest DevCodelabTest
    

검토를 위해 코드를 업로드하세요.

Repo는 수많은 Git 저장소(또는 프로젝트)에서 동시에 작업할 수 있도록 git clone 과 같은 명령을 번들링하여 Git 사용을 단순화합니다.

Android 소스 코드 작업에 대한 전체 문서 링크와 함께 Git 및 Repo 개요는 소스 제어 도구를 참조하세요. Git 프로젝트의 전체 목록과 각 프로젝트와 연결된 분기에 대한 개별 프로젝트(경로)는 AOSP 저장소를 참조하세요.

Git에서 프로젝트의 코드 검토를 위해 Gerrit 웹 기반 코드 검토 시스템을 사용하게 됩니다.

  1. frameworks/native 프로젝트를 변경했다고 가정하고 다음 명령을 실행하여 업로드하세요.

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
    
  2. 커밋 메시지에 다음을 입력합니다.

    Android codelab change
    Test: manual atest
    
  3. 변경사항을 업로드하세요.

    repo upload
    

성공하면 다음과 유사한 메시지가 표시됩니다.

Upload project frameworks/native/ to remote branch main:
  branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
         ff46b36d android codelab change
to https://android-review.googlesource.com/ (y/N)? y
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote:   https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
remote:
To https://android-review.googlesource.com/platform/frameworks/native
 * [new branch]          codelab -> refs/for/main

Gerrit에서 변경 사항 보기

다음과 유사한 터미널에 인쇄된 링크로 이동합니다.

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

이것으로 Android 플랫폼 개발을 위한 시작 Codelab이 완료되었습니다. 다음 단계는 패치 제출을 참조하고 Android 개발에 대한 자세한 내용은 이 사이트의 나머지 부분을 참조하세요.

변경사항 되돌리기

일반적으로 사후 테스트와 검토 및 승인 후 Gerrit에 변경 사항을 제출하고 저장소에 병합합니다.

대신 이 Codelab의 목적에 따라 Gerrit에서 Abandon을 클릭하여 변경 목록을 되돌립니다.

그런 다음 frameworks/native 프로젝트 디렉터리(또는 해당 하위 디렉터리)에서 연결된 임시 분기를 삭제합니다.

repo abandon codelab .

테스트 파일의 변경 사항을 되돌리는 것도 잊지 마세요. repo start , git commitrepo upload 변경 사항을 수행하지 않았으므로 파일 자체를 재설정할 수 있습니다. aosp/platform_testing directory 에 있다고 가정하고 다음을 사용하여 파일을 재설정하세요.

git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .

이 시점에서 끝났습니다! 잘 하셨어요!

도움 받기

이 Codelab 중에 오류가 발생하면 페이지 하단에 있는 Issue Tracker 링크를 사용하여 보고하세요. 안드로이드 구축 그룹에 질문을 보내세요.