SDV از رویکرد استاندارد اندروید یعنی بهروزرسانیهای سیستم A/B (یکپارچه) پیروی میکند. مستندات AOSP عمدتاً برای SDV اعمال میشود. این صفحه جزئیات مربوط به کاربردهای خاص SDV و مسیرهای خوب شناخته شده برای ساخت و اعمال بستههای بهروزرسانی را شرح میدهد.
در حال حاضر SDV طوری پیکربندی شده است که از بهروزرسانیهای A/B غیر مجازی استفاده کند.
پیادهسازی کنترل بوت HAL
ایمیج SDV Core برای Cuttlefish ( sdv_core_cf ) یک پیادهسازی استاندارد از HAL کنترل بوت را بر اساس hardware/interfaces/boot/aidl/default/ ارائه میدهد. سایر بوتلودرها باید HAL را برای پشتیبانی از بهروزرسانیهای A/B پیادهسازی کنند.
برای جزئیات بیشتر به بخش پیادهسازی کنترل بوت HAL در مستندات AOSP مراجعه کنید. میتوانید از bootctl موجود در تصاویر SDV debug ( eng و userdebug ) برای آزمایش پیادهسازی استفاده کنید.
یک بسته OTA ایجاد کنید
برای کسب اطلاعات بیشتر، به بخش «ساخت بستههای OTA» مراجعه کنید. دستورالعملهای این صفحه، با اندکی تفاوت، از مستندات AOSP پیروی میکنند.
بهروزرسانی کامل
از ریشه مخزن:
source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
این دستورات فایلهای هدف را در دایرکتوری dist_output تولید میکنند. برای نسخههای محلی sdv_core_cf این فایل معمولاً sdv_core_cf-target_files-$USER.zip است.
برای تولید یک بسته OTA، باید ota_from_target_files استفاده کنید. برخلاف AOSP، این بسته به عنوان بخشی از m dist ساخته نمیشود.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
بهروزرسانی افزایشی
همان فراخوانی ota_from_target_files که در AOSP وجود دارد:
ota_from_target_files \
-i PREVIOUS-sdv_core_cf-target_files.zip \
dist_new/sdv_core_cf-target_files-$USER.zip \
incremental_ota_update.zip
نصب بسته OTA
بهروزرسانیها با استفاده از سرویس update_engine نصب میشوند. نسخههای Debug SDV شامل update_engine_client هستند که میتوانند برای اشکالزدایی و آزمایش فرآیند بهروزرسانی مورد استفاده قرار گیرند.
برای نصب یک بسته OTA، دستور زیر را اجرا کنید:
system/update_engine/scripts/update_device.py ota_update.zip
اگر بهروزرسانی به درستی نصب شده باشد (وضعیت نهایی UPDATE_STATUS_UPDATED_NEED_REBOOT و نتیجه ErrorCode::kSuccess باشد)، بهروزرسانی در راهاندازی مجدد بعدی فعال خواهد شد.
نسخهبندی
برای بهروزرسانیهای سیستم، SDV از فرادادههای بسته OTA اندروید استفاده میکند تا مشخص کند که آیا یک بسته OTA الزامات را برآورده میکند و میتوان آن را نصب کرد یا خیر.
همچنین برای APEX، SDV از مفاهیم اندروید در مورد قابلیت بهروزرسانی پیروی میکند. بنابراین، یک APEX میتواند زمانی بهروزرسانی شود که APEX یک APEX بوتاسترپ نباشد. APEX بوتاسترپ باید از طریق بهروزرسانیهای سیستم بهروزرسانی شود و یا:
- نسخه اعلامشده بالاتر از نسخه از پیش نصبشده است و هر دو بزرگتر یا مساوی ۱ هستند،
یا،
- نسخه اعلام شده یک APEX از پیش نصب نشده است و نسخه آن بالاتر از نسخه موجود در لیست انکار است، در صورت وجود.
SDV معمولاً در چندین سیستم در یک شبکه مستقر میشود. بنابراین، باید اطمینان حاصل کنید که بهروزرسانیهای انجام شده در یک سیستم واحد به درستی اجرا میشوند. با این حال، این دقت تضمین نمیکند که همه سیستمها بتوانند به درستی ارتباط برقرار کنند.
به همان اندازه مهم است که کل شبکه را بهروزرسانی کنید، که مستلزم آن است که بهروزرسانیهای بستههای خدماتی یا به طور همزمان روی همه دستگاهها اعمال شوند یا بهروزرسانیها حاوی هیچ تغییر مخربی نباشند. به عنوان مثال، تغییرات ناسازگار در رابط کاربری.
اگرچه SDV ابزاری برای تشخیص تغییرات ناسازگار ارائه نمیدهد، دستورالعملهای ما نحوه تطبیق تغییرات ایجاد شده در رابطها و همچنین بهترین شیوههای لازم برای استقرار تغییرات را شرح میدهند.
علاوه بر این، SDV از مکانیزمهای بازگشت به عقب برای بهروزرسانیهای سیستم و APEX پشتیبانی میکند. اگر سیستم ناخواسته وارد یک حالت نامطلوب شود، میتوانیم آخرین حالت مطلوب شناخته شده را بازیابی کنیم.