Partisi Produk

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

Tentang partisi produk

Banyak OEM menyesuaikan citra sistem AOSP untuk mengimplementasikan fitur mereka sendiri, serta persyaratan operator. Namun, penyesuaian tersebut membuat tidak mungkin menggunakan satu citra sistem untuk beberapa SKU perangkat lunak. Setiap gambar harus berbeda untuk mendukung penyesuaian, misalnya dengan lokal atau operator berbeda. Menggunakan partisi product terpisah untuk memuat penyesuaian memungkinkan penggunaan satu citra sistem untuk beberapa SKU perangkat lunak. (Partisi system menampung kode generik yang dapat dibagikan di antara banyak SKU perangkat lunak). Partisi vendor terus menghosting kode BSP khusus SoC yang dapat dibagikan ke beberapa perangkat berdasarkan SoC tertentu.

Menggunakan partisi terpisah memiliki beberapa kelemahan, seperti mengelola ruang disk (sejumlah ruang harus tetap dicadangkan untuk pertumbuhan di masa depan) dan mempertahankan 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 namun dilakukan oleh beberapa OEM ). Partisi dinamis akan menjadi solusi yang baik untuk ini.

Partisi dan izin produk

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

Warisan /oem vs /produk

Kami memiliki dua jenis atribut partisi product tergantung pada penerapan antarmuka produk . Selain itu, partisi product berbeda dari partisi oem lama:

Partisi Atribut
oem
  • Tidak dapat diperbarui; biasanya di-flash sekali di pabrik.
  • Dibangun per variasi kecil, seperti branding dan warna. Memiliki isi partisi oem yang berbeda tidak berarti perangkat lunak produknya berbeda.
  • Partisi system tidak bergantung pada partisi oem . (Ia menggunakan partisi oem hanya ketika file tertentu ditemukan di sana).
  • Hanya menggunakan API publik pada partisi system .
product
  • Dapat diperbarui
  • Ditambah dengan image sistem (diperbarui bersama-sama)
  • Dibangun per produk atau rangkaian 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 rangkaian 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 tetap mempertahankan dukungan untuk partisi oem lama, 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 priv 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 gambar_khusus

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

  • Memasang modul ke target tertentu . custom_images mendukung penyalinan artefak ke dalam gambar tetapi tidak dapat memasang modul ke partisi tertentu dengan menentukan partisi targetnya sebagai bagian dari aturan pembangunan.
  • Dukungan segera . custom_images tidak dapat dibuat menggunakan sistem build 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 merupakan perpanjangan dari partisi system . Terdapat ABI yang lemah antara partisi product dan system , sehingga 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 tersebut.

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 apa pun melalui antarmuka yang tidak stabil 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 tanda papan atau pembuatan 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 pada 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 partisi vendor dan system ). Untuk mengaktifkan AVB, sertakan flag build berikut: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .