안드로이드 빌드

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Android 빌드를 시작하려면 다음 지침을 따르세요.

환경 설정

envsetup.sh 스크립트를 사용하여 환경을 초기화합니다.

source build/envsetup.sh

또는

. build/envsetup.sh

기기 대상을 선택하기 위한 점심 식사참조 TV 앱 과 같은 번들되지 않은 앱을 빌드하기 위한 타파스 를 포함하여 관련 명령에 대한 설명은 platform/build/envsetup.sh 의 스크립트를 참조하세요.

해당 스크립트에 대한 변경 사항을 선택하려면 모든 repo sync 후 이 명령을 다시 실행해야 합니다. source. (단일 점)은 몇 개의 문자를 절약하며 짧은 형식은 문서에서 더 일반적으로 사용됩니다.

envsetup.sh 스크립트는 이 연습에서 사용된 명령을 포함하여 Android 소스 코드로 작업할 수 있도록 하는 여러 명령을 가져옵니다.

사용 가능한 명령의 전체 목록을 보려면 다음을 실행하십시오.

hmm

대상 선택

점심

lunch 과 함께 구축할 대상을 선택합니다. lunch product_name - build_variantproduct_name 을 빌드할 제품으로 선택하고 build_variant 를 빌드할 변형으로 선택하고 m 및 기타 유사한 명령의 후속 호출에서 읽을 수 있도록 환경에 해당 선택사항을 저장합니다.

정확한 구성을 인수로 전달할 수 있습니다. 예를 들어 다음 명령은 모든 디버깅이 활성화된 에뮬레이터의 전체 빌드를 나타냅니다.

lunch aosp_arm-eng

인수 없이 실행하면 lunch 메뉴에서 대상을 선택하라는 메시지가 표시되지만 메뉴에 모든 가능성이 포함되어 있지는 않습니다. AOSP에서 지원되는 모든 기기의 빌드 구성에 대한 기기 빌드 선택을 참조하거나 작업 중인 기기의 올바른 점심에 대해 팀원과 이야기하세요.

모든 빌드 대상은 BUILD-BUILDTYPE 형식을 취합니다. 여기서 BUILD 는 특정 기능 조합을 참조하는 코드명입니다. BUILDTYPE 은 다음 중 하나입니다.

빌드 유형 사용
사용자 제한된 접근; 생산에 적합
사용자 디버그 사용자와 비슷하지만 루트 액세스 및 디버그 기능이 있습니다. 디버깅에 선호
영어 추가 디버깅 도구를 사용한 개발 구성

userdebug 빌드는 사용자 빌드와 동일하게 작동해야 하며 일반적으로 플랫폼의 보안 모델을 위반하는 추가 디버깅을 활성화할 수 있습니다. 따라서 userdebug 빌드는 더 나은 진단 기능으로 사용자 테스트에 적합합니다. userdebug 빌드로 개발할 때 userdebug 지침 을 따르십시오.

eng 빌드는 플랫폼에서 작업하는 엔지니어의 엔지니어링 생산성을 우선시합니다. eng 빌드는 우수한 사용자 경험을 제공하는 데 사용되는 다양한 최적화를 끕니다. 그렇지 않으면 eng 빌드는 사용자 및 userdebug 빌드와 유사한 동작을 가지므로 기기 개발자는 해당 환경에서 코드가 어떻게 작동하는지 확인할 수 있습니다.

실제 하드웨어에서 빌드하고 실행하는 방법에 대한 자세한 내용은 Flashing Devices 를 참조하십시오.

타파스

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

명령에 대한 자세한 내용을 보려면 tapas help 을 실행하십시오.

코드 작성

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

m 으로 모든 것을 구축하십시오. m-jN 인수로 병렬 작업을 처리할 수 있습니다. -j 인수를 제공하지 않으면 빌드 시스템이 시스템에 최적이라고 생각하는 병렬 작업 수를 자동으로 선택합니다.

m

위에서 설명한 것처럼 m 명령줄에 해당 이름을 나열하여 전체 장치 이미지 대신 특정 모듈을 빌드할 수 있습니다. 또한 m 은 특별한 목적을 위해 몇 가지 의사 대상을 제공합니다. 몇 가지 예는 다음과 같습니다.

  • 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 help 를 실행하여 m 이 제공하는 다른 유사 대상을 확인하십시오.

빌드 실행

에뮬레이터에서 빌드를 실행하거나 기기에서 플래시할 수 있습니다. lunch 과 함께 빌드 대상을 이미 선택했기 때문에 빌드 대상이 아닌 다른 대상에서 실행될 가능성이 없습니다.

빠른 부팅으로 깜박임

장치를 플래싱하려면 성공적인 빌드 후 경로에 포함되어야 하는 fastboot 를 사용하십시오. 지침 은 장치 플래싱을 참조하십시오.

Android 기기 에뮬레이션

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

emulator

빌드 지문 이해

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

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

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

  • API: Android 및 네이티브, 소프트 API 동작
  • 핵심 API 및 일부 시스템 UI 동작
  • CDD에 정의된 호환성 및 보안 요구 사항
  • 예상 요구 사항을 충족하는 장치를 대상으로 앱에서 사용하는 제품 사양 및 사용 기능 설정
  • 하드웨어 및 소프트웨어 구성 요소의 구현

전체 세부 정보는 CDD 를 참조하고 완전히 새로운 Android 기기를 만드는 방법 은 새 기기 추가 를 참조하세요.

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

잘못된 자바 버전

Java 버전과 일치하지 않는 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가 새 구성으로 다시 시작됩니다.