يوفّر AOSP الخيارات التالية لتخزين معلومات الإعدادات على جهاز:
- سمات النظام
- إعدادات الجهاز عند بدء التشغيل
- خصائص "طبقة تجريد الأجهزة" (HAL)
- ملفات XML لإعدادات النظام
- تراكبات الموارد (الثابتة وفي وقت التشغيل)
سمات النظام
خصائص النظام هي أزواج مفاتيح/قيم من السلاسل يتم تخزينها في القاموس العام build.prop. سمات النظام هي موارد على مستوى النظام يسهل استخدامها ولا تتطلّب أداءً عاليًا. عند استخدام خصائص النظام، لن تحتاج إلى استخدام الاتصال بين العمليات (IPC) حتى إذا كانت إحدى خصائص النظام مشترَكة بين عمليات متعددة. ومع ذلك، تتشابه خصائص النظام مع المتغيرات العامة، ويمكن أن تكون ضارة عند إساءة استخدامها. يمكن أن يؤدي إساءة استخدام خصائص النظام إلى حدوث مشاكل، مثل الثغرات الأمنية وعدم إمكانية وصول المستخدمين إلى التطبيقات. قبل استخدام خصائص النظام لتخزين معلومات الإعداد، ننصحك بالاطّلاع على خيارات الإعداد الأخرى.
لمزيد من المعلومات حول سمات النظام، راجِع إضافة سمات النظام
إعدادات الجهاز عند بدء التشغيل
في نظام التشغيل Android 17 والإصدارات الأحدث، تقدّم خدمة init_dev_config الدعم لإعداد الجهاز وتهيئة خصائص النظام. تعمل آلية البنية الديناميكية هذه تلقائيًا عند بدء التشغيل.
عندما يكون من الضروري أن تتوافق صورة نظام أو صورة مورّد واحدة مع عدة أنواع من الأجهزة، لا يمكن دائمًا ترميز قيم الإعدادات بشكل ثابت في مدّة التصميم. يتم تنفيذ خدمة
init_dev_config خلال مرحلة early-init، قبل apexd-bootstrap مباشرةً، ما يتيح للمورّدين فحص حالة الأجهزة (على سبيل المثال، من وسيط تحميل التشغيل أو الأقسام التي تم تركيبها مبكرًا أو جداول إعدادات الأجهزة) وتهيئة خصائص النظام بشكل ديناميكي قبل تهيئة الخدمات والمكتبات التابعة.
تكامل الخدمات ومراحل استخدامها
يتم تحديد خدمة init_dev_config تلقائيًا في النظام init.rc ويتم تنفيذها بشكل متزامن أثناء early-init، قبل apexd-bootstrap. لا يحتاج القائمون على الدمج إلى الإفصاح عن خدمة init جديدة.
بدلاً من ذلك، تستخدم الخدمة الحالية توسيع الخصائص في مسارها القابل للتنفيذ، ما يؤدي إلى فصل تعريف خدمة تابعة لنظام التشغيل عن ملفات البائع الثنائية. يحدّد القائمون على الدمج مسار البرنامج الثنائي الخاص بالمورّد باستخدام السمة ro.vendor.init_dev_config.path، ويضبطونه باستخدام تصنيفات وأذونات SELinux المطلوبة.
متطلبات تنفيذ البائع
لدمج النطاق مع init_dev_config، اتّبِع الخطوات التالية:
اضبط مسار الملف الثنائي الخاص بالمورّد في وقت الإنشاء باستخدام
PRODUCT_VENDOR_PROPERTIES. يجب أن يكون مسار الملف الثنائي المقدَّم مسارًا صالحًا لملف ثنائي مثبَّت في النظام:PRODUCT_VENDOR_PROPERTIES += \ ro.vendor.init_dev_config.path=/vendor/bin/init_dev_configإذا لم يتم ضبط هذه السمة، ستتخطّى
initتنفيذ الخدمة وستستمر عملية التشغيل بشكل طبيعي.وبما أنّ الخدمة تعمل قبل
apexd-bootstrap، فإنّ مكتبات bionic الكاملة التي يوفّرها APEX لا تكون متاحة بعد. فيAndroid.bp، اضبطbootstrap: true:rust_binary { name: "init_dev_config", vendor: true, srcs: ["src/main.rs"], rustlibs: [ "librustutils", ], bootstrap: true, }اكتب منطق الخدمة لرصد نوع الجهاز وضبط خصائص النظام المناسبة:
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"); }صنِّف البرنامج الثنائي للمورّد باستخدام
init_dev_config_exec:/vendor/bin/init_dev_config u:object_r:init_dev_config_exec:s0امنح إذن النطاق
init_dev_configلضبط أنواع المواقع المطلوبة:set_prop(init_dev_config, vendor_my_sku_prop)
للحصول على معلومات حول استخدام init_dev_config لتفعيل حِزم APEX وإيقافها، يُرجى الاطّلاع على اختيار حِزم APEX الخاصة بالمورّد عند بدء التشغيل.
خصائص HAL
عندما يكون مصدر المعلومات الصحيحة لإعدادات جهاز معيّن هو أحد مكوّنات الجهاز، يجب أن توفّر طبقة تجريد الأجهزة (HAL) الخاصة بالجهاز المعلومات الخاصة بهذا المكوّن. حدِّد طريقة HAL جديدة في HAL الحالي للوصول إلى الإعداد. لمزيد من المعلومات حول تطوير طبقة تجريد الأجهزة (HAL)، يُرجى الاطّلاع على لغة تعريف واجهة Android (AIDL) لطبقات تجريد الأجهزة.
ملفات XML لإعدادات النظام
عندما تكون بيانات الإعداد ثابتة ولكنها معقّدة (منظَّمة)، ننصحك باستخدام XML أو تنسيقات أخرى مشابهة لبيانات الإعداد. تأكَّد من أنّ مخطط الملف يظل ثابتًا. بالنسبة إلى ملفات XML، يمكنك استخدام
xsd_config
للحفاظ على ثبات المخطط، والاستفادة من محلّل XML يتم إنشاؤه تلقائيًا.
تراكب الموارد
يمكنك استخدام تراكبات الموارد لتخصيص منتج. هناك نوعان من تراكبات الموارد:
تراكب الموارد العادي المستخدَم لتخصيص منتج في وقت الإنشاء لمزيد من المعلومات حول تراكبات الموارد العادية، راجِع مقالة تخصيص الإصدار باستخدام تراكبات الموارد.
يُستخدَم تراكب مورد وقت التشغيل (RRO) لتغيير قيم الموارد لحزمة مستهدَفة في وقت التشغيل. على سبيل المثال، قد يغيّر تطبيق مثبَّت على صورة النظام سلوكه استنادًا إلى قيمة أحد الموارد. بدلاً من الترميز الثابت لقيمة المورد في وقت الإنشاء، يمكن أن يغيّر RRO مثبَّت على قسم مختلف قيم موارد التطبيق في وقت التشغيل. لمزيد من المعلومات حول RRO، راجِع تغيير قيمة موارد التطبيق في وقت التشغيل.