[출처 : 비즈페이님]
[Intro]
현재 발표된 Android 버전은 1.5입니다.
Android 1.5버전을 Android Dev Phone 1에 올리기 위해
HTC에서 제공해주는 이미지를 올릴 수도 있지만,
직접 소스를 빌드 한 후에 올릴 수도 있겠죠.
http://www.htc.com/www/support/android/adp.html
저 링크를 따라가 보면 HTC에서 1.5버전의 이미지를 제공해 주는 것을 볼 수 있습니다.
Radio Image, System Image, Recovery Image 세개가 제공이 되는데,
반드시 Radio Image를 먼저 업데이트 하고 나머지를 업데이트 해야 합니다.
업데이트 절차는 상세하게 나와 있으니 그대로 따라 하면 됩니다.
Radio Image안에는 radio.img가 들어 있고,
System Image안에는 boot.img, recovery.img, system.img, userdata.img 파일이 들어 있습니다.
radio.img는 소스로 빌드 할 수 없는 부분이기 때문에
반드시 제공되는 이미지로 업데이트를 해야 합니다.
그리고 하는 김에 System Image도 같이 해줍시다.
소스로 빌드할껀데 어째서 제공되는 이미지를 먼저 업데이트 해야 하는가에 대해서는 뒤에 나옵니다.
일단은 모두 업데이트 해주세요.
[Get Source]
일단 소스를 받아 봅시다.
http://source.android.com/download
설명이 친절하기 때문에 굳이 여기에 다시 쓸 필요는 없죠.
일단 Windows에서 빌드는 지원하지 않으니 Windows에서 빌드하고 싶으신 분은 구글에서 검색을...
그냥 받으면 master branch를 받게 됩니다.
우리가 원하는 브랜치는 android-1.5r2 이니까 repo init 할 때
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.5r2
요렇게 해주면 android-1.5r2 브랜치의 소스를 받게 됩니다.
마지막으로 repo sync 해주게 되면 소스를 죽죽 받아옵니다.
거의 1GB의 용량이기 때문에 의외로 오래 걸립니다. 기다립시다.
[Building for Dream]
소스를 다 받았다면, 이것만으로 SDK를 만들어 내서 사용할 수 있습니다.
하지만 Android Dev Phone 1에는 올릴 수가 없죠.
디바이스에 맞는 라이브러리가 필요합니다.
그 파일들은 아래에서 찾을 수 있습니다.
http://source.android.com/documentation/building-for-dream
이 역시 Android Open Source Project에서 제공해 주는 방법대로 하면 됩니다.
하지만 local_manifest.xml를 만들때 조금 바꿔 줘야 할 부분이 있습니다.
Android 1.5의 커널 버전은 2.6.27이기 때문에 처음 kernel의 revision 부분을 바꿔야 하죠.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="kernel/common"/>
<project path="kernel" name="kernel/msm"
revision="refs/heads/android-msm-2.6.27"/>
<project path="vendor/htc/dream" name="platform/vendor/htc/dream"
revision="cupcake"/>
<project path="hardware/msm7k" name="platform/hardware/msm7k"
revision="refs/heads/master"/>
</manifest>
위와 같이 local_manifest.xml을 만들면 되죠.
repo sync도 하고 buildspec.mk 파일도 만들고 나면 Open Project에서 소개하는 방법은 끝입니다.
하지만 저대로 빌드하게 되면 커다란 문제들이 발생 합니다.
[Problems]
저대로 빌드하면 일단 사운드가 안나오고 각종 센서들이 안돌아 갑니다.
한마디로 뭔가 라이브러리가 빠진겁니다.
소스를 받았다면 /vendor/htc/dream 이라는 디렉토리로 이동해 봅시다.
이곳에 extract-files.sh 라는 파일이 있을 겁니다.
이 파일은 다름이 아니라 Android Dev Phone 1에서 파일을 뽑아내는 일을 합니다.
adb pull 명령을 사용하여 소스에서 빌드되지 않는 라이브러리들을 소스안으로 가져 오는 것이죠.
The Dream device software contains some proprietary binaries. For contractual reasons, these cannot be redistributed separately from the shipping hardware, but the provided script may be used to extract these binaries from your development device so that they can be correctly included in your build. These libraries include the openGL|ES library, the Qualcomm camera library, the HTC Radio Interface Library, etc.
Open Project의 Building for Dream 부분에 적힌 설명 입니다.
"꼭 필요하지만 재배포 할 수 없으니 복사해서 쓰세요." 라고 요약 할 수 있습니다.
하지만 사운드와 관련된 라이브러리와 센서에 대한 라이브러리 등등은 가져오지 않습니다.
그래서 소스만 받고나서 빌드 해봤자 각종 하드웨어가 먹통이 되어 버립니다.
[Patch]
그래서 열심히 연구해 봤습니다.
데체 어찌하여 소리가 안나는 것인가 연구하던 중 뜻밖의 사실을 발견 하게 됩니다.
libhtc_acoustic.so 파일에 대해서 찾아 보던 중, 한 블로그에서 패치가 있다는 것을 알게 된 것이죠.
그리고 패치에 대해서 알아 보던 중,
많은 사람들이 Code Review를 통해 Contribute 한다는 사실도 알게 되었습니다.
https://review.source.android.com
이곳에 가면 Gerrit Code-Review Tool을 통해 어떤 내용들이 패치가 되었는지 알 수 있죠.
우리가 적용할 패치는 10501번 패치 입니다.
리뷰 사이트에서 확인해 보셔도 됩니다. 매우 상세하게 나와있죠.
repo download platform/vendor/htc/dream 10501
요렇게 한번 해주게 되면 extract-files.sh 파일과 AndroidBoard.mk 파일을 업데이트 하게 됩니다.
[Building for Dream Really]
이제 정말로 빌드할 차례 입니다.
일단 패치까지 다 받고 나면 USB를 통해 Host와 Target을 연결하고
extract-files.sh를 실행 시켜 줍니다.
필요한 파일들을 추출하고 난 뒤 make하면 끝! 입니다.
[Outro]
알기전에는 참 어렵지만 알고나면 쉽습니다.
그리고 이건 제가 어딜가든지 찾지 못했던 방법입니다.
이 방법을 찾은건 거의 기적이라고 볼 수 있습니다.
특히 패치 하는 명령어를 가지고 검색해보면 구글에 달랑 하나 뜰 정도로 알려지지 않은 방법 입니다.
저와 같은 문제로 고민 하셨던 분들에게 한줄기 빛이 되었으면 합니다.




