- 상위 문서: CyanogenMod
목차
1 강좌를 설명하기 앞서
안드로이드 빌드는 64비트 운영체제에서만 가능하다. 절대로 32비트를 받지 않기를 권장한다.
또한 안드로이드를 빌드할 경우 CPU는 Intel i5 3세대 이상,RAM은 8GB 이상을 권장한다.
이유는 안드로이드를 컴파일 하는데 사용하는 리소스의 양이 장난이 아니기 때문에 (...) 높은 사양을 요구하게 되는 것이다.
2 빌드
아래의 빌드법은 Ubuntu 16.04 LTS 기준으로 제작되었습니다. 또한 CyanogenMod 13 기준으로 작성되어있으니, 추후 새로운 버전이 올라올 경우 문서를 업데이트 하여 주십시오.
2.1 우분투 내려 받기
먼저 우분투 다운로드 서버에서 우분투 16.04 64비트 버전을 다운로드 받는다.
(i386 = 32 비트, amd64 = 64비트이니 참고하자.)
2.2 우분투 설치 후, 시스템 업데이트
우분투 설치가 완료되었다면, 터미널을 켠 뒤 아래의 명령어를 입력한다.
$ sudo apt-get update && sudo apt-get dist-upgrade
(이 명령어를 치면 비밀번호를 요구하는데, 우분투를 설치할 때 설정했던 계정 비밀번호를 입력하면 된다.)
모두 완료되었다면, 한번 재부팅 한다.
2.3 JAVA 설치
재부팅이 완료되었다면, 이제 JAVA를 설치해야 한다.
아래의 두가지 방법 중 빌드할 버전을 확인 후 아래의 가이드에 따라 명령어를 터미널에 입력하자.
- CyanogenMod 7 ~ CyanogenMod 11 빌드 할 경우 (진저브레드 ~ 킷캣)
$ sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java6-installer
- CyanogenMod 12 ~ Cyanogenmod 12.1 (롤리팝)
$ sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
- CyanogenMod 13 ~ (마시멜로~누가)
$ sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
2.4 필수 패키지 설치와 Repo 다운로드 받기
JAVA 설치가 완료되었다면, 빌드에 필요한 필수 패키지를 설치해야 한다.
아래의 명령어를 터미널에 입력하자.
$ sudo apt-get install git ccache automake lzop bison gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven
필수 패키지를 모두 설치했다면, 이제 Repo를 다운로드 받아야 한다.
아래의 명령어를 터미널에 입력한다.
$ mkdir ~/bin && curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod a+x ~/bin/repo
다운로드가 완료되었다면 repo를 어디에서든 작동 시킬 수 있게 해야한다,
그러기 위해서는
$ sudo gedit .bashrcexport PATH=~/bin:$PATH
를 .bashrc의 맨 아래에 추가로 적어준 뒤 저장하고 닫으면 된다.
ccache를 이용하면 빌드시 중복되는 파일은 캐시를 이용하여 시간 단축을 도와준다. 그러나 기본으로 활성되지 않고, 캐시로 인해 용량을 더 소모하거나, 잘못된 캐시를 사용하여 결과에 문제가 있을수 있으므로 사용시 주의를 요한다.
ccache를 켜는 방법은
$ sudo gedit .bashrc
를 입력하면 텍스트 편집기가 표시되며, 문서의 맨 아래로 이동하고
(만약 리눅스 민트,하모니카OS를 사용중이라면 gedit을 xed로 고친다.)
export USE_CCACHE=1export CCACHE_DIR=~/.ccache
를 추가로 적어준뒤 저장하고 닫는다.
그리고 터미널 창을 모두 닫은뒤 새로 하나를 열어서
$ ccache -M 50G
를 입력하고 닫으면 다음 빌드부터 캐시를 사용한 빠른 빌드가 가능하다.
2.5 CyanogenMod 소스 다운로드 및 빌드
아래는 CM13을 빌드하려는 경우를 예시로 들었다. 버전이 다른 경우에는 해당 버전을 대신 입력하자.
다음과 같이 입력한다.
$ mkdir android$ cd android
$ repo init -u git://github.com/CyanogenMod/android.git -b cm-13.0
$ repo sync [-j숫자]
repo sync 에는 -j숫자 옵션이 있으며, 동시에 숫자만큼의 git을 병렬로 실행하여 더 빠르게 다운로드가 가능하다.
자신의 인터넷 회선 속도와 하드디스크(또는 SSD) 의 성능에 맞춰 10 ~ 30 정도 하면 된다.
100Mbps(10MB) 광랜 기준, 15 이면 평균 30분에서 1시간 안에 모두 다운로드 받을 수 있다.
다운로드가 완료되었다면, 이제 빌드를 준비하자.
먼저 Vendor 소스를 내려 받아야 한다.
예시$ git clone https://github.com/TheMuppets/proprietary_vendor_(기기 제조사).git vendor/(기기 제조사) -b cm-13.0
기기 제조사 목록
amazon | Amazon |
asus | ASUS, Google |
audience | |
broadcom | |
elan | |
htc | Google, HTC |
huawei | Google, Huawei |
invensense | |
lge | Google, LG |
motorola | Google, Motorola |
nvidia | Google, Nvidia |
nxp | |
oneplus | OnePlus |
oppo | Oppo |
samsung | Google, Samsung |
sony | Sony |
Vendor 소스는 기기마다 전부 다르다. 디바이스가 해당하는 Vendor 세부 내용을 확인하려면 위의 링크와 나무위키 CyanogenMod 의 공식 지원 기기의 코드네임을 확인하여 위의 예시 명령어의 Vendor 이름에 대입하여 입력하자.
Vendor 소스 다운로드가 완료되었다면, 해당 디바이스의 소스코드를 불러와야 한다.
아래는 예시이다. (device_name)대신 빌드할 기기의 코드네임을 적어야 한다.
예시$ source build/envsetup.sh
$ breakfast (device_name)
위 방법으로 작동하지 않을 경우
$ source build/envsetup.sh$ lunch cm_(device_name)-userdebug
디바이스의 소스코드가 다운로드 되었다면, 이제 빌드를 시작할 차례이다.
아래는 예시이다. (device_name)대신 빌드할 기기의 코드네임을 적어야 한다.
$ source build/envsetup.sh$ lunch cm_(device_name)-userdebug
$ make bacon [-j숫자]
make bacon 은 -j숫자 옵션을 지원하며 동시에 빌드할 병렬 쓰레드의 수를 지정한다.
자신의 컴퓨터 CPU의 논리코어 갯수의 2배 혹은 램 용량(GB단위)중 큰쪽의 수를 넣어주면 안정적으로 빠르게 빌드가 가능하다.
숫자를 높게하면 빠르게 빌드할 수 있지만, 너무 높으면 반대로 빌드 속도가 저하된다.
-j16옵션을 기준으로 i7 3770에 RAM 8GB일 경우 대략 1시간 10분 정도가 소요된다.
새로 빌드를 할 필요가 있을 경우엔 기존의 빌드 결과물을 지우고 작업해야 한다. 오류 등으로 중단된 뒤에 수정하고 이어서 빌드하면 문제가 발생할 수 있으므로 클린작업을 해줘야 한다.
$ make clean