Android 빌드

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

환경 설정

envsetup.sh 스크립트로 환경을 초기화합니다. source.(점 하나)로 대체하면 사용되는 문자를 줄일 수 있으며 문서에서는 짧은 형식이 더 많이 사용됩니다.

    source build/envsetup.sh
    

또는

    . build/envsetup.sh
    

repo sync를 실행한 후에는 이 명령어를 매번 다시 실행하여 스크립트의 변경사항을 가져와야 합니다.

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

  • lunch - lunch product_name-build_variantproduct_name을 빌드할 제품으로 선택하고, build_variant를 빌드할 변수로 선택하고, 이러한 선택항목을 이후의 m 및 기타 유사한 명령어 호출에서 읽도록 환경에 저장합니다.
  • m - 트리 맨 위에서 빌드를 실행합니다. 이 기능은 하위 디렉터리에서 make을 실행할 수 있기 때문에 유용합니다. TOP 환경 변수 집합이 있으면 해당 변수를 사용합니다. 그렇지 않으면 트리의 맨 위를 찾으려고 현재 디렉터리에서 트리를 찾습니다. 인수없이 m를 실행하여 소스 코드 트리 전체를 빌드하거나 이름을 지정하여 특정 대상을 빌드할 수 있습니다.
  • mma - 현재 디렉터리의 모든 모듈과 종속 항목을 빌드합니다.
  • mmma - 제공된 디렉터리의 모든 모듈과 종속 항목을 빌드합니다.
  • croot - cd 트리의 상단으로 이동합니다.

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

    hmm
    

대상 선택

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

    lunch aosp_arm-eng
    

인수없이 실행하면 lunch 실행 후에 메뉴에서 타겟을 선택하라는 메시지가 표시됩니다. 모든 기존 기기의 빌드 구성은 기기 빌드 선택을 참조하세요.

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

빌드유형 사용
사용자 액세스 제한, 프로덕션에 적합
userdebug 사용자처럼 보이지만 루트 액세스 및 디버그 기능이 있어야 하며 디버깅에 적합합니다.
eng 디버깅 도구가 추가된 개발 구성

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

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

실제 하드웨어에서의 빌드 및 실행에 대한 자세한 내용은 빌드 실행을 참조하세요.

코드 빌드

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

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

    m
    

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

  • droid - m droid는 일반 빌드입니다. 기본 대상에 이름이 필요하기 때문에 이 대상이 여기에 있습니다.
  • all - m allm droid가 하는 모든 것과 droid 태그가 없는 것들을 빌드합니다. 빌드 서버는 이를 실행하여 이 트리에 있고 Android.mk 파일이 있는 모든 것이 빌드되는지 확인합니다.
  • clean - m clean은 이 구성의 모든 출력 파일과 중간 파일을 삭제합니다. 이는 rm -rf out/과 동일한 기능을 합니다.

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

실행해 보세요.

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

빠른 부팅으로 플래싱

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

Android 기기 에뮬레이션

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

    emulator
    

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

잘못된 자바 버전

자바 버전과 일치하지 않는 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를 제거합니다.

Python 버전 3

Repo는 Python 2.x의 특정 기능을 기반으로 하며 Python 3과 호환되지 않습니다. Repo를 사용하려면 Python 2.x를 설치하세요.

    apt-get install python
    

대소문자를 구분하지 않는 파일 시스템

macOS에서 HFS 파일 시스템을 빌드하는 경우 다음과 같은 오류가 발생할 수 있습니다.

    ************************************************************
    You are building on a case-insensitive filesystem.
    Please move your source tree to a case-sensitive filesystem.
    ************************************************************
    

대소문자를 구분하는 디스크 이미지 만들기의 안내를 따르세요.

USB 권한 없음

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

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