AOSP빌드해보기, 벌써 S, 빌드된다~! 근데 R태깅은 Still망. android-r-beta-3

9/7일자, Build Fail –;; 6:19:09 초 만에 –;

9/6일자 Master branch 빌드 성공, 8/30에서의 diff build인데. 4:!6:45 –;; 뭔가 특단의 조치가 필요함.

어제부(2020/8/30)로 MASTER branch받아보니 빌드 성공했습니다~!! 만세~~!!. R도 곧 Official Release이니, 이것저것 확인해서 다 고친 모양입니다. 그래도 언제 깨질지 모르기에. manifest snapshot 올려둡니다. Daily로 빌드 확인하는걸 만들어보던가 해야겠네요. 그나저나 빌드 시간이 9:44:29 –;; 예전엔 안이랬던것 같은데.. A10-5800K에 32GB는 동일한데.. HDD로 바꾼게 영향이 클지 모르겠네요. 개발용 PC 바꿔야겠.. T.T. 게임을 끊어야 T.T

휴가기간에 이것저것 점검하면서, 전에 해봤던 pure AOSP빌드를 시도해봅니다. 전에 중고로 업어온 3만원짜리 서버를 Recasing한, I7 3770의 성능도 볼겸 해서요. 원래 Main Game PC가 아직도 1055t에 8GB, 750ti 로 버티고 있었는데, CPU사양은 이걸 훌쩍 뛰어넘네요.. 신품 사기 더 싫어집니다 –; 요즘 PC들은 CPU보다도 GPU쪽에 투자를 많이 한다고(.. 게임말고, DeepLearning용으로,, 혹은 코인?) 들어서 중고시장쪽도 봤는데.. 1060이 많이 거래되는것 같더군요.. 예전엔 롤 돌릴때 수준으로 아무거나 쓰면 거의 되었는데, 배그 할때는 1060정도가 거의 최소인것처럼 얘기가 되나봅니다.. 아직도 Skyrim에 DragonAge Inqusition도 못깨서.. PC업그레이드 한참 뒤의 일이네요… 위쳐 3정도가 해보고 싶은건데 그마저도 아마 본격 게임머신을 ‘중고’로 사서 할 확률이 높네요. 최근은 GTA5를 이제사 할 수 있게 되어서, 요즘 공짜 많이 풀죠… 750TI가 조금 아쉽다 이긴한데.. 그보다도, 유로트럭2를 메인게임으로 두고 있기에 –; 유로트럭2에서 사장님 소리 듣기 전까지는 다른게임도 못할것 같습니다..

잡설은 그만하고, 일단 source.android.com에 가서 가이드대로 코드를 받아옵니다. 예전에 비해서, 가이드 글이 상당히 친절해지고 내용도 풍부해진걸 알 수 있었습니다. 다만 검색과, 메뉴 Navigation은 여전히.. 이건 뭔가 하는 느낌이 들긴 합니다. 그냥 구글페이지 검색창에서 찾아서 들어오는게 더 낫습니다 –;;; 용량은 다받으면 200GB에 육박해서. HDD는 단디 각오하고 준비해둬야하겠고요. 최근에 3TB HDD오랜 만에 ‘중고’로 또 사서, 이부분은 넉넉해졌습니다. 당근마켓 사랑해요~
용량도 많아서 mirror로 받아서, mirror에서 repo 땡겨오는 만행도 저질러 봅니다. mirror서버는 따로 돌리고 싶지만, 어차피 이 PC아니면 개발할때 쓰지도 않을 것 같고(미안하다, A10-5800K머신아…) 원래 리눅스 메인머신이 한대 있는데, 3770한테 바로 밀렸습니다. 요즘 에어컨 많이 틀어서 전기요금도 살짝 걱정되어서 PC두대 켜기도 그렇고, 무엇보다, 다락 전기라인에 6구 멀티탭이 이미 3개인상태라 불날까봐서 여러대 작동을 못 시키겠습니다 그 중 하나가 에어컨을 쓰고 있어서요 –; 가정용 MAX가 30A라죠.. 에어컨이 1700W~600W정도라, PC한대두대 300W정도씩 더하면, 까딱하면 차단기 떨어질 수 있겠습니다.

source.android.com에서 가이드대로 repo sync가 무사하게 완료되면, 역시나 가이드대로, . build/envsetup.sh 와 lunch 명령어로 빌드할 타겟 보드를 잡아주고, make를 쓰던간, 환경설정시에 들어 있는 ‘m’, ‘mm’, ‘mmm’을 활용하면 됩니다. m명령어로 root부터 전체 빌드를 할 수 있도록 되어 있어 AOSP에서는 편리한데요. 기타 여러 스크립트를 추가로 작성해서 하는 방법도 있겠습니다. 근데 실행해보니 에러가 나오네요. 전에도 봤던것 같은데. dependency가 들어 있는 코드와, 해당하는 모듈이 포함되어 있지 않아서 발생하는 것으로 보입니다. 검색을 해봐도 딱히 뭐는 안 나아오고, 그나마 찾은건 ALLOW_MISSING_DEPENDENCY=true로 설정하라는 것 정도 밖에는 못찾겠네요. 근데 해봐도 동일합니다. 예전 기억에 이것으로 해결 경우 친절하게 가이드가 나왔던것 같은데, 너무 빌드 초기에 실패로 나오고 있어서 살짝 당황스럽습니다.

AOSP가 이렇게 관리가 안될까 라는 의문과 함께..(안되는게 맞긴 합니다만) HDD용량도 넉넉하니.. 할 수 있는 BuildTarget을 모두 실험해 봅니다.. 휴가때 하기 좋네요…아닌가.?.. 1~10, 38, 41번 하고 관뒀습니다. 이 정도면 그냥은 안될 것 같습니다. 여기서 해볼 수 있는건, 이제 이전의 뭔가 Stable버전을 찾아서 돌아가는게 되겠지요.. Q버전으로 과감하게 돌아가봅니다. 그럴려고 .repo/manifests에서 가서 확인해보는데, 몇가지 조금더 해볼만한게 보이네요.

AOSP의 manifest파일들이 보입니다. 현재는 아무런 branch정의 없이 가져와서 코드 상태는 origin/master를 보고 있습니다.

이전 기억으로는 origin말고 aosp가 따로 있었던것 같은데 말이죠.. 기분 탓인가 봅니다. origin은 remote 이름이라서, branch이름은 아닐테니까요.

현재로서는 달리고 있는 최신 버전일터인, android-r-beta-3으로 가봅니다.

mirror를 다시 설정하는건 시간이 오래걸려서 안되겠고, 그냥 googlesource.com에서 바로 받아서 빌드를 거니 진행이 되네요. 이제 빌드 완료되는것 보고 코드레벨로 비교를 해보는 수고를 하면 master branch가 왜 빌드가 깨졌는지 알 수 있겠지만… 일단 보류합니다. 빌드가 또 깨지네요.. T.T. 후닥 찾아보니, 질문은 있고 답은 아직 없네요 –;
https://stackoverflow.com/questions/63355052/error-for-building-android-11-source-code
중국에서 열심히 삽질한게 보이긴하는데… 흐음.. 다 읽긴 귀찮고, 메세지 일치하는것만 빼옵니다. 일부 Conflict이 나오는데, 알아서 잘 고치면 됩니다.. 일단 삭제쪽인게 많아서, git rm으로 지워주고, 일부 수정은 패치의 내용대로 따라가도록 고치면 될것 같네요.
https://www.xiezeyang.com/2020/07/25/Build/Android11-beta2-%E7%BC%96%E8%AF%91%E6%8A%A5%E9%94%99%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86/

/libcore/apex
git fetch https://android.googlesource.com/platform/libcore refs/changes/97/1312197/1 && git cherry-pick FETCH_HEAD
conflict: git rm으로 해결

/libcore
git fetch https://android.googlesource.com/platform/libcore refs/changes/98/1333998/12 && git cherry-pick FETCH_HEAD
conflict: current-api.txt는 이전 내용 유지, 다른것은 최근 내용으로 교체

/external/linux-kselftest
git fetch https://android.googlesource.com/platform/external/linux-kselftest refs/changes/87/1252987/1 && git cherry-pick FETCH_HEAD

/external/seccomp-tests
git fetch https://android.googlesource.com/platform/external/seccomp-tests refs/changes/67/1253167/1 && git cherry-pick FETCH_HEAD

/art/build/sdk -> libcore쪽 패치 추가
git fetch https://android.googlesource.com/platform/libcore refs/changes/29/1321929/3 && git cherry-pick FETCH_HEAD

/external/gptfdisk
git fetch https://android.googlesource.com/platform/external/gptfdisk refs/changes/90/1319790/5 && git cherry-pick FETCH_HEAD

/external/grpc-grpc-java/auth -> prebuilts/tools
git fetch https://android.googlesource.com/platform/prebuilts/tools refs/changes/67/1344767/5 && git cherry-pick FETCH_HEAD
conflict: 날짜 최신것으로 교체
git fetch https://android.googlesource.com/platform/prebuilts/tools refs/changes/68/1344768/6 && git cherry-pick FETCH_HEAD

/external/grpc-grpc-java/protobuf
git fetch https://android.googlesource.com/platform/prebuilts/tools refs/changes/76/1320776/8 && git cherry-pick FETCH_HEAD
conflict : 날짜 최신것으로 교체
git fetch https://android.googlesource.com/platform/prebuilts/tools refs/changes/20/1323020/3 && git cherry-pick FETCH_HEAD

/libcore/mmodules/core_platform_api -> libcore패치 추가
git fetch https://android.googlesource.com/platform/libcore refs/changes/32/1325832/4 && git cherry-pick FETCH_HEAD

/frameworks/base -> libcore에 패치 추가
git fetch https://android.googlesource.com/platform/libcore refs/changes/70/1268170/2 && git cherry-pick FETCH_HEAD

/cts -> libcore에 패치 추가
git fetch https://android.googlesource.com/platform/libcore refs/changes/62/1268162/2 && git cherry-pick FETCH_HEAD

/libcore
git fetch https://android.googlesource.com/platform/libcore refs/changes/24/1321924/3 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/libcore refs/changes/66/1235266/7 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/libcore refs/changes/99/1258499/1 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/libcore refs/changes/34/1297334/3 && git cherry-pick FETCH_HEAD
conflict: target삭제후 shared_lib에 추가된것을 취함.
git fetch https://android.googlesource.com/platform/libcore refs/changes/30/1250330/10 && git cherry-pick FETCH_HEAD
위것보다 먼저 넣는게 좋겠음.
Conflict : 최신파일 내용으로 그냥 다 교체해버림.
git fetch https://android.googlesource.com/platform/libcore refs/changes/72/1254472/5 && git cherry-pick FETCH_HEAD
git fetch https://android.googlesource.com/platform/libcore refs/changes/14/1278614/2 && git cherry-pick FETCH_HEAD

/external/chromium-libpac
git fetch https://android.googlesource.com/platform/external/chromium-libpac refs/changes/23/1283723/1 && git cherry-pick FETCH_HEAD

여기까지 하면, 일단 빌드 시작들어갑니다만, build fail뜨네요 –; 일단 MultiThread Build를 믿고 몇번 더 걸어봅니다. 특정 모듈에서만 나오고 있을 거라서 나머지는 진행될꺼거든요. 안되네요 -.-;

제 빌드머신은 Ubuntu 20.04LTS입니다. 아마도.. library 의존성이 달라져서 이겠지요.. 보통 Backward compatibility목적으로 재설치나 링크 변경 해야했던 적이 있었으니까요.. 아래정도 찾아봅니다.
https://back2basics.io/2020/05/creating-a-android-aosp-build-machine-on-ubuntu-20-04/
https://kibua20.tistory.com/39

역시 추가설치가 필요한가봅니다.
sudo apt install libncurses5

이후 또 –; 다시 패치들을 뒤적입니다.. 왠마한건 다 있네요 –;;. FRC나 되어서 제대로 된게 나오려는지.. Official Release가 9월 8일이군요.
https://www.androidauthority.com/android-11-release-date-1085250/

/external/e2fsprogs
git fetch https://android.googlesource.com/platform/external/e2fsprogs refs/changes/16/1250416/2 && git cherry-pick FETCH_HEAD

또 빌드 에러

/libcore 에 넣을꺼 많네요
git fetch https://android.googlesource.com/platform/libcore refs/changes/42/1348842/1 && git cherry-pick FETCH_HEAD
Conflict: Latest로 넣으면 되는데, 중간에 많이 빠진것 같네요.. 에효

git fetch https://android.googlesource.com/platform/libcore refs/changes/62/1260462/1 && git cherry-pick FETCH_HEAD

git fetch https://android.googlesource.com/platform/libcore refs/changes/46/1244646/7 && git cherry-pick FETCH_HEAD

git fetch https://android.googlesource.com/platform/libcore refs/changes/14/1280514/1 && git cherry-pick FETCH_HEAD

이제 족보가 없는, 빌드에러가 나옵니다. –;; 일단 자야겠네요.

다시금 직접 받은 master branch로 돌아오고(-b master), export ALLOW_MISSING_DEPENDENCIES=true로 놓고하니, skia_deps를 넘어가고 빌드가 되네요 -.-;;; 여태의 삽질은 뭐란말인가…