안드로이드 프레임워크 프로그래밍(3) [NEXUS5에 소스 빌드하기]

 지난 포스팅에서 안드로이드 소스코드를 다운 받은 후 이를 컴파일하는 방법에 대해 알아보았습니다. 이번 포스팅에서는 소스코드를 직접 기기에 빌드하는 과정에 대해 알아보도록 하겠습니다. 작업 환경은 다음과 같습니다.


안드로이드 기기    : LG NEXUS5

빌드 버전               : Android 4.4.4(r2)

컴퓨터 운영체제    : Ubuntu 12.04(64비트)

JDK Version        : Oracle JDK 1.6


1. 자신의 안드로이드 기기에 빌드하고자 하는 안드로이드 소스코드를 다운로드 받습니다. 이 과정은 이전 포스팅을 통해 진행하실 수 있습니다.

http://elecs.tistory.com/56

본 포스팅에서 안드로이드 소스코드를 설치한 폴더는 아래와 같습니다.

~/kitkat


2. 다운로드가 완료되었다면 소스코드 빌드 환경을 초기화 합니다.

$ cd ~/kitkat

$ source build/envsetup.sh


3. 빌드 모드를 설정합니다.

$ lunch


 위에서 보시는 바와 같이 자신의 안드로이드 기기에 올리기 위한 빌드 종류를 선택해야 합니다. 다음 페이지를 참고하시면 자신의 기기에 맞는 종류를 확인하실 수 있습니다.

https://source.android.com/source/building-devices.html




 위의 사이트를 통하여 Nexus 5의 경우 aosp_hammerhead-userdebug를 사용함을 알 수 있습니다. 이를 설정하신 후 다음 단계로 넘어가시면 되겠습니다.


4. 다음으로 기기에 빌드를 하기 위해서는 해당 기기의 Binary와 Factory Image를 소스코드 폴더에 설치해야 합니다.


Binary 다운받기

https://developers.google.com/android/nexus/drivers



 자신의 기기에 해당되는 Binary를 모두 다운로드 받습니다.


Factory Image 다운받기

https://developers.google.com/android/nexus/images



 우리는 현재 4.4.4 r2를 사용하고 있으므로 해당 버전을 선택하여 다운로드 받습니다. 다운로드 받은 압축파일들의 압축을 모두 해제하신 후 해제된 파일들을 자신의 안드로이드 소스코드 폴더 상단에 다음과 같이 이동해 주시면 되겠습니다.



 5. 각 .sh 파일을 실행하여 파일을 설치합니다. 설치를 하기 위해서는 라이센스에 동의를 해야 하는데 이 과정이 살짝 골치 아픕니다.



 각 sh 파일을 실행하시면 보시는 바와 같이 라이센스 내용들이 출력됩니다. 이를 모두 읽고 동의한다만 하면 되겠지만 이 긴 글들을 일일히 읽기 귀찮아서 Enter 키를 계속 누르고 있으면 설치가 취소되는 비극(!)이 벌어집니다. 조금은 귀찮더라도 엔터키를 천천히 누르면서 동의 여부 확인이 나올 때까지 기다립니다.


동의문을 모두 읽게 되면 다음과 같이 동의 여부를 묻는 커맨드가 나옵니다. 여기서 무심코 Enter 버튼을 누르게 되면 처음부터 다시 해야 하므로 다음 커멘드가 나오면 잠시 동작을 멈춘 후 "I ACCEPT"를 입력합니다. 그러면 sh 파일이 설치되는 광경을 확인하실 수 있습니다. 다음과 같은 과정을 나머지 sh파일에서도 진행합니다.


6. 이제 빌드 조건은 모두 구축되었습니다. Make를 실행하여 본격적으로 Build 작업에 들어갑니다.


$ make update-api

$ make -j2


※make 진행시 상당히 많은 시간을 소모합니다. 만약 자신이 사용하고 있는 컴퓨터가 멀티코어를 지원할 경우 해당 코어의 갯수만큼의 옵션을 설정하시면 보다 빠르게 컴파일을 진행하실 수 있습니다. 만약 자신의 컴퓨터가 쿼드코어의 경우 다음과 같이 진행하실 수 있습니다.


$ make update-api

$ make -j4


※종종 위의 컴파일 옵션의 숫자를 너무 크게 하면 컴파일이 진행되는 도중 오류가 생기는 경우가 종종 발생합니다. 가장 안정적인 컴파일을 원하시는 분의 경우 어떠한 옵션을 설정하지 마시고 컴파일을 진행합니다.


컴파일을 무사히 끝마치실 경우 다음과 같은 화면을 보실 수 있습니다.




7. 이제 빌드한 소스코드를 안드로이드 기기에 적용해 보도록 하겠습니다. 우선 자신의 기기가 Fastboot 모드에 진입한 상태로 컴퓨터와 USB로 연결되어야 합니다. 자신이 가지고 있는 안드로이드 기기의 Fastboot 모드 진입 방법은 기기를 제공하는 회사의 웹사이트를 확인하시거나 검색 등을 통해 확인하실 수 있습니다. Nexus 5의 경우 왼쪽 음량조절 버튼의 아래버튼 + 전원버튼을 계속 누르고 있으면 Fastboot 모드에 진입하실 수 있습니다.



위에 붉은 네모로 표시한 부분을 누르시면 됩니다.

8. 위와 같은 화면이 나온다면 Fastboot 모드에 진입이 성공한 것입니다. 이제 다시 Ubuntu의 Terminal을 켜신 후 root 모드로 접근합니다.


$ su root


위의 커맨드를 입력하시면 root의 비밀번호를 묻습니다. 초기 비밀번호는 자신의 Ubuntu 로그인 아이디 혹은 0000으로 설정되어 있습니다. root 권한을 획득하셨다면 다음으로 bashrc를 수정합니다.


# vi ~/.bashrc


다음 내용을 추가합니다.


export ANDROID_TOOLS=(자신의 안드로이드 소스코드 폴더)/out/host/linux-x86
export PATH=$ANDROID_TOOLS/bin:$JAVA_HOME/bin:$PATH
export ANDROID_PRODUCT_OUT=(자신의 안드로이드 소스코드 폴더)/out/target/product/(자신의 빌드 환경)


:wq 를 입력하신 후 저장 합니다.


9. bashrc를 바로 적용합니다.


#source ~/.bashrc


10. 기기가 제대로 연결되었는지 확인합니다.


#fastboot devices



위에서 보시는 바와 같은 상황이 나온다면 안도르이드 기기가 성공적으로 연결된 것입니다. 이제 기기에 빌드를 시도해봅니다.


#fastboot oem unlock

#fastboot flashall



빌드가 완료된 안드로이드 기기의 휴대전화 정보를 확인하시면 다음과 같이 자신이 설정한 버전과 빌드 정보들을 직접 확인하실 수 있습니다.


여기까지 진행하셨다면 여러분은 드디어 안드로이드 빌드에 입문하신 겁니다!

지금까지 잘 따라오신 분들께 진심으로 축하드립니다!

중간에 에러로 인해 결과가 좋지 못하신 분들도 좀 더 자세히 들여다 보신다면 성공하실 수 있을 것입니다.




  • 범블비 2015.04.23 08:30 ADDR 수정/삭제 답글

    안녕하세요~
    넥서스5에 빌드후 일반 앱설치를 하려고하는데 설치가 되지않네요ㅜㅜ
    혹시 설치방법 아시나요??

    • Justin T. 2015.04.23 22:02 신고 수정/삭제

      Eclipse를 통한 앱 설치를 말씀하시는 것인지요?
      위 안드로이드 이미지를 폰에 설치하신 후
      그냥 평소대로 자신의 애플리케이션을 일반 폰에 설치하듯이 해주시면 될 겁니다.
      혹시 빌드 후에 설정이 달라져 개발자모드가 풀려있을 수 있으니 확인해 보셨으면 합니다.

  • 범블비 2015.04.24 16:43 ADDR 수정/삭제 답글

    네 Eclipse에서 안드로이드 앱설치가 안되고있습니다.
    이클립스에서 핸드폰 기기는 인식하였고, 설치를 진행 하면
    2015-04-24 16:41:51 - test] Android Launch!
    [2015-04-24 16:41:51 - test] adb is running normally.
    [2015-04-24 16:41:51 - test] Performing com.example.test.MainActivity activity launch
    [2015-04-24 16:41:51 - test] Automatic Target Mode: using device '04b24a8313ad8b2b'
    [2015-04-24 16:41:51 - test] Uploading test.apk onto device '04b24a8313ad8b2b'
    [2015-04-24 16:41:57 - test] Failed to install test.apk on device '04b24a8313ad8b2b': timeout
    [2015-04-24 16:41:57 - test] Launch canceled!
    위와 같은 에러가 발생되고 앱설치가 안되네요~~

    • Justin T. 2015.04.24 19:11 신고 수정/삭제

      이전에 비슷한 경험이 있었습니다.
      이 경우 애플리케이션이 컴파일되는데 시간이 오래 걸려서 일정한 시간 내로 build를 끝내지 못해 기기에 애플리케이션 설치가 안 된 경우일겁니다.
      구글 검색창에 'Failed to install timeout'을 검색해보시면 관련 해결방법들에 대해 자세히 소개가 되어 있으니 확인해 보셨으면 합니다.

  • 임신혁 2015.06.29 16:25 ADDR 수정/삭제 답글

    안녕하세요? 좋은 글 잘 봤습니다.
    이렇게 댓글을 남기는 이유는 다름이아니라, 제가 프레임워크를 빌드하면 항상 system.img 크기가 298.0mb로 나오기 때문입니다.
    순정 system.img크기가 700mb가 넘는데, 프레임워크 빌드만 하면 system.img크기가 줄어드네요.
    이후 포팅하면 언어 설정이라든지 기타 설정부분이 모두 표시되지 않고, 기본 어플도 설치가 안된 상태로 핸드폰이 켜집니다.
    어떤 문제때문에 이러는걸 까요?

    • Justin T. 2015.06.29 17:08 신고 수정/삭제

      반갑습니다!
      안드로이드 오픈소스인 AOSP의 경우 일반적인 회사에서 출시하는 그러한 애플리케이션들은 모두 배제된 상태의 순수 운영체제로 구성되어 있습니다.
      즉, 통신사가 사용하기 원하는 기능들이 모두 빠져있기 때문에 AOSP 소스코드로 빌드한 경우 기본적으로 필요한 기능들만 포함된 이미지만 만들어집니다.

    • 임신혁 2015.06.29 17:56 수정/삭제

      오! 그렇군요. 바쁘신와중에 이렇게 빨리 답변을 주시다니
      감사합니다! 많은 도움이 되었습니다.

  • 박동혁 2015.08.30 15:09 ADDR 수정/삭제 답글

    안녕하세요 해당 글을 보던 중 궁금한 점이 있어서 이렇게 여쭤봅니다.
    현재 넥서스5에 롤리팝이 설치가 되어 있고 연습삼아 킷캣으로 다시 올려보려고 합니다.
    어떻게 보면 버전을 낮춰서 다시 설치를 하는건데 이 과정에서도 팩토리 이미지를 포함한 상태로
    빌드를 진행한 후 기기에 올려야 하는 건가요?? 아니면 버전에 맞는 바이너리만 포함한 채로 빌드를 하면 되는건가요?
    그리고 한 가지 더 여쭤보렉 있는데 안드로이드 소스를 받고(repo sync)이후 바이너리를 포함한 상태로 make 작업을 하면 system.img 파일이 자동 생성 되는지도 궁급합니다.

  • 세봉아 2015.11.20 11:34 ADDR 수정/삭제 답글

    안녕하세요,
    넥서스 5(6.0)에다가 다운받은 안드로이드 롤리팝 소스를 직접 추가/수정 하여 빌드된 이미지를 올리려고 합니다
    넥서스 5 cpu에 맞게 빌드 옵션을 추가해주는 방법을 찾던 중 들리게 되었습니다
    질문이 있습니다
    1.글의 내용 중 빌드한 PC(리눅스)에서 휴대폰 fastboot를 하지 않고, 저는 다른(windows) pc에서 fastboot 하는데, 상관없나요?
    2. 1번에 이어서 빌드 pc(리눅스)가 아닌 다른 (windows)PC에서 제가 빌드하여 생성 된 (경로Lollipop/out/target/product/generic)/system.img 와 userdata.img 이미지파일만 넥서스 5에 fastboot으로 올리면 될까요?

    • Justin T. 2015.11.22 02:24 신고 수정/삭제

      아래 포스팅이 도움이 되셨으면 합니다.
      http://elecs.tistory.com/162

  • 세봉아 2015.11.20 15:46 ADDR 수정/삭제 답글

    https://developers.google.com/android/nexus/images

    내용중 factory images 링크 해주신 상기주소에서 nexus 5 android버전으로 다운로드 하였고,
    압축해제 후 extract-broadcom-hammerhead.sh 와 extract--qcom-hammerhead.sh 둘다 없네요
    bootloader-hammerhead-hhz11k.img , flash-all.bat , flash-all.sh , flash-base.sh , image-hammerhead-ktu84q.zip , radio-hammerhead-m8974a-2.0.50.1.17.img 만 있습니다

    image-hammerhead-ktu84q.zip 파일에는 이미지 파일만 있네요.

    extract-broadcom-hammerhead.sh 와 extract--qcom-hammerhead.sh 이것들도 쉘 실행시켜줘야하나요?

    • Justin T. 2015.11.22 02:31 신고 수정/삭제

      factory image 내에 있는 mage-hammerhead-ktu84q.ziㅔ를 target으로 하신 후 이를 바로 올리시면 자신이 만든 커스텀 이미지가 아닌 실제 공장에서 출하된 기기의 상태로 만들어 줍니다.
      windows 환경에서는 .sh 쉘을 굳이 실행하시지 않아도 됩니다. 이는 자신이 안드로이드 운영체제를 변경할 때 AOSP에 적용하기 위해 사용되는 것입니다.

    • 세봉아 2015.11.27 11:35 수정/삭제

      안녕하세요
      답글 감사합니다

      위 게시물 대로 image-hammerhead-ktu84q.zip을 target으로 한 후 바로 올린다면 제가 소스 수정한 빌드이미지 결과가 나오는 것이 아니라 공장 출하된 기기의 상태로 나온다는 말씀이군요.

      윈도우말고 리눅스에서 빌드 하기 위해 .sh 실행은 필수인거죠?
      만약에 저 같은 상황에 넥서스 5에 맞게 빌드하기 위해서는 위 게시물 말고 어떻게 해야하나요?

      자세하게 설명 드리자면
      넥서스 5에 커스텀 롬 설치 중입니다
      현재 .sh 을 실행 시킨 후 작업 진행 중입니다
      제가 직접 롤리팝 소스 수정하여 넥서스 5에 맞게 빌드 한 이미지(system, recovery, boot, cache, userdata)를
      넥서스 5에 설치했습니다
      현재 재부팅 후 무한 구글 현상입니다.(벽돌↔순정롬4회ing..)

      와잎도 해주었고 넥서스 5에 맞게 빌드해주었는데 무엇이 문제인지 몰라 질문 드립니다
      빌드한 것이 넥서스 5에 맞지 않는 것이 있으면 무한 구글 나온다는데 무엇을 해야할지 도움을 구합니다

      좋은 하루 되시기 바랍니다
      감사합니다

  • 세봉아 2015.11.27 15:28 ADDR 수정/삭제 답글

    리눅스 PC 에서 빌드 후 이미지 파일을 windows로 복사 붙여넣기 후
    windows PC ↔ 넥서스 5 연결하여 작업 중입니다
    저는 루트 권한을 안하고 작업하기 때문에, 위 게시물 루트 권한 과정은 건너띄었습니다
    vi ~/.bashrc 의 export 경로 설정은 리눅스 PC 에서 해주면 될까요?
    저와 작업 환경이 다르고 질문이 막무가내 같지만 작업할수록 헷갈리네요ㅜ
    1. 작성자님은 애초부터 넥서스 5(ubuntu)에 설치된 리눅스 연결하여 포스팅 작업하셨나요?
    2. 팩토리 이미지 설치는 빌드 할때 필요하지 않고
    순정롬 플래싱 or 넥서스 5와 안드로이드 버전을 맞춰서 사용하려고 다운 받는 게 맞나요?

    • Justin T. 2015.11.27 21:41 신고 수정/삭제

      1.안드로이드 기기 자체가 리눅스를 사용하고 있기 때문에 안드로이드를 컴파일하는 Host인 PC도 리눅스(우분투)로 하시는게 개발환경 구축에 편합니다. Windows로 옮겨서 하시는 이유가 안드로이드 운영체제 컴파일을 가상머신에서 수행하셔서 인지요?
      2.팩토리이미지와 바이너리를 설치한 후 컴파일을 하셔야 안드로이드 이미지 안에 포함되어 동작시킬 수 있습니다

  • 세봉아 2015.11.30 11:42 ADDR 수정/삭제 답글

    http://www.masterqna.com/android/31213/nexus-5-aosp-%EC%86%8C%EC%8A%A4-%EB%B9%8C%EB%93%9C-%EB%AC%B8%EC%A0%9C?show=31213#q31213

    상기 링크를 가보니 저와 비슷한 상황을 겪은 분이 계시고,
    댓글에 해결방법을 알려주셨는데,
    바이너리 파일을 설치하라는 것 같습니다. 위 게시물 대로 이미 저는 바이너리 설치까지 완료했으니,
    이 문제는 아닌 것 같습니다.

    굳이 windows 에서 할 필요는 없습니다. 왜냐하면 windows 가 익숙하여 작업하기 편하기 때문 입니다.
    컴파일 또한 linux서버(PC) 에서 하고 있습니다.
    리눅스 PC에서 작업/이미지 설치하려고 하는데 질문 있습니다.
    넥서스 5에 맞는 usb드라이버 설치를 해줘야하는데
    lg통합 드라이버가 windows 지원만 가능하여 설치가 되지 않습니다.

    이 문제는 어떻게 해결하셨나요?

    • Justin T. 2015.11.30 12:58 신고 수정/삭제

      Windows에서 USB 드라이버를 필요로 하는 이유는 안드로이드가 Linux 환경이고 이를 windows에 연결하기 위해 필요한 것입니다. 자신이 windows와 안드로이드 기기를 직접 연결할 수 있다면 USB드라이버를 설치하지 않아도 됩니다. 즉, USB 드라이버는 단지 windows와 안드로이드 기기를 연결해주는 보조수단일 뿐인것이지요.
      Linux의 경우 안드로이드와 같은 운영체제이며 연결하면 바로 인식이 됩니다. fastboot을 실행하였을 때 기기가 인식되고 있는 것을 확인하실 수 있습니다.
      즉, linux에 USB 드라이버를 설치할 필요가 없습니다.

    • 세봉아 2015.12.01 16:52 수정/삭제

      감사합니다
      덕분에 usb 드라이버 사용법을 이해했습니다.

      넥서스 5 이미지 파일 설치는
      스마트폰 mount 적용 후
      넥서스 5의 버전(안드로이드5.1.1)과
      리눅스 빌드 버전(안드로이드5.1.1)을 맞춰서 재빌드 후
      이미지를 설치하니 구글로고 무한부팅 문제가 해결되었습니다

      질문 있습니다
      제가 평소에
      /Lollipop/package/apps/Launcher2/. 에서
      수정&작업을 진행하였고 그 결과가 보이길 원했는데,

      /Lollipop/package/apps/Launcher3/. 의 수정된 소스가 적용되었네요.

      어떻게 하면 Launcher2 의 수정한 소스를 적용하여 볼 수 있을까요?
      우선 그거보다 Launcher3 가 적용되니까 Launcher3 을 수정&작업을 해보려고 합니다.

    • Justin T. 2015.12.01 16:54 신고 수정/삭제

      해당 폴더의 Android.mk 파일을 확인해 보시길 바랍니디.

    • 세봉아 2015.12.01 18:25 수정/삭제

      gedit package/apps/Launcher3/Android.mk/ 파일안에

      혹시 몰라서
      overliding_package : Launcher2 가 있길래
      주석처리 해주었습니다

      그리고
      넥서스5 에 설정->빌드번호를 보니
      hammerhead-lmy-b 로 되있길래

      빌드하기 전 필요한 바이너리 파일 hammerhead-lmy-b 로
      다시 실행/빌드 해주고있습니다.

      기존에는 lmy-m 로 바이너리 파일 다운/빌드 했기때문에
      아무래도 오류의 원인이 이 문제가 될 듯 싶습니다.

  • 세봉아 2015.12.03 18:22 ADDR 수정/삭제 답글

    안드로이드 기기에 올리기 위한 빌드 종류를 선택할 때 문의 입니다.

    제가 작업중이던 넥서스5 기기가 아니고
    아무것도 수정하지 않은 상태 즉, 맨 처음(Reset) 리눅스 에서 빌드 할 때 generic 으로 사용하지요,
    generic 사용 하려고 변경해주려면 lunch <- 1번을 선택 해주면 될까요?

    • Justin T. 2015.12.03 18:51 신고 수정/삭제

      lunch 명령어 사용하신 다음 나오는 메뉴 선택하시면 됩니다.
      linux에서 사용하시는 경우 x86 혹은 mips 중에 선택하시면 될 듯 합니다.

    • 세봉아 2015.12.04 11:38 수정/삭제

      linux에서 사용 중입니다

      lunch <- 1번(aosp-arm-eng) 선택 후 빌드 해봤더니
      기존에 에뮬레이터가 켜지긴 하는데 까만 화면만 나오고 실행이 앱이 실행은 안 되는 문제가 있었습니다.
      디버깅 하면 클릭 되는 것은 확인 했어요.
      빌드 종류(1번)를 바꿔서 빌드/실행 해도 에러 문제의 원인이 똑같네요

    • Justin T. 2015.12.04 11:52 신고 수정/삭제

      아래 링크를 참고해보셨으면 합니다.
      http://codewalkerster.blogspot.kr/2013/12/aosp-build-and-run-emulatorandroid.html

  • 세봉아 2015.12.07 10:03 ADDR 수정/삭제 답글

    안드로이드 넥서스 5에 맞게 빌드한 PC(linux) 이 아닌
    다른 PC(linux) 에서 작업을 진행하였더니 에뮬레이터 실행이 잘 되었습니다.

    안드로이드 넥서스 5에 맞게 빌드해주었던 PC 에서도 기존에는 잘 실행 되었는데,
    이 게시물 똑같이 작업한 후 되지 않는데요.

    빌드 종류를 기본(1번)으로 맞추어 줬는데.
    위 게시물에서 수정한 작업중 안 되는 원인이 뭘까요?

  • 세봉아 2015.12.28 14:09 ADDR 수정/삭제 답글

    위 게시물에서

    vi ~/.bashrc 에
    export ADNROID_TOOLS 로 추가해주는 내용을 설명 해주실 수 있나요?

    • Justin T. 2015.12.28 18:05 신고 수정/삭제

      안드로이드 OS를 빌드하게 되면 이를 기기에 포팅하기 위한 툴이 생성되는데 이것이 아래의 경로에서 생성이 됩니다.
      /out/host/linux-x86/bin
      이를 사용하기 쉽게 하기 위해 bashrc에 등록을 해주는 것입니다.

  • 세봉아 2016.01.05 10:23 ADDR 수정/삭제 답글

    감사합니다.
    개인적으로 수정한 소스를
    NEXUS5에 설치했습니다.

    저는 LINUX가 아닌 WINDOWS에서 FASTBOOT 해주었습니다.
    FASTBOOT과 ADB는 .EXE 파일인데,
    LINUX에서도 .EXE 파일을 실행시킬 수 있나요?

    • Justin T. 2016.01.05 21:46 신고 수정/삭제

      .exe 파일은 windows 환경에서 실행할 수 있도록 만들어진 binary 파일입니다. 리눅스에서는 실행할 수 없습니다.
      Android 리눅스 버전의 sdk에는 fastboot와 adb라는 같은 이름을 가지고 같은 기능을 수행하는 linux 전용 binary 파일이 존재하며 linux 환경에서 android 관련 작업은 위 fastboot와 adb를 사용한다고 보면 됩니다.
      linux 버전의 Android SDK 폴더 내에 있는
      /sdk/platform-tools
      폴더에 들어있으며 Terminal로 실행하시면 되겠습니다.

    • 세봉아 2016.01.06 15:22 수정/삭제

      앗 감사합니다.
      들어가보니 있네요^^

  • aosp개고생 2016.08.13 15:32 ADDR 수정/삭제 답글

    안녕하세요.
    AOSP 마시멜로 6.2 빌딩 시도중인데 완전히 막혔습니다.
    Ubuntu 16.4 xenial 버전을 맥의 패럴렐즈 가상머신으로 돌려서 빌딩을 시도하고 있습니다.
    혹시나 해서 6.1 등 이전버전 여러개 repo로 다운받아 컴파일 해봐도 똑같은 지점에서 에러가 납니다.
    뭔가 저만 지옥 트리를 탄거 같네요. 해결방법을 모르겠습니다. -_-; 내용은 아래에.

    System.img를 최종적으로 만드는 단계의 에러입니다. 근데 구글링 해봐도 사례가 올라 드물게 올라왔는데 전부 답글이 없더군요.

    메이크 실패 메시지는 아래와 같습니다.
    boot.oat 파일에 문제가 있다는 말 같은데 파일은 멀쩡히 잘 있습니다.

    dex2oatd F 31431 31431 art/compiler/image_writer.cc:1463] Unable open oat file: Failed to map ELF file: mmap((nil), 56885248, 0x3, 0x1, 3, 0) of file 'out/target/product/generic/symbols/system/framework/arm/boot.oat' failed: Invalid argument.
    See process maps in the log.

    mmap 함수에서 에러를 리턴하는것 까지는 확인했습니다만 함수 본체중 C 코드로 이루어진 부분에서는 에러 리턴할 이유가 없어 보였고 어셈블리로 코딩된 부분에서 에러리턴 하는거 같은데 어셈블리어라 왜 에러를 리턴하는지 짐작이 안가네요.

    구글이 빌딩하는데 장애물이 많은 상태의 소스를 왜 공개하는지 도무지 이해가 안가네요.

    설정과 컴파일에 시간낭비가 너무 심합니다.
    우분투는 메모리 스와핑 기능이 없는지 빌딩하는 도중에 가상머신에 할당한 13기가 램메모리를 94%까지 사용하기도 하더군요.

    빌딩하는 도중에 게시글에는 적지 않은 많은 빌딩에러들이 있었는지도 정말 궁금합니다.

    PS.
    art/compiler/image_writer.cc 파일의 ImageWriter::SetOatChecksumFromElfFile 함수에서 boot.oat 파일을 열면서 발생하는 에러 메시지입니다. 체크섬 계산 하기도 전에 ElfFile::Open 에서 에러 리턴 합니다. 즉 열지를 못하는건데 파일은 멀쩡히 있습니다.

    • Justin T. 2016.08.13 21:11 신고 수정/삭제

      하.. 글을 읽는 입장임에도 답답한 마음이 모니터 너머로까지 느껴지는군요.
      제 경우 안드로이드 5.0 버전까지는 해본지라 그 이후의 버전에서의 호환여부는 잘 알지 못합니다.

      다만 제가 컴파일을 하던 당시 환경변수 설정에서 많이 애를 먹었던 바 있습니다. 혹시 환경변수 설정을 하실 때 빠트린 것은 없었는지 다시 한번 확인해보셨으면 합니다.

      아 그리고 우분투 버전이 변경되는 도중에 시스템 설정이 바뀌어서 동작이 되지 않았을 수도 있을듯 합니다 우분투 12.04버전을 사용해 도전해보시는건 어떠신지요?

      제가 아는 바는 여기까지입니다. AOSP 분석이 참으로 사람 머리채 잡을일을 만들어내는 녀석이지만 계속 도전해보신다면 좋은 결과 나오실거라 생각합니다.

  • aosp개고생 2016.08.16 20:26 ADDR 수정/삭제 답글

    Ubuntu 12에서 컴파일을 시도 했습니다. 무려 7 시간 빌드 후에 정확히 같은 지점에서 빌드 Fail 입니다 T _ T.
    정말 이상하네요.
    우분투 14에서도 같은 지점에서 에러였습니다.
    인터넷에는 우분투 16 버전으로도 컴파일 했다는 글이 넘쳐나는데 왜 저만 안되는지 허참.
    버전 문제도 아닌듯 하고 빌드 전에 빌드용 Dependency 패키지 설치에 한번에 설치가 안되고 두루뭉실하게 끝나는 것이 몇개 있었는데 혹시 이것을 간과한것이 아닌지 설치 점검 해보고 다시 시도해 봐야 겠네요.
    계획상 이거 안해볼 수도 없어서 참 난감하네요.

  • 진우 2016.11.04 17:31 ADDR 수정/삭제 답글

    글잘봤습니다. 한가지 궁금한게 있는데 여쭤봐도될까요?

    기기에 설치하는건 넥서스 종류만 되는건가요?
    안쓰는 옵티머스GK와 갤럭시s3 가 있는데 이런 기기보다 넥서스가 설치가 좀 쉬운편인건가요?
    기기 드라이버를 설치하는게 까다로운건지..

    • Justin T. 2016.11.04 19:44 신고 수정/삭제

      보통 오픈소스는 넥서스 시리즈에서 설치하시는 것이 가장 쉽습니다.
      갤럭시 s3 등 시중에 있는 기기를 사용하는 것은 이론상 가능하나 각 기기별로 fastboot에 접근하는 방법이 다르고 제조사에서 의도적으로 막아두는 경우도 있어 루팅 등 다소 고급 작업이 수반됩니다.

  • 진우 2016.11.05 01:26 ADDR 수정/삭제 답글

    아.. 그렇군요~
    보면 넥서스에 설치를 많이하길래 궁금했는데 그런 이유였군요
    답변감사합니다 ^^