Ringkasan konfigurasi

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:

  1. 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_config
    

    Jika properti ini tidak disetel, init akan melewati eksekusi layanan dan booting akan berlanjut secara normal.

  2. Karena layanan berjalan sebelum apexd-bootstrap, library bionic lengkap yang disediakan APEX belum tersedia. Di Android.bp, tetapkan bootstrap: true:

    rust_binary {
        name: "init_dev_config",
        vendor: true,
        srcs: ["src/main.rs"],
        rustlibs: [
            "librustutils",
        ],
        bootstrap: true,
    }
    
  3. 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");
    }
    
  4. Beri label biner vendor dengan init_dev_config_exec:

     /vendor/bin/init_dev_config u:object_r:init_dev_config_exec:s0
    
  5. Beri izin domain init_dev_config untuk 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.