Android 빌드

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

빌드 환경 설정

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

source build/envsetup.sh

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

타겟 선택

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

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

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

============================================
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
============================================

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

lunch product_name-release_config-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의 코드네임) Google 기기의 코드네임 목록은 기기 코드네임을 참고하세요.
  • release_configtrunk_staging라는 개발 출시 구성과 같은 출시 구성으로 설정됩니다. 출시 구성은 기능 출시 플래그 뒤에 있으며 빌드에 사용 설정 또는 사용 중지된 특정 기능과 코드를 식별합니다. 출시 구성에 관한 자세한 내용은 기능 플래그 출시 값 설정을 참고하세요.

  • 문자열의 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를 입력하세요.

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