AOSP menawarkan opsi berikut untuk menyimpan informasi konfigurasi di perangkat:
- Properti sistem
- Konfigurasi perangkat booting awal
- Properti hardware abstraction layer (HAL)
- File XML konfigurasi sistem
- Overlay resource (statis dan runtime)
Properti sistem
Properti sistem adalah pasangan nilai kunci string yang disimpan dalam kamus global build.prop. Properti sistem adalah resource di seluruh sistem yang mudah
digunakan dan memiliki overhead performa yang rendah. Saat menggunakan properti sistem, Anda tidak
perlu menggunakan komunikasi antarproses (IPC) meskipun properti sistem dibagikan
di beberapa proses. Namun, properti sistem mirip dengan variabel global dan dapat berbahaya jika disalahgunakan. Penyalahgunaan properti sistem dapat menyebabkan masalah seperti kerentanan keamanan dan aplikasi menjadi tidak dapat diakses oleh pengguna. Sebelum menggunakan properti sistem untuk menyimpan informasi konfigurasi, pertimbangkan opsi konfigurasi lainnya.
Untuk mengetahui informasi lebih lanjut tentang properti sistem, lihat Menambahkan properti sistem
Konfigurasi perangkat booting awal
Di Android 17 dan yang lebih tinggi, layanan init_dev_config memberikan dukungan untuk
konfigurasi perangkat dan inisialisasi properti sistem. Mekanisme arsitektur dinamis ini berjalan secara otomatis saat booting awal.
Jika satu image sistem atau vendor harus mendukung beberapa varian hardware, nilai konfigurasi tidak selalu dapat di-hardcode pada waktu build. Layanan
init_dev_config dieksekusi selama fase early-init, tepat sebelum
apexd-bootstrap, sehingga vendor dapat memeriksa status hardware (misalnya, dari
argumen bootloader, partisi yang dipasang lebih awal, atau tabel konfigurasi
hardware) dan menginisialisasi properti sistem secara dinamis sebelum layanan
dan library dependen diinisialisasi.
Integrasi dan siklus proses layanan
Layanan init_dev_config ditentukan secara default dalam init.rc sistem dan dieksekusi secara sinkron selama early-init, sebelum
apexd-bootstrap. Integrator tidak perlu mendeklarasikan layanan init baru.
Sebagai gantinya, layanan yang ada menggunakan ekspansi properti di jalur yang dapat dieksekusi, sehingga memisahkan deklarasi layanan sistem dari biner vendor. Integrator
menentukan jalur ke biner vendor mereka menggunakan
properti ro.vendor.init_dev_config.path, dan mengonfigurasinya dengan
izin dan label SELinux yang diperlukan.
Persyaratan penerapan vendor
Untuk berintegrasi dengan init_dev_config:
Konfigurasi jalur biner vendor pada waktu build menggunakan
PRODUCT_VENDOR_PROPERTIES. Jalur biner yang diberikan harus berupa jalur yang valid ke program biner yang diinstal di sistem:PRODUCT_VENDOR_PROPERTIES += \ ro.vendor.init_dev_config.path=/vendor/bin/init_dev_configJika properti ini tidak disetel,
initakan melewati eksekusi layanan dan booting akan berlanjut secara normal.Karena layanan berjalan sebelum
apexd-bootstrap, library bionic lengkap yang disediakan APEX belum tersedia. DiAndroid.bp, tetapkanbootstrap: true:rust_binary { name: "init_dev_config", vendor: true, srcs: ["src/main.rs"], rustlibs: [ "librustutils", ], bootstrap: true, }Tulis logika layanan untuk mendeteksi varian hardware dan menetapkan properti sistem yang sesuai:
use rustutils::system_properties; fn main() { let hw_sku = read_hardware_sku(); // Dynamically initialize vendor-specific properties: let display_type = match hw_sku { 1 => "oled", _ => "lcd", }; system_properties::write("vendor.display.panel_type", display_type) .expect("Failed to set vendor display property"); }Beri label biner vendor dengan
init_dev_config_exec:/vendor/bin/init_dev_config u:object_r:init_dev_config_exec:s0Beri izin domain
init_dev_configuntuk menetapkan jenis properti yang diperlukan:set_prop(init_dev_config, vendor_my_sku_prop)
Untuk mengetahui informasi tentang penggunaan init_dev_config untuk aktivasi dan penonaktifan APEX,
lihat Pemilihan APEX vendor saat booting.
Properti HAL
Jika sumber tepercaya untuk konfigurasi berasal dari komponen hardware di perangkat, HAL untuk hardware harus memberikan informasi untuk komponen tersebut. Tentukan metode HAL baru di HAL yang ada untuk mengakses konfigurasi. Untuk mengetahui informasi selengkapnya tentang pengembangan HAL, lihat AIDL untuk HAL.
File XML konfigurasi sistem
Jika data konfigurasi bersifat statis tetapi rumit (terstruktur), pertimbangkan untuk menggunakan XML atau format serupa lainnya untuk data konfigurasi. Pastikan skema file tetap stabil. Untuk file XML, Anda dapat menggunakan
xsd_config
untuk menjaga kestabilan skema, dan memanfaatkan parser XML yang dibuat secara otomatis.
Overlay resource
Anda dapat menggunakan overlay resource untuk menyesuaikan produk. Ada dua jenis overlay resource:
Overlay resource standar yang digunakan untuk menyesuaikan produk pada waktu build. Untuk informasi tentang overlay resource standar, lihat Menyesuaikan build dengan overlay resource.
Overlay resource runtime (RRO) digunakan untuk mengubah nilai resource paket target saat runtime. Misalnya, aplikasi yang diinstal pada image sistem dapat mengubah perilakunya berdasarkan nilai resource. Daripada meng-hardcode nilai resource pada waktu build, RRO yang diinstal pada partisi lain dapat mengubah nilai resource aplikasi saat runtime. Untuk mengetahui informasi selengkapnya tentang RRO, lihat Mengubah nilai resource aplikasi saat runtime.