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
파일을 배치하면 /system
파티션이 /product
파티션의 확장임에도 불구하고 /product
파티션에 있는 priv-app으로 해당 권한이 확장되지 않습니다.
권한 및 허용 목록 프로세스에 관한 자세한 내용은 독점 권한을 허용 목록에 추가를 참조하세요.
레거시 /oem 대 /product
새로운 /product
파티션은 레거시 /oem
파티션과 다릅니다.
파티션 | 속성 |
---|---|
/oem |
|
/product |
|
이러한 이유로 Android 9은 새로운 /product
파티션을 지원하면서 레거시 /oem
파티션을 사용하는 기기를 위해 이 파티션에 대한 지원도 유지합니다.
/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
파티션에는 /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
빌드 플래그를 포함합니다.