SDV, A/B (sorunsuz) sistem güncellemeleri için standart Android yaklaşımını izler. AOSP dokümanları öncelikli olarak SDV için geçerlidir. Bu sayfada, SDV'ye özgü kullanım ve güncelleme paketleri oluşturup uygulama için bilinen iyi yollar ayrıntılı olarak açıklanmaktadır.
Şu anda SDV, sanal olmayan A/B güncellemelerini kullanacak şekilde yapılandırılmıştır.
Başlatma kontrolü HAL'ını uygulama
Cuttlefish için SDV Core görüntüsü (sdv_core_cf), hardware/interfaces/boot/aidl/default/ temel alınarak önyükleme kontrolü HAL'nin standart bir uygulamasını sağlar. Diğer önyükleyicilerin, A/B güncellemelerini desteklemek için HAL'yi uygulaması gerekir.
Ayrıntılar için AOSP dokümanlarının Önyükleme kontrolü HAL'sini uygulama bölümüne bakın. Uygulamayı test etmek için hata ayıklama (eng ve userdebug) SDV görüntülerinde bulunan bootctl'yi kullanabilirsiniz.
OTA paketi oluşturma
Daha fazla bilgi için OTA paketleri oluşturma başlıklı makaleyi inceleyin. Bu sayfadaki talimatlar, AOSP belgelerine küçük farklılıklarla uygundur.
Güncellemenin tamamı
Depo kökünden:
source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
Bu komutlar, dist_output dizininde hedef dosyalar oluşturur. sdv_core_cf'nın yerel derlemeleri için bu değer normalde sdv_core_cf-target_files-$USER.zip'dir.
OTA paketi oluşturmak için ota_from_target_files kullanmanız gerekir. AOSP'den farklı olarak, paket m dist'nın bir parçası olarak oluşturulmaz.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
Artımlı güncelleme
AOSP'dekiyle aynı ota_from_target_files çağrısı:
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 paketi yükleme
Güncellemeler, update_engine hizmeti kullanılarak yüklenir. SDV derlemelerinde hata ayıklama
güncelleme sürecinde hata ayıklamak ve süreci test etmek için kullanılabilecek update_engine_client içerir.
OTA paketini yüklemek için şu komutu çalıştırın:
system/update_engine/scripts/update_device.py ota_update.zip
Güncelleme doğru şekilde yüklenirse (son durum UPDATE_STATUS_UPDATED_NEED_REBOOT ve sonuç ErrorCode::kSuccess ise) güncelleme, bir sonraki yeniden başlatma işleminde etkinleştirilir.
Sürüm oluşturma
SDV, sistem güncellemeleri için bir OTA paketinin şartları karşılayıp karşılamadığını ve yüklenip yüklenemeyeceğini belirlemek üzere Android'in OTA paket meta verilerini kullanır.
SDV, APEX için de güncellenebilirlik konusunda Android'in kavramlarını takip eder. Bu nedenle, APEX bootstrap APEX değilse güncellenebilir. Bootstrap APEX, sistem güncellemeleri aracılığıyla güncellenmelidir ve şu koşullardan biri geçerli olmalıdır:
- Bildirilen sürüm, önceden yüklenmiş sürümden daha yüksek ve her ikisi de 1'e eşit veya 1'den büyükse,
veya
- Bildirilen sürüm, önceden yüklenmemiş bir APEX'tir ve sürüm, kara listede varsa kara listedeki sürümden daha yüksektir.
SDV genellikle bir ağdaki birden fazla sisteme dağıtılır. Bu nedenle, tek bir sistemde yapılan güncellemelerin doğru şekilde yürütüldüğünden emin olmanız gerekir. Ancak bu bakım, tüm sistemlerin düzgün şekilde iletişim kurabileceğini garanti etmez.
Ağın genelini güncellemeniz de aynı derecede önemlidir. Bunun için hizmet paketlerindeki güncellemelerin tüm makinelere aynı anda dağıtılması veya güncellemelerin, arayüzde uyumsuz değişiklikler gibi, kesintiye neden olan değişiklikler içermemesi gerekir.
SDV, uyumsuz değişiklikleri tespit etmek için araçlar sunmasa da kurallarımızda arayüzlerde yapılan değişikliklerin nasıl uzlaştırılacağı ve değişikliklerin dağıtılması için gereken en iyi uygulamalar açıklanmaktadır.
Ayrıca SDV, sistem ve APEX güncellemeleri için geri alma mekanizmalarını destekler. Sistem yanlışlıkla tatmin edici olmayan bir duruma girerse bilinen son tatmin edici durumu geri yükleyebiliriz.