A/B olmayan sistem güncellemeleri

A/B bölümleri olmayan eski Android cihazlarda, flash alanı genellikle aşağıdaki bölümleri içerir:

bot
Linux çekirdeğini ve minimum kök dosya sistemini içerir (bir RAM diskine yüklenir). Sistemi 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ı içerir. Normal çalışma sırasında bu bölüm salt okunur olarak takılır; içeriği yalnızca bir OTA güncellemesi sırasında değişir.
SATICI
Android Açık Kaynak Projesi'nde (AOSP) kaynak kodu bulunmayan sistem uygulamalarını ve kitaplıkları içerir. Normal çalışma sırasında bu bölüm salt okunur olarak takılır; içeriği yalnızca bir OTA güncellemesi sırasında değişir.
Kullanıcı bilgisi
Kullanıcı tarafından yüklenen uygulamalar vb. tarafından kaydedilen verileri depolar. Bu bölüme normalde OTA güncelleme işlemi tarafından dokunulmaz.
önbellek
Birkaç uygulama tarafından kullanılan geçici tutma alanı (bu bölüme erişim özel uygulama izinleri gerektirir) ve indirilen OTA güncelleme paketlerinin depolanması için. Diğer programlar bu alanı dosyaların her an kaybolabileceği beklentisiyle kullanır. Bazı OTA paketi kurulumları, bu bölümün tamamen silinmesine neden olabilir. Önbellek ayrıca bir OTA güncellemesinden gelen güncelleme günlüklerini de içerir.
kurtarma
Bir çekirdek ve bir paketi okuyan ve içeriğini diğer bölümleri güncellemek için kullanan özel kurtarma ikili dosyası da dahil olmak üzere ikinci bir eksiksiz Linux sistemi içerir.
çeşitli
OTA paketi uygulanırken cihazın yeniden başlatılması durumunda ne yaptığı hakkında bazı bilgileri saklamak için kurtarma tarafından kullanılan küçük bölüm.

OTA güncellemesinin ömrü

Tipik bir OTA güncellemesi aşağıdaki adımları içerir:

  1. Cihaz, OTA sunucuları ile düzenli olarak kontrol eder ve güncelleme paketinin URL'si ve kullanıcıya göstermek için bir açıklama dizisi de dahil olmak üzere bir güncellemenin kullanılabilirliği konusunda bilgilendirilir.
  2. İndirmeleri bir önbelleğe veya veri bölümüne güncelleyin ve kriptografik imzası /system/etc/security/otacerts.zip içindeki sertifikalarla doğrulanır. Kullanıcıdan güncellemeyi yüklemesi istenir.
  3. Aygıt, önyükleme bölümündeki çekirdek yerine kurtarma bölümündeki çekirdek ve sistemin önyüklendiği kurtarma modunda yeniden başlatılır.
  4. Kurtarma ikili dosyası init tarafından başlatılır. /cache/recovery/command içinde, onu indirilen pakete yönlendiren komut satırı argümanlarını bulur.
  5. Kurtarma, paketin şifreli imzasını /res/keys (kurtarma bölümünde bulunan RAM diskinin bir parçası) içindeki ortak anahtarlara göre doğrular.
  6. Veriler paketten alınır ve gerektiğinde önyükleme, sistem ve/veya satıcı bölümlerini güncellemek için kullanılır. Sistem bölümünde kalan yeni dosyalardan biri, yeni kurtarma bölümünün içeriğini içerir.
  7. Cihaz normal şekilde yeniden başlatılır.
    1. Yeni güncellenen önyükleme bölümü yüklenir ve yeni güncellenen sistem bölümünde ikili dosyaları bağlar ve yürütmeye başlar.
    2. Normal başlatmanın bir parçası olarak, sistem kurtarma bölümünün içeriğini istenen içerikle (daha önce /system içinde bir dosya olarak depolanmış olan) karşılaştırarak kontrol eder. Farklıdırlar, bu nedenle kurtarma bölümü istenen içerikle yeniden başlatılır. (Sonraki önyüklemelerde, kurtarma bölümü yeni içerikleri zaten içerir, bu nedenle yeniden başlatma gerekmez.)

Sistem güncellemesi tamamlandı! Güncelleme günlükleri /cache/recovery/last_log. # .

Paketleri güncelle

Bir güncelleme paketi, yürütülebilir ikili META-INF/com/google/android/update-binary dosyasını içeren bir .zip dosyasıdır. Paket üzerindeki imzayı doğruladıktan sonra recovery , bu ikili dosyayı /tmp çıkarır ve aşağıdaki argümanları ileterek ikili dosyayı çalıştırır:

  • İkili API sürüm numarasını güncelleyin . Güncelleme ikili dosyasına iletilen bağımsız değişkenler değişirse, bu sayı artar.
  • Komut kanalının dosya tanımlayıcısı . Güncelleme programı, çoğunlukla kullanıcıya ilerlemeyi belirtmek gibi UI değişiklikleri için komutları kurtarma ikili dosyasına geri göndermek için bu boruyu kullanabilir.
  • Güncelleme paketinin dosya adı .zip dosyası .

Bir güncelleme paketi, güncelleme ikili dosyası olarak statik olarak bağlantılı herhangi bir ikili dosyayı kullanabilir. OTA paketi oluşturma araçları, birçok yükleme görevini gerçekleştirebilen basit bir komut dosyası dili sağlayan güncelleyici programını ( bootable/recovery/updater ) kullanır. Cihazda çalışan diğer ikili dosyaları değiştirebilirsiniz.

Güncelleyici ikili dosyası, sözdizimini düzenleme ve yerleşik işlevler hakkında ayrıntılar için, bkz. Inside OTA Packages .

Önceki sürümlerden geçiş

Android 2.3/3.0/4.0 sürümünden geçiş yaparken, ana değişiklik, cihaza özgü tüm işlevlerin önceden tanımlanmış adlara sahip bir dizi C işlevinden C++ nesnelerine dönüştürülmesidir. Aşağıdaki tablo, kabaca eşdeğer bir amaca hizmet eden eski işlevleri ve yeni yöntemleri listeler:

C işlevi C++ yöntemi
device_recovery_start() Aygıt::KurtarmaBaşlangıcı()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(ayrıca RecoveryUI::IsKeyPressed())
device_handle_key() Cihaz::HandleMenuKey()
device_perform_action() Aygıt::InvokeMenuItem()
device_wipe_data() Aygıt::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

Eski işlevlerin yeni yöntemlere dönüştürülmesi oldukça basit olmalıdır. Yeni Device alt sınıfınızın bir örneğini oluşturmak ve döndürmek için yeni make_device() işlevini eklemeyi unutmayın.