do{학습}while

AOSP) 빌드 도구 Makefile, Soong 본문

AOSP

AOSP) 빌드 도구 Makefile, Soong

하이오야이 2024. 8. 22. 16:46

Makefile과, Soong이 AOSP에서 사용하는 빌드 도구 입니다. 이 두 빌드 도구는 AOSP 내의 소스코드를 컴파일하고 패키징하여 최종적으로 실행 가능한 안드로이드 이미지를 생성하는 역할을 합니다.

Makefile ( Android.mk )

Makefile은 전통적인 빌드 도구 입니다. 안드로이드 7 버전까지 Makefile로 빌드를 진행하였습니다. Makefile은 타겟(target)과 규칙(rules)와 같은 요소로 이루어져있습니다. 그리고 Makefile은 의존성 관리를 통해 변경된 파일들만 다시 컴파일하게 설계가 되어 있어 빌드 시간을 단축할 수 있습니다.

하지만 Makefile의 복잡성, Makefile의 빌드 속도의 한계, Soong의 직관적이고 가독성 높은 구문으로 인해 Makefile에서 Soong으로 전환을 진행하고 있습니다.

Soong ( Android.bp )

Soong은 Goole에서 AOSP 빌드 시스템을 현대화하기 위해 개발한 새로운 빌드 시스템입니다.
 
Soong은 Python 기반의 Blueprint라는 언어로 정의된 빌드 파일을 사용합니다. 빌드 파일들은 JSON과 유사한 구조로, 빌드 규칙과 설정을 명확하게 정의할 수 있습니다.
Soong은 빌드시스템을 모듈화하여 코드의 재사용성과 유지보수성을 향상시켰습니다. 각 모듈은 독립적으로 빌드될 수 있고, 의존성을 자동을 처리합니다.이렇게 모듈화가 되었기 때문에 모듈별 병렬적으로 빌드가 가능하여 Makefile보다 높은 성능을 가질 수 있게 하였습니다.
 

 
점차적으로 soong 빌드 시스템으로 전환되어 가고 있습니다.
기존에 있는 makefile을 soong 빌드 시스템에서 사용할 수 있는 포맷으로 변환하기 위해 사용된 도구가 Kati입니다. makefile을 가지고 Kati는 출력물로 ninja 빌드 시스템에서 입력으로 사용될 ninja 파일을 생성합니다.
 
생성된 .ninja파일은 ninja 빌드 시스템을 통해 동적라이브러리, apk, 실행 가능한 파일 등 변환하게 해줍니다.

요약하자면..

Makefile

  • 초기 안드로이드에 사용되었던 빌드 시스템
  • 규모가 큰 프로젝트에 부적합(복잡성, 성능적 측면)
  • Kati를 사용하여 Soong 빌드시스템에서 사용될 수 있다

Soong

  • Python 기반 Blueprint언어로 작성
  • 모듈화 -> 병렬적 빌드 -> 성능 증가
  • 직관적임

 

용어

패키징(pakaging)

소프트웨어 개발 과정에서 소스코드, 리소스, 라이브러리, 설정 파일 등을 하나의 배포 가능한 단위로 묶는 작업을 의미합니다.

참고

https://source.android.com/docs/setup/build?hl=ko

 

Soong 빌드 시스템  |  Android 오픈소스 프로젝트  |  Android Open Source Project

Soong 빌드 시스템 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 7.0 이전 버전에서는 GNU Make를 독점적으로 사용하여 빌드 규칙을 설명하고 실행했습니

source.android.com

https://www.udemy.com/course/android-os-internals-aosp-automotive-development/?couponCode=SKILLS4SALEB