부록 C. 기본 패키지 목록 사용자 지정하기
4장에서 살펴본 것처럼 빌드 시스템을 수정하여 기본적으로 빌드하는 패키지에 새 패키지를 추가할 수 있습니다. 이 장에서 다루지 않은 것은 빌드 시스템이 이미지를 만들 때 사용하는 기본 패키지 목록을 만드는 방법이나 이를 사용자 정의하는 방법입니다. 물론 제대로 작동하는 AOSP를 얻는 데 필요한 기본 패키지 세트와 같은 기본적인 것을 가지고 노는 것은 오래된 이미지를 생성할 수 있기 때문에 위험할 수 있습니다. 그래도 어떻게 작동하고 무엇이 포함되어 있는지 살펴볼 가치가 있습니다. 직접 손을 대야 할 경우 어디를 살펴봐야 하는지 더 잘 알 수 있기 때문입니다.
전체 종속성
2.3/진저브레드에서는 GRANDFATHERED_USER_MODULES 와 PRODUCT_PACKAGES 두 가지 주요 변수가 AOSP에 포함되는 내용을 결정합니다. 첫 번째는 build/core/user_tags.mk에 있는 정적 목록에서 생성되며 adbd, 시스템 서비스, Bionic 등 AOSP에 필요한 대부분의 "핵심" 패키지가 포함되어 있습니다. 이 파일은 편집할 수 없으며 관련 경고와 함께 시작됩니다:
# This is the list of modules grandfathered to use a user tag # DO NOT ADD ANY NEW MODULE TO THIS FILE # # user modules are hard to control and audit and we don't want # to add any new such module in the system
사실상 GRANDFATHERED_USER_MODULES 의 패키지 목록은 어느 정도 고정되어 있습니다. 우리가 주목하고 싶은 것은 PRODUCT_PACKAGES 에 추가되는 패키지입니다. 실제로 장치/<공급업체>/<제품>/의 관련 파일에 있는 제품 설명에 따라 .mk 파일의 전체 목록이 차례로 포함되므로 PRODUCT_PACKAGES 에 점차적으로 더 많은 패키지를 추가하는 데 도움이 되는 파일 시리즈가 있습니다.
4.2/Jelly Bean에서는 GRANDFATHERED_USER_MODULES 또는 build/core/user_tags.mk가 존재하지 않습니다. 대신 훨씬 축소된 GRANDFATHERED_ALL_PREBUILT 및 이전과 같은 경고가 포함된 build/core/legacy_prebuilts.mk가 있습니다. 2.3/Gingerbread의 GRANDFATHERED_USER_MODULES 의 대부분은 이제 빌드/타겟/제품/베이스.mk 또는 빌드/타겟/제품/코어.mk에 있으며, 2.3/Gingerbread에서와 동일한 방식으로 사용되는 PRODUCT_PACKAGES 에 추가됩니다.
최종 제품_패키지 조립하기
일반적으로 제품은 4장에서 코요테패드를 추가할 때와 마찬가지로 inherit-product makefile 함수를 사용하여 빌드할 수 있는 PRODUCT_PACKAGES변수의 이전 선언이 포함된 다른 .mk 파일을 가져옵니다.
대부분의 PRODUCT_PACKAGES ...