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 |
|
product |
|
product (zorunlu arayüzler) |
|
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ıyorLOCAL_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
.