Android 빌드

이 페이지의 안내를 따라 Android를 빌드하세요.

빌드 환경 설정

작업 디렉터리 내에서 envsetup.sh 스크립트를 제공하여 빌드 환경을 설정합니다.

source build/envsetup.sh

이 스크립트는 이 페이지에서 사용된 명령어를 비롯하여 Android 소스 코드를 사용할 수 있도록 하는 여러 명령어를 가져옵니다. 스크립트 소스를 보려면 platform/build/envsetup.sh를 참고하세요. 기본 제공 도움말을 보려면 hmm을 입력하세요.

타겟 선택

Android를 빌드하기 전에 빌드할 타겟 을 식별해야 합니다. 타겟은 빌드 중인 타겟 플랫폼을 반영합니다. 빌드할 타겟을 식별하려면 lunch 명령어 다음에 타겟을 나타내는 문자열을 사용합니다. 예를 들면 다음과 같습니다.

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

타겟 및 빌드 환경의 요약이 표시됩니다.

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================
lunch

타겟을 나타내는 문자열의 형식은 다음과 같습니다.

lunch product_name-release_config-build_variant

이 문자열의 구성요소는 다음과 같습니다.

  • product_name은 빌드하려는 제품의 이름입니다(예: aosp_cf_x86_64_only_phone 또는 aosp_husky). 특정 product_name은 기기의 자체 형식을 따를 수 있지만 Google에서 기기에 사용하는 형식에는 다음과 같은 구성요소가 있습니다.

    • aosp는 Android 오픈소스 플랫폼을 나타냅니다.
    • (선택사항) cf는 타겟이 Cuttlefish 에뮬레이터 내에서 실행되어야 하면 포함됩니다.
    • 아키텍처 및 하드웨어(코드 이름)(예: x86_64_only_phone 또는 Pixel 8 Pro의 코드 이름인 husky) Google 기기의 코드 이름 목록은 기기 코드 이름을 참고하세요.
  • release_config은 개발 출시 구성인 aosp_current과 같은 출시 구성으로 설정됩니다. 출시 구성은 기능 출시 플래그 뒤에 있는 특정 기능과 코드를 식별하며 빌드에 사용 설정되거나 사용 중지됩니다. 출시 구성에 관한 자세한 내용은 기능 플래그 출시 값 설정을 참고하세요.

  • 문자열의 build_variant 부분은 다음 표에 나온 세 값 중 하나일 수 있습니다.

    build_variant 설명
    user 이 빌드 변형은 제한된 보안 액세스 권한을 제공하고
    프로덕션에 적합합니다. userdebug 이 빌드 변형은 기기 개발자가

    개발 중인 버전의 성능과 전력을 이해하는 데 도움이 됩니다. 빌드로 개발할 때는 userdebug 가이드라인을 따르세요.userdebug eng | 이 빌드 변형은 빌드 시간이 더 빠르고, 성능과 전력을 신경 쓰지 않는 경우 일상적인 개발에 가장 적합합니다.

인수 없이 lunch를 실행하면 일반적인 타겟 목록이 제공됩니다. 이 페이지의 정보와 기기 코드 이름에서 특정 Google 하드웨어를 나타내는 코드 이름을 사용하여 타겟 문자열의 요소를 조합하여 자체 타겟 문자열을 만들 수도 있습니다.

현재 타겟 보기

현재 lunch 설정을 보려면 다음을 실행합니다.

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

코드 빌드

다음 명령어를 실행하여 타겟을 빌드하세요. 워크스테이션의 사양에 따라 첫 번째 빌드는 1시간 미만에서 최대 몇 시간까지 걸릴 수 있습니다. 후속 빌드에서는 빌드 시간이 크게 짧아집니다.

m

빌드의 출력은 $OUT_DIR에 표시됩니다. 다른 타겟을 빌드하면 각 타겟 빌드가 $OUT_DIR에 표시됩니다.

m 명령어는 트리 상단에서 빌드되므로 하위 디렉터리 내에서 m을 실행할 수 있습니다. TOP 환경 변수가 설정되어 있으면 m 명령어가 이를 사용합니다. TOP이 설정되어 있지 않으면 m 명령어는 현재 디렉터리에서 트리를 조회하여 트리 상단을 찾으려고 합니다.

m 명령어는 -jN 인수를 사용하여 병렬 작업을 처리할 수 있습니다. -j 인수를 제공하지 않으면 빌드 시스템에서 시스템에 가장 적합한 병렬 작업의 수를 자동으로 선택합니다.

m 명령줄에서 모듈 이름을 나열하여 전체 기기 이미지 대신 특정 모듈을 빌드할 수 있습니다. 또한 m 명령어는 goals라는 의사 타겟을 제공합니다. 예를 들어 m nothing은 아무것도 빌드하지 않지만 빌드 구조를 파싱하고 검증합니다. 유효한 goals 목록을 보려면 m help를 입력하세요.

빌드 오류 문제 해결 (Android 17 이상)

이 섹션에는 빌드 중에 AOSP의 읽기 전용 코드베이스를 수정하려고 할 때 발생하는 읽기 전용 오류를 처리하는 방법이 포함되어 있습니다.

빌드를 시도하면 읽기 전용 파일 시스템 오류가 발생함

빌드 중에 AOSP 소스 트리는 읽기 전용입니다. 실행 중인 빌드가 제품 구성 또는 빌드의 다른 부분에서 소스 트리를 수정하려고 하면 빌드가 실패하고 읽기 전용 파일 시스템 오류를 보고할 수 있습니다. 이러한 옵션을 사용하여 소스 트리를 일시적으로 읽기/쓰기로 변경할 수 있습니다.

  • 빌드 중에 전체 소스 트리를 읽기/쓰기로 변경하려면 빌드 환경에 BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true를 추가합니다.

  • 빌드 중에 트리의 일부를 읽기/쓰기로 변경하려면 BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..."를 사용합니다.

    경로는 작업공간 상단을 기준으로 쓰기가 허용되어야 하는 디렉터리의 경로여야 합니다.

빌드 오류 문제 해결 (8.0 이하)

AOSP 8 이하를 빌드하고 있다면 Java 버전의 문제가 발생할 때 m이 중단될 수 있습니다. 예를 들어 다음 메시지가 표시될 수 있습니다.

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

다음은 가능한 원인과 해결 방법입니다.

  • AOSP 개발 설정(2.3~8.0) JDK 섹션에 지정된 대로 올바른 JDK를 설치하지 못했습니다.
  • 이전에 설치된 다른 JDK가 경로에 표시됩니다. 올바른 JDK를 경로의 맨 앞에 추가하거나 문제가 있는 JDK를 삭제합니다.