사실 AOSP 빌드에 관한 자료는 검색을 이용하면 쉽게 얻을 수 있습니다.
하지만 이번에 ubuntu 14.04 에서 Oreo AOSP를 빌드하려니 딱 맞경우가 없고 사소하지만 골치 아프게 하는 문제가 있어 기록용도로 작성합니다.
ubuntu 18.0x 가 공식배포된 지금 14.04는 퇴물처럼 느껴지나 개발환경이 14.04라고 하는 패키지들이 있어서 개발환경을 14.04로 문서상 명기가 되어 있는 경우 본인만 겪는 이상한 문제를 피하기 위해서 14.04로 결정하고 시작합니다.
기본적인 가이드 문서는 https://source.android.com/setup/build/initializing 인데, 업데이트가 제대로 하지 않는 느낌이 듭니다. 그래서 다들 자기 경험담을 올리는 것이겠죠.
개요를 설명하면
대상확인
다운받을 소스는 https://android.googlesource.com/ 에서 repo를 통해서 AOSP 소스를 받을 수 있으나 정확히 무엇을 받을지는
https://android.googlesource.com/platform/manifest/ 에서 확인하고 결정합니다.
이글을 쓰는 시점에 oreo (Android 8)의 경우 https://android.googlesource.com/platform/manifest/ 에서 확인해보면 android-8.1.0_r53 까지 나와 있습니다.
필요한 패키지 설치
mkdir -p ~/bin
wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P ~/bin
chmod +x ~/bin/repo
AOSP 소스를 받을 git을 포함하여 여러툴을 사용하기 때문에 git을 비롯한 패키지를 설치합니다.
sudo apt-get install openjdk-8-jdk android-tools-adb bc bison build-essential curl flex g++-multilib gcc-multilib gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc yasm zip zlib1g-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
옵션으로 빌드속도를 개선하기 위해서 CCACHE를 사용하는 방법이 있습니다.
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 15G
위와 같이 하면 Cache가 설정이 됩니다. 15Gbyte짜리 Disk Cache가 생성된다.
하지만 이번에 ubuntu 14.04 에서 Oreo AOSP를 빌드하려니 딱 맞경우가 없고 사소하지만 골치 아프게 하는 문제가 있어 기록용도로 작성합니다.
ubuntu 18.0x 가 공식배포된 지금 14.04는 퇴물처럼 느껴지나 개발환경이 14.04라고 하는 패키지들이 있어서 개발환경을 14.04로 문서상 명기가 되어 있는 경우 본인만 겪는 이상한 문제를 피하기 위해서 14.04로 결정하고 시작합니다.
기본적인 가이드 문서는 https://source.android.com/setup/build/initializing 인데, 업데이트가 제대로 하지 않는 느낌이 듭니다. 그래서 다들 자기 경험담을 올리는 것이겠죠.
개요를 설명하면
- 다운받을 소스를 확인
- 필요한 패키지를 설치
- 소스를 다운
- 빌드
대상확인
다운받을 소스는 https://android.googlesource.com/ 에서 repo를 통해서 AOSP 소스를 받을 수 있으나 정확히 무엇을 받을지는
https://android.googlesource.com/platform/manifest/ 에서 확인하고 결정합니다.
이글을 쓰는 시점에 oreo (Android 8)의 경우 https://android.googlesource.com/platform/manifest/ 에서 확인해보면 android-8.1.0_r53 까지 나와 있습니다.
필요한 패키지 설치
mkdir -p ~/bin
wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P ~/bin
chmod +x ~/bin/repo
AOSP 소스를 받을 git을 포함하여 여러툴을 사용하기 때문에 git을 비롯한 패키지를 설치합니다.
sudo apt-get install openjdk-8-jdk android-tools-adb bc bison build-essential curl flex g++-multilib gcc-multilib gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc yasm zip zlib1g-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
구문상 겹치는게 일부있지만 가이드랑 다른 사용자 경험과을 모두 반영해서 두 구문 모두 실행하여 패키지를 설치합니다.
소스다운
AOSP 소스를 다운 및 빌드할 디렉토리를 지정한다.
빌드시 250GB 이상 필요하고 여유가 된다면 더 많이 지정했으면 합니다.
빌드시간 단축을 생각한다면 SSD 매체로 코드를 다운로드 하는것이 좋습니다.
mkdir -p /work/oreo cd /work/oreo
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r53 --depth=1
~/bin/repo sync
소스다운
AOSP 소스를 다운 및 빌드할 디렉토리를 지정한다.
빌드시 250GB 이상 필요하고 여유가 된다면 더 많이 지정했으면 합니다.
빌드시간 단축을 생각한다면 SSD 매체로 코드를 다운로드 하는것이 좋습니다.
mkdir -p /work/oreo cd /work/oreo
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r53 --depth=1
~/bin/repo sync
위와 같이 repo를 이용해서 소스를 다운받는다.
옵션으로 빌드속도를 개선하기 위해서 CCACHE를 사용하는 방법이 있습니다.
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 15G
위와 같이 하면 Cache가 설정이 됩니다. 15Gbyte짜리 Disk Cache가 생성된다.
Oreo AOSP 부터 등장한 java package server가 있습니다. jack 서버의 동작중 오류가 종종 발생합니다. jack서버가 사용할 메모리나 CPU (thread) 설정이 주요한 문제 원인이 됩니다.
메모리 설정은
처럼 환경변수를 통해 지정 할 수 있고
$HOME/.jack-server/config.properties
jack.server.max-service=4
jack.server.max-server=2
jack서버을 위한 설정파일의 경우 unix에서는 권한과 심각한 관련이 있었습니다.
이 파일에 쓰기 속성이 있다면 에러가 발생합니다.
chmod 600 $HOME/.jack-server/config.properties
으로 권한을 ssh id처럼 권한을 조정하고
---
AOSP가 6.0 이하라면
Make 3.81 과 JDK 7.0를 사용해야하는데 JAVA downgrade하는게 만만치 않다.
이런 타켓이라면 12.04 환경에서 하는게 좋을것 같다.
export ANDROID_JACK_VM_ARGS="-Xmx8g -Dfile.encoding=UTF-8 -XX:+TieredCompilation"
처럼 환경변수를 통해 지정 할 수 있고
동작하는 server 갯수는 파일에서 설정할 수 있습니다.
jack.server.max-service=4
jack.server.max-server=2
jack서버을 위한 설정파일의 경우 unix에서는 권한과 심각한 관련이 있었습니다.
이 파일에 쓰기 속성이 있다면 에러가 발생합니다.
chmod 600 $HOME/.jack-server/config.properties
으로 권한을 ssh id처럼 권한을 조정하고
가이드 문서대로
source build/ennsetup.sh
lunch xxxxx
make -jN
N이 너무 크면 fail이 발생합니다. N은 가용한 core 수의 절반을 지정합니다.
N이 너무 크면 fail이 발생합니다. N은 가용한 core 수의 절반을 지정합니다.
가용한 cpu수는 nproc 라고 console에서 입력시 확인할 수 있습니다.
cpu가 8라면 4로 지정하는것을 권장합니다.
---
AOSP가 6.0 이하라면
Make 3.81 과 JDK 7.0를 사용해야하는데 JAVA downgrade하는게 만만치 않다.
이런 타켓이라면 12.04 환경에서 하는게 좋을것 같다.
댓글