Android 원본 은 Ubuntu 에서 다운로드,컴 파일,설치

앞에서 말 한 몇 권 의 책 을 다 본 후에 리 눅 스 커 널 과 안 드 로 이 드 에 대해 어느 정도 알 게 되 었 습 니 다.마음 이 꿈 틀 거 리 는 것 이 아 닙 니까?소 칼 이 스스로 안 드 로 이 드 소스 코드 를 컴 파일 하려 고 했 습 니까?윈도 시스템 을 사용 하 는 데 익숙 했 지만,안 드 로 이 드 소스 코드 는 윈도 에서 컴 파일 하 는 것 을 지원 하지 않 아 가상 머 신 으로 우 분투 를 설치 한 뒤 안 드 로 이 드 소스 코드 를 다운로드,컴 파일,설치 하기 로 했다.
     환경 준비
     1.디스크 공간 은 20G 정도 남 겨 두 고 메모리 3G 입 니 다.호스트 를 달리 면서 가상 컴퓨터 를 달리 기 때문에 메모리 요구 가 비교적 높 습 니 다.그래 야 유창 합 니 다.
     2.VMWare 7.1.4 설치.제 운영 체 제 는 Win 7 입 니 다.VMWare 버 전 은 새로운 버 전 으로 해 야 합 니 다.이전 버 전의 VMWare 는 네트워크 지원 에 있어 서 비교적 좋 지 않 습 니 다.가상 컴퓨터 에서 Android 소스 코드 를 다운로드 해 야 하기 때문에 네트워크 가 없 으 면 절대 안 됩 니 다.
     3.VMWare 를 설치 한 후 Ubuntu 시스템 을 설치 합 니 다.현재 최신 버 전인 ubuntu-11.04-alternate-i386 을 선택 하 겠 습 니 다.인터넷 에서 찾 아 낸 자 료 는 안 드 로 이 드 소스 코드 를 컴 파일 하려 면 Ubuntu 의 최저 버 전 은 8.04 입 니 다.다운로드 후 설치 할 때 기본 으로 설치 하면 됩 니 다.
     4.Git 도 구 를 설치한다.Android 소스 코드 는 Git 도 구 를 사용 하여 관리 하 는데 SVN 에 비해 분포 식 소스 코드 관리 도구 이 고 SVN 은 집중 적 인 소스 코드 관리 도구 입 니 다.Git 도 구 를 설치 하려 면 Ubuntu 에서 다음 명령 을 실행 하면 됩 니 다.
     USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupg
     5.자바 SDK 를 설치한다.Ubuntu 에서 다음 명령 을 수행 합 니 다.

 USER-NAME@MACHINE-NAME:~$ sudo add-apt-repository ppa:ferramroberto/java
 USER-NAME@MACHINE-NAME:~$ sudo apt-get update
 USER-NAME@MACHINE-NAME:~$ sudo apt-get install sun-java6-jre sun-java6-plugin
 USER-NAME@MACHINE-NAME:~$ sudo apt-get install sun-java6-jdk 
  6.의지 하 는 다른 가방.Ubuntu 에서 다음 명령 을 수행 합 니 다.
  USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
7.디 버 깅 도구.Ubuntu 에서 다음 명령 을 수행 합 니 다.  
  USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind
2.안 드 로 이 드 소스 코드 프로젝트 를 다운로드 합 니 다.
    1.repo 도 구 를 다운로드 합 니 다.Ubuntu 에서 다음 명령 을 수행 합 니 다.

 USER-NAME@MACHINE-NAME:~$ wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
 USER-NAME@MACHINE-NAME:~$ chmod 777 repo
 USER-NAME@MACHINE-NAME:~$ cp repo /bin/
       2.Android 최신 버 전 소스 코드 를 다운로드 합 니 다.Ubuntu 에서 다음 명령 을 수행 합 니 다.

 USER-NAME@MACHINE-NAME:~$ mkdir Android
 USER-NAME@MACHINE-NAME:~$ cd Android
 USER-NAME@MACHINE-NAME:~/Android$ repo init -u https://dl-ssl.google.com/dl/googlesource/git-repo/repo
 USER-NAME@MACHINE-NAME:~/Android$ repo sync
  긴 기다 림 끝 에 안 드 로 이 드 소스 코드 를 다운로드 할 수 있 습 니 다.그 사이 다운로드 가 중 단 된 경우 도 있 을 수 있 으 므 로 repo sync 를 다시 실행 하면 된다.
  3.안 드 로 이 드 소스 코드 를 컴 파일 합 니 다.   
1.컴 파일.Android 디 렉 터 리 에서 다음 명령 을 실행 합 니 다.   
 USER-NAME@MACHINE-NAME:~/Android$ make
   첫 번 째 컴 파일 은 비교적 긴 시간 을 기 다 려 야 합 니 다.컴 파일 이 성공 하면 아래 의 출력 을 볼 수 있 습 니 다.

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
 Install system fs image: out/target/product/generic/system.img
 Target ram disk: out/target/product/generic/ramdisk.img
 Target userdata fs image: out/target/product/generic/userdata.img
 Installed file list: out/target/product/generic/installed-files.txt 
 2.컴 파일 과정 에서 발생 할 수 있 는 문제.  
  문제 1:32 비트 시스템 을 빌 드 하려 고 시도 하고 있 습 니 다.    
              두 곳 에 수정 이 필요 합 니 다.   
              1)build/core 디 렉 터 리 의 main.mk 파일 수정:
    ifeq ($(BUILD_OS),linux)
     build_arch := $(shell uname -m)
     #Change the following line for building on a 32-bit system.
     #ifneq (64,$(findstring 64,$(build_arch)))
     ifneq (i686,$(findstring i686,$(build_arch)))
     $(warning ************************************************************)
     $(warning You are attempting to build on a 32-bit system.)
     $(warning Only 64-bit build environments are supported beyond froyo/2.2.)
            2)다음 파일 찾기:
     /external/clearsilver/cgi/Android.mk
     /external/clearsilver/cs/Android.mk
     /external/clearsilver/java-jni/Android.mk
     /external/clearsilver/util/Android.mk
     LOCAL 수정CFLAGS 와 LOCALLDFLAGS 변수:
     # This forces a 64-bit build for Java6
     # Change the following two lines for building on a 32-bit system.
     # LOCAL_CFLAGS += -m64
     # LOCAL_LDFLAGS += -m64
     LOCAL_CFLAGS += -m32
     LOCAL_LDFLAGS += -m32
문제 2:Undefined reference to`dso_handle'

 external/stlport/src/monetary.cpp:39: undefined reference to `__dso_handle'
out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale.o: In function `__static_initialization_and_destruction_0':
 external/stlport/src/locale.cpp:29: undefined reference to `__dso_handle'
out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o: In function `__static_initialization_and_destruction_0':
 external/stlport/src/locale_impl.cpp:31: undefined reference to `__dso_handle'
out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o: In function `std::_Locale_impl::make_classic_locale()':
 external/stlport/src/locale_impl.cpp:670: undefined reference to `__dso_handle'
 external/stlport/src/locale_impl.cpp:667: undefined reference to `__dso_handle'
out/target/product/vm/obj/SHARED_LIBRARIES/libstlport_intermediates/src/locale_impl.o:external/stlport/src/locale_impl.cpp:604: more undefined
 references to `__dso_handle' follow
 collect2: ld returned 1 exit status 
external/stlport/dll 수정main.cpp,다음 성명 에 가입:

extern "C" {
 void * __dso_handle = 0;
 } 
 4.SDK 를 컴 파일 합 니 다.이 단 계 는 선택 할 수 있 습 니 다.
1.컴 파일.다음 명령 실행:
       USER-NAME@MACHINE-NAME:~/Android$ make sdk 
2.컴 파일 과정 에서 발생 할 수 있 는 문제. 
         질문 1:bios.bin 과 vgabios-cirrus.bin 파일 을 찾 을 수 없습니다.

couldn't locate source file: usr/share/pc-bios/bios.bin
 couldn't locate source file: usr/share/pc-bios/vgabios-cirrus.bin
 여기 usr/share 디 렉 터 리 는~/android/out/host/linux-x86 디 렉 터 리 에 있 는 usr/share 디 렉 터 리 를 말 합 니 다.수정 방법 은~/android/prebuild/common 에 있 는 pc-bios 폴 더 를~/android/out/host/linux-x86/usr/share 로 복사 하면 됩 니 다.   
 USER-NAME@MACHINE-NAME:~/Android$ cp ~/Android/prebuilt/common/pc-bios ~/Android/out/host/linux-x86/usr/share
         질문 2:ddmlib-tests.jar,ninepath-tests.jar,common-tests.jar,sdkuilib-tests.jar 파일 을 찾 을 수 없습니다.
~/android/out/host/linux-x86/framework 이 디 렉 터 리 에서 다음 과 같은 몇 개의 파일 을 찾 을 수 있 습 니 다 common.jar,ddmlib.jar,ninepatch.jar,sdkuilib.jar 이 네 개의 파일 을 각각 복사 하고 이름 을 바 꿀 수 있 습 니 다.이름 을 바 꾸 는 원칙 은 간단 합 니 다.바로 원래 의 이름 뒤에-tests 를 따라 가면 됩 니 다.
5.컴 파일 된 안 드 로 이 드 미 러 를 시 뮬 레이 터 에 설치 합 니 다.
           1.환경 변수 설정:
 USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin  
 USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
그 중에서~/android/out/host/linux-x86/bin 은 우리 가 실행 할 emulator 명령 이 있 고~/android/out/target/product/generic 은 Android 미 러 저장 디 렉 터 리 이 며 아래 에 emulator 명령 을 실행 할 때 사 용 됩 니 다.
2.시 뮬 레이 터 를 실행 합 니 다.
 USER-NAME@MACHINE-NAME:~/Android$ emulator
시 뮬 레이 터 가 실행 되 려 면 Linux Kernel 미 러 zImage 와 Android 미 러 파일 system.img,userdata.img,ramdisk.img 등 네 개의 파일 이 필요 합 니 다.emulator 명령 을 실행 할 때 인자 가 없 으 면 Linux Kernel 미 러 는 기본적으로~/Andreid/prebuild/android-arm/kernel 디 렉 터 리 에 있 는 kernel-qemu 파일 을 사용 합 니 다.Android 미 러 파일 은 기본적으로 ANDROID 를 사용 합 니 다.PRODUCT_OUT 디 렉 터 리 에 있 는 system.img,userdata.img,ramdisk.img,즉 우리 가 방금 컴 파일 한 미 러 문제 입 니 다.
물론,우 리 는 지정 한 미 러 파일 로 시 뮬 레이 터 를 실행 할 수 있 습 니 다.즉,emulator 를 실행 할 때,즉:
USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
  여기까지 시 뮬 레이 터 에서 우리 가 컴 파일 한 안 드 로 이 드 미 러 파일 을 실행 할 수 있 습 니 다.멋 있 지 않 습 니까?그러나 여기 서 말 하 는 안 드 로 이 드 미 러 파일 은 system.img,userdata.img,ramdisk.img 세 파일 만 포함 하고 리 눅 스 커 널 미 러 는 안 드 로 이 드 가 미리 컴 파일 한 kernel-qemu 미 러 를 사용 합 니 다.그렇다면 우리 가 컴 파일 한 Linux Kernel 미 러 를 사용 할 방법 은 없 을 까?답 은 긍정 적 입 니 다.그러면 우 리 는 완전히 자신의 안 드 로 이 드 시스템 을 DIY 할 수 있 습 니 다!다음 글 에서 리 눅 스 커 널 미 러 를 컴 파일 하면 기대 하 세 요~

 PS:메 인 라인 의 최신 소스 코드 는 불안정 버 전 으로 사용 과정 에 문제 가 있 을 수 있 습 니 다.
또한 공식 에서 소스 코드 를 다운로드 하지 못 하면 여기 서 내 릴 수 있 습 니 다.http://zhu.im/Android/
더욱 정식 적 인 소스 코드 컴 파일 방법 은 홈 페이지 를 참고 하 시기 바 랍 니 다.http://source.android.com/source/initializing.html
이상 은 우 분투 에서 안 드 로 이 드 소스 코드 에 대한 다운로드,컴 파일,설치 한 자 료 를 정리 하 는 것 입 니 다.이 과정 에서 많은 문제 가 발생 할 수 있 으 니 주의 하 세 요!

좋은 웹페이지 즐겨찾기