Partisi produk

Android 9 dan yang lebih baru menyertakan dukungan untuk membangun Partisi product menggunakan sistem build Android. Sebelumnya, Android 8.x menerapkan pemisahan komponen khusus SoC dari partisi system ke vendor tanpa menyediakan ruang untuk komponen khusus OEM yang dibuat dari sistem build Android. Android 9 dan yang lebih baru memberikan izin dan daftar yang diizinkan yang berlaku untuk aplikasi pribadi di partisi berbeda.

Tentang partisi produk

Banyak OEM menyesuaikan {i>image<i} sistem AOSP untuk mengimplementasikan fitur mereka sendiri, serta persyaratan ekspedisi. Namun, penyesuaian seperti itu tidak mungkin menggunakan satu image sistem untuk beberapa SKU software. Masing-masing harus berbeda untuk mendukung penyesuaian, seperti dengan lokal atau operator yang berbeda. Menggunakan partisi product terpisah untuk menampung penyesuaian membuatnya satu image sistem untuk beberapa SKU software. ( Partisi system menghosting kode umum yang dapat digunakan bersama oleh banyak SKU software). Partisi vendor terus dihosting Kode BSP khusus SoC yang dapat dibagikan di antara beberapa perangkat berdasarkan SoC yang diberikan.

Menggunakan partisi terpisah memiliki beberapa kelemahan, seperti mengelola kapasitas {i>disk<i} (jumlah ruang yang terbatas harus tetap direservasi untuk masa pertumbuhan) dan mempertahankan antarmuka biner aplikasi (ABI) yang stabil antarpartisi. Sebelum pembaruan memutuskan untuk menggunakan partisi product, luangkan waktu untuk mempertimbangkan implementasi AOSP unik dan kemungkinan taktik mitigasi (seperti mempartisi ulang perangkat selama over-the-air (OTA) update, yang tidak dilakukan oleh Google, tetapi dilakukan oleh beberapa OEM). Partisi dinamis adalah adalah solusi yang baik.

Partisi dan izin produk

Di Android 9 dan yang lebih tinggi, perubahan izin dan proses pemberian izin memengaruhi cara Anda memberikan izin aplikasi pribadi partisi `product`. 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 product partisi, meskipun yang pertama adalah kepanjangan dari yang terakhir. Untuk detail mengenai proses izin dan pemberian izin, lihat Pemberian Izin Hak Hak Istimewa.

/oem lama versus /product

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

Partisi Atribut
oem
  • Tidak dapat diupdate; biasanya muncul sekali di pabrik.
  • Dibuat per variasi kecil, seperti branding dan warna. Memiliki isi partisi oem yang berbeda tidak berarti produk perangkat lunaknya berbeda.
  • Partisi system tidak bergantung pada partisi oem. (Properti ini menggunakan oem partisi hanya jika file tertentu ditemukan di sana).
  • Hanya menggunakan API publik pada partisi system.
product
  • Dapat diupdate
  • Dipasangkan dengan image sistem (diupdate bersama)
  • Dibuat per produk atau kelompok produk.
  • Partisi sistem dapat bergantung pada partisi product.
  • Dapat menggunakan API non-publik karena diupdate secara bersamaan.
product (antarmuka yang diterapkan)
  • Dapat diupdate
  • Dipisahkan dengan image sistem.
  • Dibuat per produk atau kelompok produk.
  • Partisi system tidak bergantung pada product partisi.
  • Tidak dapat menggunakan API tersembunyi, tetapi hanya menggunakan API publik dan sistem di Partisi system.

Karena alasan ini, Android 9 mendukung partisi product sekaligus mempertahankan dukungan untuk partisi oem lama, untuk perangkat yang bergantung pada anotasi. Untuk memisahkan partisi product dari system Android 11 mendukung menerapkan product antarmuka.

komponen /product

Partisi product berisi komponen berikut:

  • Properti sistem khusus produk (/product/build.prop)
  • RRO spesifik per produk (/product/overlay/*.apk)
  • Aplikasi khusus produk (/product/app/*.apk)
  • Aplikasi privasi khusus produk (/product/priv-app/*.apk)
  • Library khusus produk (/product/lib/*)
  • Library java khusus produk (/product/framework/*.jar)
  • Konfigurasi sistem Framework 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 berikut ini:

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

Mempertahankan ABI di antara partisi

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

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

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

Partisi product tidak boleh memiliki dependensi melalui antarmuka yang tidak stabil di Partisi vendor. Interaksi langsung antara Partisi product dan vendor dilarang. (Hal ini diberlakukan oleh SEpolicy.)

Mengimplementasikan partisi produk

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

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

Menginstal modul ke partisi produk

Gunakan flag build berikut untuk menginstal modul ke partisi product.

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

Aktifkan Booting Terverifikasi

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