AB dışı güncellemeler, eski Android cihazlar (Android 6 ve önceki sürümler) tarafından kullanılan ve desteği sonlandırılmış bir OTA metodolojisidir. Bu cihazlarda, indirilen güncelleme paketini açmak ve güncellemeyi diğer bölümlere uygulamak için gereken yazılımı içeren özel bir kurtarma bölümü bulunur.
A/B bölümü olmayan eski Android cihazlarda, flash alanı genellikle aşağıdaki bölümleri içerir:
- önyükleme
- Linux çekirdeğini ve minimum bir kök dosya sistemini (RAM diskine yüklenir) içerir. Sistem ve diğer bölümleri bağlar ve sistem bölümünde bulunan çalışma zamanını başlatır.
- sistem
- Android Açık Kaynak Projesi'nde (AOSP) kaynak kodu bulunan sistem uygulamalarını ve kitaplıklarını içerir. Normal çalışma sırasında bu bölüm salt okunur olarak monte edilir; içeriği yalnızca OTA güncellemesi sırasında değişir.
- otomatik satış makinesi
- Android Açık Kaynak Projesi'nde (AOSP) kaynak kodu bulunmayan sistem uygulamalarını ve kitaplıklarını içerir. Normal çalışma sırasında bu bölüm salt okunur olarak monte edilir; içeriği yalnızca OTA güncellemesi sırasında değişir.
- userdata
- Kullanıcı tarafından yüklenen uygulamalar tarafından kaydedilen verileri vb. saklar. Bu bölüme normalde OTA güncelleme işlemi tarafından dokunulmaz.
- önbellek
- Birkaç uygulama tarafından kullanılan geçici bekleme alanı (bu bölüme erişmek için özel uygulama izinleri gerekir) ve indirilen OTA güncelleme paketlerinin depolanması için kullanılır. Diğer programlar, dosyaların diledikleri zaman kaybolabileceği beklentisiyle bu alanı kullanır. Bazı OTA paketi yüklemeleri bu bölümün tamamen silinmesine neden olabilir. Önbellek, OTA güncellemesinden gelen güncelleme günlüklerini de içerir.
- kurtarma
- Bir çekirdek ve bir paketi okuyup diğer bölümleri güncellemek için içeriğini kullanan özel kurtarma ikili dosyası da dahil olmak üzere ikinci bir tam Linux sistemi içerir.
- misc
- OTA paketi uygulanırken cihazın yeniden başlatılması ihtimaline karşı, kurtarma işlemi tarafından ne yaptığıyla ilgili bazı bilgileri saklamak için kullanılan küçük bölüm.
OTA güncellemelerinin yaşam döngüsü
Tipik bir OTA güncellemesi aşağıdaki adımları içerir:
- Cihaz, OTA sunucularıyla düzenli olarak iletişim kurar ve güncelleme paketinin URL'si ile kullanıcıya gösterilecek bir açıklama dizesi de dahil olmak üzere güncelleme kullanılabilirliği hakkında bilgilendirilir.
-
İndirilenleri bir önbelleğe veya veri bölümüne güncelleyin. Bu işlemin kriptografik imzası,
/system/etc/security/otacerts.zip
içindeki sertifikalar ile doğrulanır. Kullanıcıdan güncellemeyi yüklemesi istenir. - Cihaz, önyükleme bölümündeki çekirdek yerine kurtarma bölümündeki çekirdeğin ve sistemin başlatıldığı kurtarma modunda yeniden başlatılır.
-
Kurtarma ikili dosyası, init tarafından başlatılır.
/cache/recovery/command
dosyasında, indirilen pakete işaret eden komut satırı bağımsız değişkenlerini bulur. -
Kurtarma, paketin kriptografik imzasını
/res/keys
(kurtarma bölümündeki RAM diskinin bir parçası) içindeki ortak anahtarlarla karşılaştırarak doğrular. - Veriler paketten alınır ve gerektiğinde önyükleme, sistem ve/veya tedarikçi bölümünü güncellemek için kullanılır. Sistem bölümünde bırakılan yeni dosyalardan biri, yeni kurtarma bölümünün içeriğini içerir.
-
Cihaz normal şekilde yeniden başlatılır.
- Yeni güncellenen önyükleme bölümü yüklenir ve yeni güncellenen sistem bölümündeki ikili dosyaları bağlayıp yürütmeye başlar.
-
Normal başlatma işleminin bir parçası olarak sistem, kurtarma bölümünün içeriğini istenen içeriklerle (daha önce
/system
içinde dosya olarak depolanan) karşılaştırır. Bu içerikler farklı olduğundan kurtarma bölümü, istenen içeriklerle yeniden yüklenir. (Sonraki önyüklemelerde, kurtarma bölümü zaten yeni içeriği içerdiğinden yeniden yanıp sönme gerekmez.)
Sistem güncellemesi tamamlandı. Güncelleme günlüklerini /cache/recovery/last_log.#
adresinde bulabilirsiniz.
Paketleri güncelleme
Güncelleme paketi, yürütülebilir ikili dosyayı META-INF/com/google/android/update-binary
içeren bir .zip
dosyasıdır. recovery
, paketteki imzayı doğruladıktan sonra bu ikili dosyayı /tmp
'a çıkarır ve aşağıdaki bağımsız değişkenleri ileterek ikili dosyayı çalıştırır:
- Binary Authorization API sürüm numarasını güncelleyin. Güncelleme ikilisine iletilen bağımsız değişkenler değişirse bu sayı artar.
- Komut borusunun dosya tanımlayıcısı. Güncelleme programı, bu boruyu kullanarak kurtarma ikilisine komut gönderebilir. Bu komutlar çoğunlukla kullanıcıya ilerleme durumunu göstermek gibi kullanıcı arayüzü değişiklikleri için kullanılır.
-
Güncelleme paketi
.zip
dosyasının adı.
Güncelleme paketi, güncelleme ikili dosyası olarak statik olarak bağlı herhangi bir ikili dosyayı kullanabilir. OTA paket oluşturma araçları, birçok yükleme görevini yapabilecek basit bir komut dosyası dili sağlayan güncelleyici programını (bootable/recovery/updater
) kullanır. Cihaz üzerinde çalışan diğer tüm ikili dosyaları değiştirebilirsiniz.
Güncelleme ikili dosyası, edify söz dizimi ve yerleşik işlevler hakkında ayrıntılı bilgi için OTA Paketlerinin İç Yapısı başlıklı makaleyi inceleyin.
Önceki sürümlerden taşıma
Android 2.3/3.0/4.0 sürümünden geçişte yapılan en önemli değişiklik, cihaza özgü tüm işlevlerin önceden tanımlanmış adlara sahip bir C işlevleri grubundan C++ nesnelerine dönüştürülmesidir. Aşağıdaki tabloda, eski işlevler ve yaklaşık olarak eşdeğer bir amaca hizmet eden yeni yöntemler listelenmiştir:
C işlevi | C++ yöntemi |
---|---|
device_recovery_start() | Device::RecoveryStart() |
device_toggle_display() device_reboot_now() |
RecoveryUI::CheckKey() (ayrıca RecoveryUI::IsKeyPressed()) |
device_handle_key() | Device::HandleMenuKey() |
device_perform_action() | Device::InvokeMenuItem() |
device_wipe_data() | Device::WipeData() |
device_ui_init() | ScreenRecoveryUI::Init() |
Eski işlevlerin yeni yöntemlere dönüştürülmesi oldukça basit bir işlemdir. Yeni make_device()
sınıfınızın bir örneğini oluşturup döndürmek için yeni make_device()
işlevini eklemeyi unutmayın.