Ürün Bölümleri

Android 9 ve üzeri, Android derleme sistemini kullanarak product bölümleri oluşturma desteğini içerir. Daha önce Android 8.x, Android derleme sisteminden oluşturulan OEM'e özgü bileşenlere yer ayırmadan, SoC'ye özgü bileşenlerin system bölümünden vendor bölümüne ayrılmasını zorunlu kılıyordu. Android 9 ve üzeri, farklı bölümlerdeki özel uygulamalar için geçerli olan ek izinler ve beyaz listeye alma özellikleri sağlar.

Ürün bölümleri hakkında

Birçok OEM, AOSP sistem görüntüsünü kendi özelliklerini ve taşıyıcı gereksinimlerini uygulayacak şekilde özelleştirir. Ancak bu tür özelleştirmeler, birden fazla yazılım SKU'su için tek bir sistem görüntüsünün kullanılmasını imkansız hale getirir. Her görüntünün, özelleştirmeleri desteklemek için farklı yerel ayarlar veya taşıyıcılar gibi farklı olması gerekir. Özelleştirmeleri içerecek ayrı bir product bölümünün kullanılması, birden fazla yazılım SKU'su için tek bir sistem görüntüsünün kullanılmasını mümkün kılar. ( system bölümü, birçok yazılım SKU'su arasında paylaşılabilen genel kodu barındırır). vendor bölümü, verilen SoC'ye dayalı olarak birden fazla cihaz arasında paylaşılabilen SoC'ye özgü BSP kodunu barındırmaya devam eder.

Ayrı bölümleri kullanmanın, disk alanını yönetmek (gelecekteki büyüme için sınırlı miktarda alan ayrılmalıdır) ve bölümler arasında kararlı bir uygulama ikili arabirimini (ABI) sürdürmek gibi bazı dezavantajları vardır. product bölümlemelerini kullanmaya karar vermeden önce, benzersiz AOSP uygulamanızı ve olası azaltma taktiklerini (Google tarafından yapılmayan ancak bazı OEM'ler tarafından yapılan kablosuz (OTA) güncelleme sırasında bir cihazı yeniden bölümlendirmek gibi) dikkate almak için zaman ayırın. ). Dinamik bölümleme bunun için iyi bir çözüm olacaktır.

Ürün bölümleri ve izinler

Android 9 ve sonraki sürümlerde, izinlerde ve beyaz listeye alma sürecindeki bir değişiklik, "ürün" bölümlerinizde özel uygulamalara izin verme şeklinizi etkiler. permissions.xml dosyası priv-apps ile aynı bölümde bulunmalıdır. Özel uygulamalar için system bölümüne bir permissions.xml dosyası yerleştirmek, bu izinleri product bölümündeki özel uygulamalara kadar genişletmez; ilki ikincisinin bir uzantısı olsa da. İzinler ve beyaz listeye alma işlemleriyle ilgili ayrıntılar için Ayrıcalıklı İzin İzin Verilenler Listesine Ekleme konusuna bakın.

Eski /oem ve /ürün karşılaştırması

Ürün arayüzü uygulamasına bağlı olarak product bölümünün iki tür niteliğine sahibiz. Ayrıca product bölümü eski oem bölümünden farklıdır:

Bölüm Öznitellikler
oem
  • Güncellenemez; genellikle fabrikada bir kez yanıp söner.
  • Markalama ve renk gibi küçük farklılıklara göre oluşturulmuştur. Farklı oem bölümü içeriklerine sahip olmak, ürün yazılımının farklı olduğu anlamına gelmez.
  • system bölümü oem bölümüne bağlı değildir. ( oem bölümünü yalnızca orada belirli bir dosya bulunduğunda kullanır).
  • Yalnızca system bölümündeki genel API'yi kullanır.
product
  • Güncellenebilir
  • Sistem görüntüsüyle birlikte (birlikte güncellenirler)
  • Ürün veya ürün ailelerine göre oluşturulmuştur.
  • Sistem bölümü product bölümüne bağlı olabilir.
  • Eş zamanlı olarak güncellendikleri için herkese açık olmayan API'leri kullanabilirler.
product (zorunlu arayüzler)
  • Güncellenebilir
  • Sistem görüntüsüyle ayrıştırıldı.
  • Ürün veya ürün ailelerine göre oluşturulmuştur.
  • system bölümü product bölümüne bağlı değildir.
  • Gizli API'ler kullanılamaz ancak yalnızca system bölümündeki genel API'ler ve sistem API'leri kullanılır.

Bu nedenlerden dolayı Android 9, product bölümünü desteklerken, ona bağlı cihazlar için eski oem bölümü desteğini de korur. product bölümünü system bölümünden ayırmak için Android 11, product arayüzlerinin uygulanmasını destekler.

/ürün bileşenleri

product bölümü aşağıdaki bileşenleri içerir:

  • Ürüne özel sistem özellikleri ( /product/build.prop )
  • Ürüne özel RRO'lar ( /product/overlay/*.apk )
  • Ürüne özel uygulamalar ( /product/app/*.apk )
  • Ürüne özel özel uygulamalar ( /product/priv-app/*.apk )
  • Ürüne özel kütüphaneler ( /product/lib/* )
  • Ürüne özel Java kitaplıkları ( /product/framework/*.jar )
  • Ürüne özel Android Framework sistem yapılandırmaları ( /product/etc/sysconfig/* ve /product/etc/permissions/* )
  • Ürüne özel medya dosyaları ( /product/media/audio/* )
  • Ürüne özel bootanimation dosyaları

Custom_images yok

custom_images kullanamazsınız. Aşağıdaki konularda destekten yoksundurlar:

  • Modüllerin belirli bir hedefe kurulması . custom_images yapıtların bir görüntüye kopyalanmasını destekler ancak bir yapı kuralının parçası olarak hedef bölümünü belirterek belirli bir bölüme bir modül yükleyemez.
  • Soong desteği . custom_images Soong derleme sistemi kullanılarak oluşturulamaz.
  • OTA güncelleme desteği . custom_images OTA güncellemelerini alamayan fabrika ROM görüntüleri olarak kullanılır.

Bölümler arasında ABI'leri koruma

Android 9'daki product bölümü, system bölümünün bir uzantısıdır. product ve system bölümleri arasında zayıf bir ABI vardır, bu nedenle her ikisinin de aynı anda yükseltilmesi gerekir ve ABI, sistem SDK'sı tabanlı olmalıdır. Sistem SDK'sı product ile system arasındaki tüm API yüzeylerini kapsamıyorsa OEM'lerin iki bölüm arasında kendi ABI'lerini korumaları gerekir.

product ve system bölümleri birbirine bağımlı olabilir. Ancak Genel Sistem Görüntüsü (GSI) ile yapılan testlerin product bölümü olmadan düzgün çalışması gerekir.

product arayüzleri uygulandığında product bölümü system bölümüyle ayrılır. product bölümü yalnızca system bölümünden izin verilen arabirimleri kullanır.

product bölümünün, vendor bölümündeki kararsız arayüzler nedeniyle herhangi bir bağımlılığı olmamalıdır. product ve vendor bölümleri arasında doğrudan etkileşim yasaktır. (Bu, SEpolicy tarafından uygulanır.)

Ürün bölümlemelerini uygulama

Yeni bir ürün bölümü uygulamadan önce AOSP'deki ilgili ürün bölümü değişikliklerini inceleyin. Ardından product ayarlamak için aşağıdaki pano veya ürün oluşturma bayraklarını ekleyin:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • /product/build.prop için PRODUCT_PRODUCT_PROPERTIES . Bunlar PRODUCT_PRODUCT_PROPERTIES += product.abc=ok olduğu gibi $(call inherit-product path/to/device.mk) içinde olmalıdır.

Ürün bölümüne bir modül yükleme

product bölümüne bir modül yüklemek için aşağıdaki yapı bayraklarını kullanın.

  • product_specific: true Android.bp doğru
  • LOCAL_PRODUCT_MODULE := true Android.mk doğru

Doğrulanmış önyüklemeyi etkinleştirme

product bölümünün kötü amaçlı yazılımlar tarafından değiştirilmesini önlemek amacıyla, söz konusu bölüm için Android Verified Boot'u (AVB) etkinleştirin (tıpkı vendor ve system bölümleri için yaptığınız gibi). AVB'yi etkinleştirmek için aşağıdaki derleme bayraklarını ekleyin: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .