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 |
|
product |
|
product (zorunlu arayüzler) |
|
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çinPRODUCT_PRODUCT_PROPERTIES
. BunlarPRODUCT_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
.