Ürün bölümleri

Android 9 ve sonraki sürümler, Android derleme sistemini kullanarak product bölüm oluşturma desteği içerir. Daha önce Android 8.x, Android derleme sisteminden oluşturulan OEM'ye özgü bileşenler için alan 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 sonraki sürümler, farklı bölümlerdeki gizlilik uygulamaları için geçerli olan ek izinler ve beyaz listeleme özellikleri sunar.

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

Birçok OEM, kendi özelliklerini ve operatör şartlarını uygulamak için AOSP sistem imajını ö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 kılar. Özelleştirmeleri desteklemek için her resim farklı olmalıdır (ör. farklı yerel ayarlar veya operatörler). Özelleştirmeleri barındırmak için ayrı bir product bölümü kullanmak, birden fazla yazılım SKU'su için tek bir sistem görüntüsünün kullanılmasını sağ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ü, belirli bir SoC'ye göre birden fazla cihaz arasında paylaşılabilen SoC'ye özel BSP kodunu barındırmaya devam eder.

Ayrı bölümler kullanmanın bazı dezavantajları vardır. Örneğin, disk alanını yönetme (gelecekteki büyüme için sınırlı miktarda alan ayrılmalıdır) ve bölümler arasında istikrarlı bir uygulama ikili arayüzü (ABI) sürdürme gibi. product bölümlerini kullanmaya karar vermeden önce, benzersiz AOSP uygulamanızı ve olası azaltma taktiklerini (ör. Google tarafından değil, bazı OEM'ler tarafından yapılan kablosuz (OTA) güncelleme sırasında bir cihazı yeniden bölümlendirme) göz önünde bulundurun. Dinamik bölümleme bu konuda iyi bir çözümdür.

Ürün bölümleri ve izinleri

Android 9 ve sonraki sürümlerde izinler ve beyaz listeleme sürecinde yapılan bir değişiklik, "ürün" bölümlerinizde özel uygulama izinlerini nasıl verdiğinizi etkiler. permissions.xml dosyası, priv-apps ile aynı bölümde olmalıdır. Ayrıcalıklı uygulamalar için system bölümüne bir permissions.xml dosyası yerleştirmek, bu izinleri product bölümündeki ayrıcalıklı uygulamalara genişletmez. İzinler ve izin verilenler listesi işlemleri hakkında ayrıntılı bilgi için Özel İzin İzin Verilenler Listesi başlıklı makaleyi inceleyin.

Eski /oem ve /product

Ürün arayüzü yaptırımına bağlı olarak product bölümünün iki tür özelliği vardır. Ayrıca product bölümü, eski oem bölümünden farklıdır:

Bölüm Özellikler
oem
  • Güncellenemez; genellikle fabrikada bir kez yanıp söner.
  • Marka ve renk gibi küçük varyantlara göre oluşturulur. 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 belirli bir dosya bulunduğunda kullanır).
  • Yalnızca system bölümünde herkese açık API'yi kullanır.
product
  • Güncelleme yapılabilir
  • Sistem görüntüsüyle birlikte (birlikte güncellenir)
  • Ürün veya ürün aileleri bazında oluşturulur.
  • Sistem bölümü, product bölümüne bağlı olabilir.
  • Aynı anda güncellendiği için herkese açık olmayan API'leri kullanabilir.
product (zorunlu arayüzler)
  • Güncelleme yapılabilir
  • Sistem görüntüsünden ayrılmış.
  • Ürün veya ürün aileleri bazında oluşturulur.
  • system bölümü, product bölümüne bağlı değildir.
  • Gizli API'leri kullanamaz ancak yalnızca system bölümündeki herkese açık ve sistem API'lerini kullanır.

Bu nedenlerden dolayı Android 9, eski oem bölümünü kullanan cihazlar için product bölümünü desteklerken eski oem bölümüne de destek sunar. Android 11, product bölümünü system bölümünden ayırmak için product arayüzlerini zorunlu kılma özelliğini destekler.

/product components

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

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

custom_images yok

custom_images kullanamazsınız. Aşağıdakiler için destek yoktur:

  • Belirli bir hedefe modül yükleme. custom_images, yapı öğelerinin bir görüntüye kopyalanmasını destekler ancak bir modülü, hedef bölümünü bir derleme kuralının parçası olarak belirterek belirli bir bölüme yükleyemez.
  • Soong destek ekibi. custom_images, Soong derleme sistemi kullanılarak oluşturulamaz.
  • OTA güncelleme desteği. custom_images, OTA güncellemeleri alamayan fabrika ROM resimleri 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 olduğundan her ikisi de aynı anda yükseltilmelidir ve ABI, sistem SDK'sına dayalı olmalıdır. Sistem SDK'sı product ile system arasındaki tüm API yüzeylerini kapsamıyorsa OEM'ler iki bölüm arasında kendi ABI'lerini korumalıdır.

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

product arayüzleri zorunlu kılındığında product bölümü system bölümünden ayrılır. product bölümünde yalnızca system bölümünde izin verilen arayüzler kullanılır.

product bölümünde, vendor bölümündeki kararsız arayüzler üzerinden herhangi bir bağımlılık olmamalıdır. product ve vendor bölümleri arasında doğrudan etkileşime izin verilmez. (Bu, SEpolicy tarafından zorunlu kılınmıştır.)

Ürün bölümlerini uygulama

Yeni bir ürün bölümünü uygulamadan önce AOSP'deki ürün bölümüyle ilgili değişiklikleri inceleyin. Ardından, product değerini ayarlamak için aşağıdaki kart veya ürün derlemesi işaretlerini ekleyin:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES tarihleri arasında /product/build.prop. Bunlar $(call inherit-product path/to/device.mk) içinde olmalıdır. Örneğin, PRODUCT_PRODUCT_PROPERTIES += product.abc=ok.

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

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

  • product_specific: true Android.bp içinde başlıyor
  • LOCAL_PRODUCT_MODULE := true Android.mk içinde başlıyor

Doğrulanmış Başlatma'yı etkinleştirme

product bölümünün kötü amaçlı yazılımlar tarafından değiştirilmesini önlemek için bu bölümde Android Doğrulanmış Başlatma (AVB)'yı etkinleştirin (vendor ve system bölümleri için yaptığınız gibi). AVB'yi etkinleştirmek için aşağıdaki derleme işaretlerini ekleyin: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.