Android 빌드

다음 안내에 따라 Android 빌드를 시작합니다.

환경 설정

다음과 같이 envsetup.sh 스크립트로 환경을 초기화합니다.

source build/envsetup.sh

또는

. build/envsetup.sh

기기 타겟 선택을 위한 lunch 및 번들되지 않은 앱(예: 참조 TV 앱) 빌드를 위한 tapas를 비롯한 관련 명령어 설명은 platform/build/envsetup.sh의 스크립트를 참고하세요.

repo sync를 실행한 후에는 이 명령어를 매번 다시 실행하여 스크립트의 변경사항을 가져와야 합니다. source.(점 하나)로 대체하면 사용되는 문자를 줄일 수 있으며 문서에서는 짧은 형식이 더 많이 사용됩니다.

envsetup.sh 스크립트는 이 실습에 사용된 명령어를 포함하여 Android 소스 코드로 작업할 수 있는 몇 가지 명령어를 가져옵니다.

사용 가능한 명령어의 전체 목록을 보려면 다음을 실행합니다.

hmm

타겟 선택

lunch

lunch를 사용하여 빌드할 타겟을 선택합니다. lunch product_name-build_variant는 빌드할 제품으로 product_name을 선택하고 빌드할 변형으로 build_variant를 선택하며, 이러한 선택항목을 이후의 m 및 기타 유사한 명령어 호출에서 읽을 수 있도록 환경에 저장합니다.

정확한 구성은 인수로 전달될 수 있습니다. 예를 들어, 다음 명령어는 모든 디버깅을 사용하는 상태에서 에뮬레이터의 전체 빌드를 참조합니다.

lunch aosp_arm-eng

인수 없이 실행하면 lunch 실행 후에 메뉴에서 타겟을 선택하라는 메시지가 표시되지만 메뉴에 모든 선택 항목이 포함되어 있지는 않습니다. 기기 빌드 선택을 참고하여 AOSP에서 지원하는 모든 기기의 빌드 구성을 알아보거나 작업 중인 기기의 올바른 lunch와 관련해 팀원과 논의하세요.

모든 빌드 타겟이 BUILD-BUILDTYPE 양식을 사용합니다. 여기에서 BUILD는 특정 기능 조합을 참조하는 코드명입니다. BUILDTYPE은 다음 중 하나입니다.

Buildtype 용도
user 액세스 제한, 프로덕션에 적합
userdebug user 빌드와 유사하지만 루트 액세스 및 디버그 기능이 있으며 디버깅에 적합
eng 디버깅 도구가 추가된 개발 구성

userdebug 빌드는 user 빌드와 동일하게 작동해야 하며 일반적으로 플랫폼의 보안 모델을 위반하는 추가 디버깅을 사용할 수 있습니다. 이로 인해 userdebug 빌드는 뛰어난 진단 기능으로 사용자 테스트에 적합합니다. userdebug 빌드를 사용하여 개발할 때는 userdebug 가이드라인을 따르세요.

eng 빌드는 플랫폼에서 작업하는 엔지니어의 엔지니어링 생산성을 우선적으로 적용합니다. eng 빌드는 탁월한 사용자 환경을 제공하는 데 사용되는 다양한 최적화 기능을 사용 중지합니다. 그러지 않으면 eng 빌드는 useruserdebug 빌드와 유사하게 동작하므로 기기 개발자가 이러한 환경에서 코드가 어떻게 동작하는지 확인할 수 있습니다.

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

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

실제 하드웨어에서의 빌드 및 실행에 관한 자세한 내용은 기기 플래싱을 참고하세요.

tapas

tapas 명령어는 번들되지 않은 앱의 빌드를 구성합니다. Android 빌드 시스템에서 빌드할 개별 앱을 선택합니다. lunch와 달리 tapas는 기기의 이미지 빌드를 요청하지 않습니다.

명령어에 관해 자세히 알아보려면 tapas help를 실행하세요.

코드 빌드

이 섹션은 설정이 완료되었는지 확인하기 위한 간단한 요약입니다.

m으로 모든 것을 빌드하세요. m-jN 인수로 병렬 작업을 처리할 수 있습니다. -j 인수를 제공하지 않으면 빌드 시스템에서 시스템에 가장 적합한 병렬 작업의 수를 자동으로 선택합니다.

m

위에서 설명한 것처럼 m 명령줄에 이름을 나열하여 전체 기기 이미지 대신 특정 모듈을 빌드할 수 있습니다. 또한 m은 특수 목적을 위해 일부 pseudotarget을 제공합니다. 다음은 관련 예입니다.

  • droid - m droid는 일반 빌드입니다. 기본 타겟에 이름이 필요하기 때문에 이 타겟이 여기에 있습니다.
  • all - m allm droid가 하는 모든 것과 droid 태그가 없는 모든 것을 빌드합니다. 빌드 서버는 이를 실행하여 이 트리에 있고 Android.mk 파일이 있는 모든 것이 빌드되는지 확인합니다.
  • m - 트리 맨 위에서 빌드를 실행합니다. 이 기능은 하위 디렉터리에서 make을 실행할 수 있기 때문에 유용합니다. TOP 환경 변수 집합이 있으면 이 변수를 사용합니다. 그렇지 않으면 트리의 맨 위를 찾으려고 현재 디렉터리에서 트리를 조회합니다. 인수 없이 m를 실행하여 소스 코드 트리 전체를 빌드하거나 이름을 지정하여 특정 타겟을 빌드할 수 있습니다.
  • mma - 현재 디렉터리의 모든 모듈과 종속 항목을 빌드합니다.
  • mmma - 제공된 디렉터리의 모든 모듈과 종속 항목을 빌드합니다.
  • croot - 트리의 상단으로 이동(cd)합니다.
  • clean - m clean은 이 구성의 모든 출력 파일과 중간 파일을 삭제합니다. 이는 rm -rf out/과 동일한 기능을 합니다.

m이 제공하는 다른 pseudotarget을 보려면 m help를 실행합니다.

빌드 실행

빌드를 에뮬레이터에서 실행하거나 기기에서 플래싱할 수 있습니다. 이미 빌드 타겟을 lunch로 선택했기 때문에 빌드 타겟과 다른 타겟에서 실행될 가능성은 낮습니다.

빠른 부팅으로 플래싱

기기를 플래시하려면 fastboot를 사용하세요. 빌드에 성공하면 경로에 포함됩니다. 안내는 기기 플래싱을 참고하세요.

Android 기기 에뮬레이션

에뮬레이터는 빌드 프로세스 중에 경로에 자동으로 추가됩니다. 에뮬레이터를 실행하려면 다음을 입력합니다.

emulator

빌드 지문 이해

특정 Android 빌드와 관련된 문제를 추적하고 보고하려면 빌드 지문을 이해하는 것이 중요합니다. 빌드 지문은 각 빌드에 발행된 제조업체 정보를 포함하며 사람이 읽을 수 있는 고유한 문자열입니다. 정확한 구문은 Android 호환성 정의 문서(CDD)의 빌드 매개변수 섹션 내 지문 설명을 참고하세요.

빌드 지문은 특정 Android 구현 및 버전을 나타냅니다. 이 고유 키를 사용하면 앱 개발자와 다른 사용자가 특정 펌웨어 버전의 문제를 보고할 수 있습니다. Android 문제 보고 프로세스는 버그 신고를 참고하세요.

빌드 지문은 모든 Android 구현 세부정보를 캡슐화합니다.

  • API: Android와 네이티브, 소프트 API 동작 포함
  • 핵심 API 및 일부 시스템 UI 동작
  • CDD에 정의된 호환성 및 보안 요구사항
  • 앱에서 요구사항을 충족하는 기기를 타겟팅하는 데 사용되는 제품 사양 및 uses-feature 설정
  • 하드웨어 및 소프트웨어 구성요소 구현

자세한 내용은 CDD를 참고하고 완전히 새로운 Android 기기를 만드는 방법은 새 기기 추가를 참고하세요.

일반적인 빌드 오류 문제 해결

잘못된 자바 버전

자바 버전과 일치하지 않는 Android 버전을 빌드하려는 경우 다음과 같은 메시지와 함께 make가 중단됩니다.

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

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

  • JDK 요구사항에 지정된 대로 올바른 JDK를 설치하지 못했습니다. 환경 설정타겟 선택의 단계를 따랐는지 확인합니다.
  • 이전에 설치한 다른 JDK가 경로에 표시됩니다. 올바른 JDK를 경로의 맨 앞에 추가하거나 문제가 있는 JDK를 삭제합니다.

USB 권한 없음

대부분의 Linux 시스템에서는 기본적으로 권한이 없는 사용자가 USB 포트에 액세스할 수 없습니다. 권한 거부 오류가 표시된다면 USB 액세스 구성의 안내를 따르세요.

ADB가 이미 실행 중이며 규칙을 설정한 후 기기에 연결할 수 없으면 adb kill-server를 사용하여 종료할 수 있습니다. 이 명령어를 실행하면 ADB가 새 구성으로 다시 시작됩니다.