1.AOSP Build시 불필요한 파일 정리 옵션
1.1 가장 추천하는 방법: installclean
AOSP (Android Open Source Project) Android Automotive를 빌드할 때, 이전 빌드의 잔여물이나 불필요한 파일(Stale files)을 정리하고 깨끗한 상태에서 다시 이미지를 생성하고 싶다면 가장 적합한 옵션(타겟)은 [installclean]입니다.
상황에 따라 사용할 수 있는 옵션들을 정리해 드립니다.
빌드 시간을 절약하면서도 생성된 이미지(system, vendor 등)를 삭제하여 깨끗하게 다시 패키징하고 싶을 때 사용합니다.
- 명령어:
- 동작 방식:
- out/target/product/<device_name>/ 디렉토리 내의 설치된 파일들(system, data, root 등 최종 이미지 관련 폴더)을 삭제합니다.
- 중요: 컴파일된 중간 객체 파일(.o 파일 등 obj 디렉토리 내용)은 지우지 않습니다.
- 장점: 소스 코드 수정 후 다시 빌드할 때, 전체 재빌드(clean)보다 훨씬 빠르면서도 이전 이미지의 잔여 파일로 인한 충돌을 방지할 수 있습니다.
1.2 전체 초기화: clean (또는 clobber)
빌드 과정에서 생성된 모든 파일을 완전히 삭제하고 처음부터 다시 시작하고 싶을 때 사용합니다. "쓸모없는 파일"이 디스크 용량을 차지하는 중간 파일들까지 포함한다면 이 옵션을 사용해야 합니다.
- 명령어:
- 동작 방식:
- out/ 디렉토리 전체를 삭제합니다.
- 단점: 모든 모듈을 다시 컴파일해야 하므로 빌드 시간이 매우 오래 걸립니다. (보통 Clean Build라고 부릅니다.)
1.3 데이터 파티션만 정리: dataclean
User data 파티션과 관련된 파일만 지우고 싶을 때 유용합니다.
- 명령어:
- 용도: 공장 초기화 상태의 데이터 이미지를 다시 만들고 싶을 때 주로 사용합니다.
요약 비교
| 명령어 | 삭제 대상 | 컴파일 객체(Obj) 유지? | 빌드 속도 | 권장 상황 |
| installclean | 생성된 이미지 파일 (system, vendor 등) | Yes (유지) | 빠름 | 브랜치 변경, 제품 설정 변경 후 재빌드 시 |
| clean | out/ 폴더 전체 (모든 빌드 산출물) | No (삭제) | 느림 | 꼬인 의존성 해결, 디스크 공간 확보 시 |
| dataclean | /data 파티션 관련 파일 | Yes (유지) | 매우 빠름 | 데이터 파티션 초기화 필요 시 |
팁: 디스크 공간이 부족해서 "쓸모없는 파일"을 지우려는 경우
만약 빌드 중에 디스크 용량이 부족해서 질문하신 것이라면, 다음 방법을 고려해보세요.
- 빌드 후 out 디렉토리 압축: 배포용 이미지만 챙기고 빌드 폴더를 날립니다.
- OUT_DIR_COMMON_BASE 설정: 빌드 아티팩트(out 폴더)를 소스 코드와 다른(용량이 큰) 디스크 경로로 지정하여 빌드할 수 있습니다.
2. 빌드하면서 중간 생성파일들을 지우면서 빌드하는 방법은?
안타깝게도 AOSP 빌드 시스템(Soong/Ninja)에는 "빌드 중에 중간 파일(.o, .a 등)을 즉시 삭제하며 빌드하는"단일 옵션이나 플래그는 존재하지 않습니다.
그 이유는 빌드 시스템이 의존성(Dependency) 그래프를 기반으로 작동하기 때문입니다. 최종 이미지를 링크(Link)할 때까지 중간 객체 파일들이 필요하며, 빌드 완료 후에도 다음 번 증분 빌드(Incremental build)를 위해 이 파일들을 남겨두도록 설계되어 있습니다.
하지만 디스크 용량을 획기적으로 줄이면서 빌드할 수 있는 현실적인 방법 3가지를 제안해 드립니다.
방법 1. Dexpreopt 끄기 (가장 효과적, 용량 대폭 절약)
Android 빌드 용량의 상당 부분은 앱을 최적화(ODEX)하는 과정에서 생성되는 파일들이 차지합니다. 이 옵션을 끄면 빌드 속도가 빨라지고, out/ 폴더 용량이 수십 GB 이상 줄어듭니다.
- 설정 방법: 빌드 명령어 앞에 환경변수를 추가합니다.
- 단점: 생성된 이미지로 부팅할 때 첫 부팅 속도가 느려질 수 있습니다 (부팅 시점에 앱을 최적화하므로). 하지만 개발/디버깅용으로는 문제없습니다.
방법 2. 심볼(Symbol) 제거 및 빌드 타입 변경
디버깅 정보가 포함된 파일들은 용량이 매우 큽니다. 꼭 디버깅(adb root, strace 등)이 필요한 상황이 아니라면 빌드 타입을 변경하거나 심볼을 제거하세요.
1. user 빌드 사용: userdebug나 eng 빌드는 디버깅 심볼과 툴을 많이 포함하여 용량이 큽니다. 배포 목적이라면 user로 빌드하세요.
2. 디버깅 심볼 스트립 (Strip): 강제로 심볼을 최소화하는 옵션입니다.
방법 3. 전체 빌드(m) 대신 필요한 이미지만 빌드
m 명령어를 치면 전체 시스템을 빌드할 뿐만 아니라 호스트 툴, 테스트 케이스, SDK 등 불필요한 것들도 같이 빌드될 수 있습니다. 필요한 파티션 이미지만 콕 집어서 빌드하세요.
- 예시:(Automotive의 경우 superimage를 만들어야 할 수도 있습니다.)
(참고) 물리적 공간 해결법: .repo 폴더 다이어트
만약 **"한 번만 빌드해서 이미지만 뽑으면 되고, 소스 코드 업데이트(git pull)는 당분간 필요 없다"**면, 소스 코드 용량의 절반 이상을 차지하는 .repo 폴더(Git 히스토리)를 삭제하거나 정리할 수 있습니다.
주의: 이 방법을 쓰면 repo sync가 불가능해지거나 다시 처음부터 받아야 할 수 있습니다.
- 방법: 빌드 시작 전에 .repo 폴더를 다른 디스크로 옮기거나(백업), 정말 급하면 삭제합니다. (비추천하지만 최후의 수단입니다.)
추천하는 시나리오
현재 용량 부족으로 빌드가 멈춘다면, 다음 순서로 시도해보세요.
- m installclean (이전 빌드 찌꺼기 정리)
- export WITH_DEXPREOPT=false (최적화 파일 생성 안 함)
- m systemimage vendorimage ... (필요한 타겟만 빌드)
혹시 현재 out/ 폴더가 위치한 파티션의 남은 용량이 대략 어느 정도인가요? (예: 50GB 미만 등) 용량에 따라 성공 여부가 갈릴 수 있습니다.
'Project ES > : : AAOS' 카테고리의 다른 글
| VPU_Wrapper (0) | 2026.02.20 |
|---|---|
| .bp (BluePrint) (0) | 2026.02.20 |
| [AAOS Audio] 오디오 포커스 (0) | 2026.02.09 |
| [AAOS Audio] Intro (0) | 2026.02.09 |
| Android Automotive OS Architecture: Definitive Guide (0) | 2026.02.04 |