Computer >> 컴퓨터 >  >> 문제 해결 >> Android

AOSP로 나만의 안드로이드 커스텀 ROM 빌드하는 방법 완벽 가이드

AOSP로 안드로이드 커스텀 ROM 빌드하기

안드로이드 폰 루팅이나 커스텀 ROM 설치에 익숙하다면 한 번쯤 궁금했을 것입니다. 한때 큰 인기를 누렸던 CyanogenMod와 그 후속작인 LineageOS는 대체 어떻게 만들어지는 걸까요? 맞춤형 ROM을 개발하는 데는 과연 얼마나 많은 작업이 필요할까요?

이 가이드에서는 직접 안드로이드 커스텀 ROM을 개발하는 기본 과정을 단계별로 살펴봅니다. 다만 이 작업은 결코 만만치 않습니다. 코딩 경험이나 리눅스 터미널 사용 경험이 전혀 없다면, 본격적으로 시작하기 전에 관련 지식을 먼저 쌓아두는 것이 좋습니다. 최소한의 기본 개념이라도 갖추고 있다면 최대한 쉽게 설명해 드리겠으니 함께 따라와 보세요.

핵심은 원시(raw) 안드로이드 소스 코드인 AOSP를 내려받아 원하는 대로 수정하는 것입니다. 기기마다 활용할 수 있는 소스가 매우 다양하지만, 이 가이드에서는 AOSP(Android Open Source Project)라고 불리는 마스터(master) 소스를 기준으로 진행합니다.

그런데 AOSP에는 중요한 특징이 있습니다. 순수 소스 코드에는 기기별 하드웨어 바이너리가 포함되어 있지 않다는 점입니다. 쉽게 말해, 카메라나 GPU 같은 하드웨어는 AOSP만으로는 "바로 동작하지 않는다"는 뜻입니다. 실제로 이러한 하드웨어 바이너리가 없으면 기기 자체가 부팅조차 되지 않습니다.

구글 브랜드 폰(Pixel, Nexus 등)을 대상으로 개발한다면 하드웨어 바이너리를 구글에서 바로 받을 수 있으며, 이 가이드에서도 해당 바이너리를 구하고 ROM에 빌드하는 과정을 안내합니다. 반면 삼성, 소니 같은 타사 폰용 ROM을 개발하려면… 솔직히 말씀드리자면 훨씬 고된 여정이 기다리고 있습니다.

일부 제조사는 자체 오픈소스 프로젝트나 개발자용 도구를 공개하고 있지만, 어떤 제조사는 독점 코드를 철저히 감춥니다. 주요 제조사들의 오픈소스 프로젝트 목록은 아래와 같습니다:

  • 삼성 오픈소스 릴리즈 센터(Samsung Open Source Release Center)
  • 소니 디벨로퍼 월드(Sony Developer World)
  • 레노버 서포트(Lenovo Support)
  • 화웨이 오픈소스 릴리즈 센터(Huawei Open Source Release Center)
  • 모토로라 개발자(Motorola Developers)

준비가 끝났으니, 이제 가장 기본적인 순정 안드로이드 환경을 구글 Pixel 기기용으로 빌드한다고 가정하고 진행하겠습니다. 이 과정을 익혀두면 이후 스스로 확장하여 특정 제조사 ROM의 커스텀 버전도 개발할 수 있습니다.

이 가이드에 필요한 준비물

  • Android Open Source Project(AOSP)
  • Pixel XL 폰 또는 리눅스용 안드로이드 에뮬레이터
  • 64비트 리눅스 운영체제 — 초보자에게는 Ubuntu나 Linux Mint가 적합하며, BBQLinux는 안드로이드 개발자를 위해 특별히 만들어진 배포판입니다.
  • Python
  • 충분한 성능의 PC (코드 컴파일에는 많은 메모리와 저장 공간이 필요합니다!)

빌드 환경 설정하기

먼저 리눅스 머신에 안드로이드 에뮬레이터를 설정하겠습니다. Pixel XL 기기를 보유하고 있더라도, 새로 만든 ROM을 실제 기기에 플래싱하기 전에 에뮬레이터에서 먼저 테스트하는 것이 항상 안전합니다. 필자가 선호하는 에뮬레이터는 Genymotion이므로 이를 설치하는 과정을 안내하겠습니다. 물론 "최고의 안드로이드 에뮬레이터" 가이드를 참고해 다른 에뮬레이터를 선택해도 좋습니다. 대부분 리눅스를 지원합니다.

Genymotion 웹사이트에 접속해 계정을 등록하고, 이메일 인증을 마친 뒤 실행 파일을 리눅스 데스크톱에 내려받습니다.

리눅스 터미널을 열고 아래 명령어를 입력합니다:

chmod +x genymotion-xxxxx.bin (파일명의 xxxx는 버전 번호로 교체)
./genymotion-xxxxxx.bin

Y를 눌러 Genymotion 디렉터리를 생성합니다. 그다음 터미널에 입력합니다:

cd genymotion && ./genymotion

설치를 시작하라는 메시지가 표시되면, Add Virtual Devices 창이 나올 때까지 Next를 클릭합니다. Device Model 옵션에서 "Pixel XL"을 선택하고 설치를 완료합니다. 원한다면 가상 기기를 바로 테스트해볼 수 있는데, 사실상 데스크톱 위에 Pixel XL 폰이 있는 것과 같습니다.

이제 Python을 설정합니다:

$ apt-get install python

다음은 리눅스 머신에 JDK(Java Development Kit)를 설치합니다. 터미널에 아래 명령어를 입력하세요:

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk

이제 USB 장치 접근을 허용하도록 리눅스 시스템을 구성해야 합니다. 터미널에서 다음 코드를 실행합니다:

AOSP로 나만의 안드로이드 커스텀 ROM 빌드하는 방법 완벽 가이드

이 명령은 앞서 언급한 USB 장치 접근을 가능하게 하는 51-android.txt 파일을 내려받습니다. 해당 .txt 파일을 열어 본인의 리눅스 사용자 이름을 추가한 후, 루트(root) 사용자 권한으로 아래 위치에 파일을 넣습니다. AOSP로 나만의 안드로이드 커스텀 ROM 빌드하는 방법 완벽 가이드 이후 기기를 USB로 컴퓨터에 연결하면 새 규칙이 자동으로 적용됩니다.

안드로이드 소스 내려받기

AOSP는 Git으로 호스팅되므로, Git과 통신하기 위해 Repo라는 도구를 사용합니다.

먼저 홈 디렉터리에 /bin 폴더를 생성합니다. 터미널에 아래 명령어를 입력하세요:

$ mkdir ~/bin
$ PATH=~/bin:$PATH

이제 Repo 도구를 내려받습니다:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Repo 설치가 끝나면 작업 파일을 담을 빈 디렉터리를 생성해야 합니다:

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY

이제 Git에 이름과 이메일 주소를 설정합니다. 정기적으로 확인하는 Gmail 주소를 사용하세요. 그렇지 않으면 Gerrit 코드 리뷰 도구를 사용할 수 없습니다.

$ git config --global user.name "Your Name"
$ git config --global user.email you@gmail.com

이제 Repo에게 AOSP의 최신 master 매니페스트를 Git에서 가져오도록 지시합니다:

$ repo init -u https://android.googlesource.com/platform/manifest

성공하면 작업 디렉터리에 Repo가 초기화되었다는 메시지가 표시되며, 클라이언트 디렉터리 안에 ".repo" 디렉터리가 생성됩니다. 이제 안드로이드 소스 트리를 내려받습니다:

$ repo sync

안드로이드 소스 빌드하기

드디어 이 가이드 초반에 언급한 하드웨어 바이너리가 등장할 차례입니다. AOSP 드라이버 페이지로 이동해 Android 7.1.0(NDE63P)용 Pixel XL 바이너리를 내려받습니다. 벤더 이미지와 하드웨어 구성 요소 두 가지를 모두 내려받아야 합니다. 압축 아카이브 형태로 제공되므로 데스크톱에 압축을 해제하고, 루트 폴더에서 자동 압축 해제 스크립트를 실행합니다. 바이너리 설치 위치로는 앞서 생성한 WORKING_DIRECTORY의 루트를 지정합니다.

이제 터미널에 입력합니다:

$ make clobber
$ source build/envsetup.sh

빌드할 타깃을 선택합니다:

$ lunch aosp_marlin-userdebug
$ setpaths
$ make –j4

이것으로 소스 코드로부터 안드로이드 ROM을 성공적으로 "빌드"했습니다! 이제 에뮬레이터에서 테스트해 보겠습니다. 터미널에 입력하세요:

$ emulator

에뮬레이터에서 잠시 둘러보세요. 순수한 순정 안드로이드 경험이 얼마나 미니멀한지 확인할 수 있을 겁니다. 바로 이 때문에 제조사들이 AOSP를 자사에 맞게 커스터마이징하는 것입니다. 물론 방금 빌드한 ROM을 실제 기기에 플래싱할 수도 있지만, 별도의 기능 추가 없이는 지루한 순정 안드로이드 그대로일 뿐입니다.

그래서 제조사들은 일반적으로 AOSP를 포크(fork)한 뒤, 자체 독점 바이너리를 추가하고 UI를 커스터마이징하며 부팅 로고를 넣는 등의 작업을 진행합니다. 즉, 제조사들은 기본적으로 순정 안드로이드 ROM 위에 자신들만의 색을 입히는 것입니다. 여러분의 다음 목표 역시 바로 이것입니다.

다음 편에서는 직접 만든 ROM에 폰트, 테마, 부팅 애니메이션을 추가하는 방법을 다룹니다. 기대해 주세요!