Partisi Produk

Android 9 dan yang lebih tinggi menyertakan dukungan untuk membuat partisi product menggunakan sistem pembangunan Android. Sebelumnya, Android 8.x memberlakukan pemisahan komponen khusus SoC dari partisi system ke partisi vendor tanpa mendedikasikan ruang untuk komponen khusus OEM yang dibuat dari sistem pembangunan Android. Android 9 dan yang lebih tinggi memberikan izin tambahan dan fitur daftar putih yang berlaku untuk aplikasi pribadi di partisi yang berbeda.

Tentang partisi produk

Banyak OEM menyesuaikan citra sistem AOSP untuk mengimplementasikan fitur mereka sendiri, serta persyaratan operator. Namun, penyesuaian semacam itu tidak memungkinkan untuk menggunakan citra sistem tunggal untuk beberapa SKU perangkat lunak. Setiap gambar harus berbeda untuk mendukung penyesuaian, seperti dengan lokal atau operator yang berbeda. Menggunakan partisi product terpisah untuk memuat kustomisasi memungkinkan penggunaan citra sistem tunggal untuk beberapa SKU perangkat lunak. (Partisi system menghosting kode generik yang dapat dibagikan di antara banyak SKU perangkat lunak). Partisi vendor terus meng-host kode BSP khusus SoC yang dapat dibagikan di antara beberapa perangkat berdasarkan SoC yang diberikan.

Menggunakan partisi terpisah memiliki beberapa kelemahan, seperti mengelola ruang disk (ruang terbatas harus tetap disediakan untuk pertumbuhan di masa mendatang) dan memelihara antarmuka biner aplikasi (ABI) yang stabil antar partisi. Sebelum memutuskan untuk menggunakan partisi product , luangkan waktu untuk mempertimbangkan penerapan AOSP unik Anda dan kemungkinan taktik mitigasi (seperti mempartisi ulang perangkat selama pembaruan over-the-air (OTA) , yang tidak dilakukan oleh Google tetapi dilakukan oleh beberapa OEM ). Partisi dinamis akan menjadi solusi yang baik untuk ini.

Partisi dan izin produk

Di Android 9 dan yang lebih tinggi, perubahan dalam proses izin dan daftar putih memengaruhi cara Anda memberikan izin aplikasi pribadi pada partisi `produk` Anda. File permissions.xml harus berada di partisi yang sama dengan priv-apps. Menempatkan file permissions.xml di partisi system untuk priv-apps tidak memperluas izin tersebut ke priv-apps di partisi product , meskipun yang pertama adalah perpanjangan dari yang terakhir. Untuk detail tentang izin dan proses daftar putih, lihat Daftar Putih Izin Istimewa .

Warisan /oem vs /produk

Kami memiliki dua jenis atribut dari partisi product tergantung pada penerapan antarmuka produk . Juga, partisi product berbeda dari partisi oem lawas:

partisi Atribut
oem
  • Tidak dapat diperbarui; biasanya berkedip sekali di pabrik.
  • Dibuat berdasarkan variasi kecil, seperti branding dan warna. Memiliki konten partisi oem yang berbeda tidak berarti perangkat lunak produk berbeda.
  • Partisi system tidak bergantung pada partisi oem . (Ini menggunakan partisi oem hanya ketika file tertentu ditemukan di sana).
  • Hanya menggunakan API publik pada partisi system .
product
  • Dapat diperbarui
  • Ditambah dengan gambar sistem (mereka memperbarui bersama)
  • Dibangun per produk atau keluarga produk.
  • Partisi sistem dapat bergantung pada partisi product .
  • Dapat menggunakan API non-publik karena diperbarui secara bersamaan.
product (antarmuka yang diterapkan)
  • Dapat diperbarui
  • Dipisahkan dengan citra sistem.
  • Dibangun per produk atau keluarga produk.
  • Partisi system tidak bergantung pada partisi product .
  • Tidak dapat menggunakan API tersembunyi, tetapi hanya menggunakan API publik dan sistem pada partisi system .

Karena alasan ini, Android 9 mendukung partisi product sambil mempertahankan dukungan untuk partisi oem lawas, untuk perangkat yang bergantung padanya. Untuk memisahkan partisi product dari partisi system , Android 11 mendukung penerapan antarmuka product .

/komponen produk

Partisi product berisi komponen berikut:

  • Properti sistem khusus produk ( /product/build.prop )
  • RRO khusus produk ( /product/overlay/*.apk )
  • Aplikasi khusus produk ( /product/app/*.apk )
  • Aplikasi pribadi khusus produk ( /product/priv-app/*.apk )
  • Pustaka khusus produk ( /product/lib/* )
  • Pustaka java khusus produk ( /product/framework/*.jar )
  • Konfigurasi sistem Kerangka Android khusus produk ( /product/etc/sysconfig/* dan /product/etc/permissions/* )
  • File media khusus produk ( /product/media/audio/* )
  • File bootanimation khusus produk

Tidak ada custom_images

Anda tidak dapat menggunakan custom_images . Mereka tidak memiliki dukungan untuk hal-hal berikut:

  • Memasang modul ke target tertentu . custom_images mendukung penyalinan artefak ke dalam gambar tetapi tidak dapat menginstal modul ke partisi tertentu dengan menentukan partisi targetnya sebagai bagian dari aturan build.
  • Dukungan segera . custom_images tidak dapat dibuat menggunakan sistem pembangunan Soong.
  • Dukungan pembaruan OTA . custom_images digunakan sebagai gambar ROM pabrik yang tidak dapat menerima pembaruan OTA.

Mempertahankan ABI antar partisi

Partisi product di Android 9 adalah perpanjangan dari partisi system . Ada ABI yang lemah antara product dan partisi system , jadi keduanya harus ditingkatkan secara bersamaan, dan ABI harus berbasis SDK sistem. Jika SDK sistem tidak mencakup semua permukaan API antara product dan system , OEM harus mempertahankan ABI mereka sendiri di antara kedua partisi.

Partisi product dan system dapat memiliki ketergantungan satu sama lain. Namun, pengujian dengan Generic System Image (GSI) harus berfungsi dengan baik tanpa partisi product .

Ketika antarmuka product diterapkan, partisi product dipisahkan dengan partisi system . Partisi product hanya menggunakan antarmuka yang diizinkan dari partisi system .

Partisi product tidak boleh memiliki ketergantungan pada partisi vendor . Interaksi langsung antara product dan partisi vendor dilarang. (Ini diberlakukan oleh SEpolicy.)

Menerapkan partisi produk

Sebelum menerapkan partisi produk baru, tinjau perubahan partisi produk terkait di AOSP . Kemudian, untuk menyiapkan product , sertakan papan atau flag build produk berikut:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES untuk /product/build.prop . Ini harus berada dalam $(call inherit-product path/to/device.mk) , seperti dalam PRODUCT_PRODUCT_PROPERTIES += product.abc=ok .

Memasang modul ke partisi produk

Gunakan flag build berikut untuk menginstal modul ke partisi product .

  • product_specific: true di Android.bp
  • LOCAL_PRODUCT_MODULE := true di Android.mk

Mengaktifkan boot terverifikasi

Untuk mencegah partisi product dirusak oleh perangkat lunak berbahaya, aktifkan Android Verified Boot (AVB) untuk partisi tersebut (seperti yang Anda lakukan untuk vendor dan partisi system ). Untuk mengaktifkan AVB, sertakan flag build berikut: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .