Android 9 및 이후 버전에는 Android 빌드 시스템을 사용한 product
파티션 빌드 지원이 포함됩니다. 이전의 Android 8.x에서는 Android 빌드 시스템에서 빌드한 OEM 관련 구성요소의 공간을 할당하지 않고 SoC 관련 구성요소를 system
파티션에서 vendor
파티션으로 분리했습니다. Android 9 이상에서는 여러 파티션의 priv-app에 적용되는 권한 및 허용 목록 기능을 추가로 제공합니다.
제품 파티션 정보
많은 OEM에서 AOSP 시스템 이미지를 맞춤설정하여 자체 기능과 이동통신사 요구사항을 구현합니다. 그러나 이러한 맞춤설정으로 인해 여러 소프트웨어 SKU에 단일 시스템 이미지를 사용할 수 없습니다. 맞춤설정을 지원하려면 각각의 이미지가 언어나 이동통신사 등에 따라 달라야 합니다. 별도의 product
파티션을 사용하여 맞춤설정을 포함하면 여러 소프트웨어 SKU에 단일 시스템 이미지를 사용할 수 있습니다. (system
파티션은 여러 소프트웨어 SKU 간에 공유할 수 있는 일반 코드를 호스팅합니다.) vendor
파티션은 특정 SoC를 기반으로 여러 기기 간에 공유할 수 있는 SoC 관련 BSP 코드를 계속 호스팅합니다.
별도의 파티션을 사용하면 디스크 공간을 관리(향후 확장을 위해 제한된 공간을 예약해 상태로 남겨두어야 함)하고 파티션 간에 안정적인 Application Binary Interface(ABI)를 유지해야 하는 등의 단점이 있습니다. product
파티션을 사용하기로 결정하기 전에 고유한 AOSP 구현 및 가능한 완화 전략을 고려해 보세요. 예를 들어 Google이 아닌 일부 OEM에서는 실행하는 무선 업데이트(OTA) 중에 기기 파티션을 다시 나눌 수 있습니다.
이를 위해서는 동적 파티션 나누기가 적합합니다.
제품 파티션 및 권한
Android 9 이상에서 권한 및 허용 목록 변경 프로세스는 제품 파티션의 priv-app 권한을 부여하는 방식에 영향을 줍니다. permissions.xml
파일은 priv-app과 동일한 파티션에 있어야 합니다. priv-app을 위해 system
파티션에 permissions.xml
파일을 배치하면 시스템 파티션이 product
파티션의 확장임에도 불구하고 제품 파티션에 있는 priv-app으로 권한이 확장되지 않습니다.
권한 및 허용 목록 프로세스에 관한 자세한 내용은 독점 권한 허용 목록을 참고하세요.
기존 /oem과 /product 비교
제품 인터페이스 적용에 따라 두 가지의 product
파티션 속성이 있습니다. 또한 product
파티션은 기존 oem
파티션과 다릅니다.
파티션 | 속성 |
---|---|
oem |
|
product |
|
product (적용된 인터페이스) |
|
이러한 이유로 Android 9은 product
파티션을 지원하면서 기존 oem
파티션을 사용하는 기기를 위해 oem 파티션도 계속 지원합니다. Android 11에서는 product
파티션을 system
파티션에서 분리하기 위해 product
인터페이스 적용을 지원합니다.
/product 구성요소
product
파티션에는 다음 구성요소가 포함됩니다.
- 제품 관련 시스템 속성(
/product/build.prop
) - 제품 관련 RRO(
/product/overlay/*.apk
) - 제품 관련 앱(
/product/app/*.apk
) - 제품 관련 priv-app(
/product/priv-app/*.apk
) - 제품 관련 라이브러리(
/product/lib/*
) - 제품 관련 자바 라이브러리(
/product/framework/*.jar
) - 제품 관련 Android 프레임워크 시스템 구성(
/product/etc/sysconfig/*
및/product/etc/permissions/*
) - 제품 관련 미디어 파일(
/product/media/audio/*
) - 제품 관련
bootanimation
파일
custom_images 사용 불가
custom_images
는 사용할 수 없습니다. 이 이미지는 다음을 지원할 수 없습니다.
- 특정 타겟에 모듈 설치:
custom_images
는 아티팩트를 이미지로 복사하는 것은 지원하지만, 타겟 파티션을 빌드 규칙의 일부로 지정하여 모듈을 특정 파티션에 설치할 수는 없습니다. - Soong 지원:
custom_images
는 Soong 빌드 시스템을 사용하여 빌드할 수 없습니다. - OTA 업데이트 지원:
custom_images
는 OTA 업데이트를 수신할 수 없는 공장 출고 시 ROM 이미지로 사용됩니다.
파티션 간 ABI 유지
Android 9의 product
파티션은 system
파티션의 확장입니다. product
및 system
파티션 간에는 취약한 ABI가 있으므로 둘은 동시에 업그레이드되어야 하며 ABI는 시스템 SDK 기반이어야 합니다. 시스템 SDK가 product
및 system
간의 모든 API 노출 영역을 포함하지 않는 경우 OEM은 두 파티션 간에 자체 ABI를 유지해야 합니다.
product
및 system
파티션은 서로에 대한 종속성을 가질 수 있습니다. 하지만 일반 시스템 이미지(GSI)를 이용한 테스트는 product
파티션 없이도 제대로 작동해야 합니다.
product
인터페이스가 적용되면 product
파티션이 system
파티션과 분리됩니다. product
파티션에서는 system
파티션에서 허용하는 인터페이스만 사용합니다.
product
파티션에는 vendor
파티션에 불안정한 인터페이스를 통해 연결된 종속 항목이 없어야 합니다. product
및 vendor
파티션 간의 직접적인 상호작용은 금지됩니다.
이 정책은 SEpolicy에 의해 적용됩니다.
제품 파티션 구현
새 제품 파티션을 구현하기 전에 AOSP의 관련 제품 파티션 변경사항을 검토합니다. 그런 다음 product
를 설정하기 위해 다음 보드 또는 제품 빌드 플래그를 포함합니다.
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
/product/build.prop
의 경우PRODUCT_PRODUCT_PROPERTIES
입니다.PRODUCT_PRODUCT_PROPERTIES += product.abc=ok
와 같이$(call inherit-product path/to/device.mk)
내에 있어야 합니다.
제품 파티션에 모듈 설치
다음 빌드 플래그를 사용하여 모듈을 product
파티션에 설치합니다.
Android.bp
의product_specific: true
Android.mk
의LOCAL_PRODUCT_MODULE := true
자체 검사 부팅 사용 설정
악성 소프트웨어가 product
파티션을 변조하지 못하게 하려면 vendor
와 system
파티션에 한 것처럼 파티션에 Android 자체 검사 부팅(AVB)을 사용 설정합니다. AVB를 사용 설정하려면 BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
빌드 플래그를 포함합니다.