AOSP, yapılandırma bilgilerini cihazda depolamak için aşağıdaki seçenekleri sunar:
- Sistem özellikleri
- Erken başlatma cihaz yapılandırması
- Donanım soyutlama katmanı (HAL) özellikleri
- Sistem yapılandırması XML dosyaları
- Kaynak yer paylaşımları (statik ve çalışma zamanı)
Sistem özellikleri
Sistem özellikleri, build.prop
global sözlüğünde depolanan dize anahtar/değer çiftleridir. Sistem özellikleri, kullanımı kolay ve düşük performans ek yüküne sahip, sistem genelinde kaynaklardır. Sistem özelliklerini kullanırken, bir sistem özelliği birden fazla işlem arasında paylaşılsa bile işlemler arası iletişim (IPC) kullanmanız gerekmez. Ancak sistem özellikleri, genel değişkenlere benzer ve yanlış kullanıldığında zararlı olabilir. Sistem özelliklerinin kötüye kullanılması, güvenlik açıkları ve uygulamaların kullanıcılar tarafından erişilememesi gibi sorunlara yol açabilir. Yapılandırma bilgilerini depolamak için sistem özelliklerini kullanmadan önce diğer yapılandırma seçeneklerini göz önünde bulundurun.
Sistem özellikleri hakkında daha fazla bilgi için Sistem özellikleri ekleme başlıklı makaleyi inceleyin.
Erken başlatma cihaz yapılandırması
Android 17 ve sonraki sürümlerde init_dev_config hizmeti, cihaz yapılandırması ve sistem özelliği başlatma için destek sağlar. Bu dinamik mimari mekanizma, erken başlatma sırasında otomatik olarak çalışır.
Tek bir sistem veya satıcı görüntüsünün birden fazla donanım varyantını desteklemesi gerektiğinde, yapılandırma değerleri her zaman derleme sırasında sabit kodlanamaz. init_dev_config hizmeti, early-init aşamasında, apexd-bootstrap'den hemen önce yürütülür. Böylece satıcılar, donanım durumunu (ör. önyükleyici bağımsız değişkenlerinden, erken bağlanmış bölümlerden veya donanım yapılandırma tablolarından) inceleyebilir ve bağımlı hizmetler ile kitaplıklar başlatılmadan önce sistem özelliklerini dinamik olarak başlatabilir.
Hizmet entegrasyonu ve yaşam döngüsü
init_dev_config hizmeti sistemde varsayılan olarak tanımlanır
init.rc ve early-init sırasında apexd-bootstrap öncesinde eşzamanlı olarak yürütülür. Entegrasyon uzmanlarının yeni bir init hizmeti bildirmesi gerekmez.
Bunun yerine, mevcut hizmet, yürütülebilir yolunda özellik genişletme kullanır ve sistem hizmeti beyanını satıcı ikilisinden ayırır. Entegrasyon uzmanları, ro.vendor.init_dev_config.path özelliğini kullanarak satıcı ikili programlarının yolunu belirtir ve gerekli SELinux etiketleri ve izinleriyle yapılandırır.
Satıcı uygulama koşulları
init_dev_config ile entegrasyon için:
PRODUCT_VENDOR_PROPERTIESkullanarak derleme sırasında tedarikçi ikili program yolunu yapılandırın. Belirtilen ikili dosya yolu, sisteme yüklenmiş bir ikili dosyanın geçerli yolu olmalıdır:PRODUCT_VENDOR_PROPERTIES += \ ro.vendor.init_dev_config.path=/vendor/bin/init_dev_configBu özellik ayarlanmamışsa
inithizmet yürütmeyi atlar ve başlatma işlemi normal şekilde devam eder.Hizmet
apexd-bootstrap'dan önce çalıştığı için APEX tarafından sağlanan bionic kitaplıkların tamamı henüz kullanılamaz.Android.bpiçindebootstrap: trueolarak ayarlayın:rust_binary { name: "init_dev_config", vendor: true, srcs: ["src/main.rs"], rustlibs: [ "librustutils", ], bootstrap: true, }Donanım varyantını algılayacak ve uygun sistem özelliklerini ayarlayacak hizmet mantığını yazın:
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"); }Satıcı ikili programını
init_dev_config_execile etiketleyin:/vendor/bin/init_dev_config u:object_r:init_dev_config_exec:s0Gerekli mülk türlerini ayarlamak için
init_dev_configalan izni verin:set_prop(init_dev_config, vendor_my_sku_prop)
APEX etkinleştirme ve devre dışı bırakma için init_dev_config kullanma hakkında bilgi edinmek istiyorsanız Vendor APEX selection at bootup (Başlangıçta Vendor APEX seçimi) başlıklı makaleyi inceleyin.
HAL özellikleri
Bir yapılandırmanın doğruluk kaynağı bir cihazdaki donanım bileşeniyse donanımın HAL'si, söz konusu bileşenin bilgilerini sağlamalıdır. Yapılandırmaya erişmek için mevcut HAL'de yeni bir HAL yöntemi tanımlayın. HAL geliştirme hakkında daha fazla bilgi için HAL'ler için AIDL başlıklı makaleyi inceleyin.
Sistem yapılandırması XML dosyaları
Yapılandırma verileri statik ancak karmaşıksa (yapılandırılmış), yapılandırma verileri için XML veya benzeri biçimleri kullanmayı düşünebilirsiniz. Dosya şemasının sabit kaldığından emin olun. XML dosyalarında, şemanın sabit kalmasını sağlamak ve otomatik olarak oluşturulan bir XML ayrıştırıcısından yararlanmak için xsd_config kullanabilirsiniz.
Kaynak eşlemesi
Bir ürünü özelleştirmek için kaynak yer paylaşımlarını kullanabilirsiniz. İki tür kaynak yerleşimi vardır:
Ürünü derleme süresinde özelleştirmek için kullanılan standart kaynak yerleşimi. Standart kaynak yer paylaşımları hakkında bilgi edinmek için Kaynak yer paylaşımlarıyla derlemeyi özelleştirme başlıklı makaleyi inceleyin.
Çalışma zamanı kaynak yerleşimi (RRO), çalışma zamanında hedef paketin kaynak değerlerini değiştirmek için kullanılır. Örneğin, sistem görüntüsüne yüklenen bir uygulama, bir kaynağın değerine bağlı olarak davranışını değiştirebilir. Kaynak değerini derleme süresinde sabit kodlamak yerine, farklı bir bölümde yüklü olan bir RRO, uygulamanın kaynaklarının değerlerini çalışma zamanında değiştirebilir. RRO'lar hakkında daha fazla bilgi için Çalışma zamanında bir uygulamanın kaynaklarının değerini değiştirme başlıklı makaleyi inceleyin.