Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

제품 파티션 빌드

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
  • 업데이트할 수 없으며 대개 공장 출하 시 플래시됩니다.
  • 브랜드 및 색상 등 사소한 부분만 다르게 빌드됩니다. /oem 파티션의 콘텐츠가 달라진다고 해서 제품 소프트웨어가 달라지는 것은 아닙니다.
  • /system 파티션은 /oem 파티션을 사용하지 않으며 특정 파일이 있는 경우에만 /oem 파티션을 사용합니다.
  • /system 파티션에서는 공개 API만 사용합니다.
/product
  • 업데이트 가능
  • 시스템 이미지와 결합됨(함께 업데이트됨)
  • 제품 또는 제품군별로 빌드됩니다.
  • 시스템 파티션은 /product 파티션을 사용할 수 있습니다.
  • 비공개 API는 동시에 업데이트되므로 사용할 수 있습니다.

이러한 이유로 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 빌드 플래그를 포함합니다.