Android 빌드

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

빌드 환경 설정

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

source build/envsetup.sh

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

타겟 선택

Android를 빌드하려면 빌드 타겟을 식별해야 합니다. 빌드 타겟을 식별하려면 lunch 명령어 뒤에 타겟 제품과 빌드를 식별하는 target을 사용합니다.

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

현재 타겟 보기

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

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

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

lunch product_name-release-build_variant

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

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

    • aosp는 Android 오픈소스 플랫폼을 나타냅니다.
    • (선택사항) cf는 타겟이 Cuttlefish 에뮬레이터 내에서 실행되어야 하면 포함됩니다.
    • 아키텍처 및 하드웨어(예: x86_64_phone 또는 husky(Pixel 8 Pro))
  • releasetrunk-staging으로 설정됩니다.

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

    build_variant 설명
    user 이 빌드 변형은 제한된 보안 액세스 권한을 제공하고 프로덕션에 적합합니다.
    userdebug 이 빌드 변형은 기기 개발자가 개발 중인 버전의 성능과 전력을 이해하는 데 도움이 됩니다. userdebug 빌드로 개발할 때는 userdebug 가이드라인을 따르세요.
    eng 이 빌드 변형은 빌드 시간이 더 빠르고, 성능과 전력을 신경 쓰지 않는 경우 일상적인 개발에 가장 적합합니다.

코드 빌드

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

$ m

표시되는 첫 번째 출력은 다음과 같이 타겟과 빌드 환경의 개요입니다.

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

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

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

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

빌드 오류 문제 해결(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를 삭제합니다.