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 (RAM diskine yüklenmiş) içerir. 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 Projesinde (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 bağlanır; içeriği yalnızca OTA güncellemesi sırasında değişir.
SATICI
Android Açık Kaynak Projesinde (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 bağlanır; içeriği yalnızca OTA güncellemesi sırasında değişir.
Kullanıcı bilgisi
Kullanıcı tarafından yüklenen uygulamalar vb. tarafından kaydedilen verileri saklar. Bu bölüme normalde OTA güncelleme işlemi tarafından dokunulmaz.
önbellek
Birkaç uygulama tarafından kullanılan (bu bölüme erişim özel uygulama izinleri gerektirir) ve indirilen OTA güncelleme paketlerinin depolanması için kullanılan geçici saklama alanı. Diğer programlar bu alanı dosyaların herhangi bir zamanda 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.
iyileşmek
Bir çekirdek ve bir paketi okuyan ve içeriğini diğer bölümleri güncellemek için kullanan özel kurtarma ikili programı da dahil olmak üzere ikinci bir eksiksiz Linux sistemi içerir.
çeşitli
Kurtarma tarafından, OTA paketi uygulanırken cihazın yeniden başlatılması durumunda ne yaptığına ilişkin bazı bilgileri saklamak için 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ında düzenli olarak check-in gerçekleştirir ve güncelleme paketinin URL'si ve kullanıcıya gösterilecek bir açıklama dizesi de dahil olmak üzere bir güncellemenin varlığı konusunda bilgilendirilir.
  2. İndirmeleri bir önbelleğe veya veri bölümüne güncelleyin ve şifreleme imzası, /system/etc/security/otacerts.zip dosyasındaki sertifikalara göre doğrulanır. Kullanıcıdan güncellemeyi yüklemesi istenir.
  3. Cihaz, ö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 programı init tarafından başlatılır. /cache/recovery/command dosyasında onu indirilen pakete yönlendiren komut satırı argümanlarını bulur.
  5. Kurtarma, paketin kriptografik imzasını /res/keys (kurtarma bölümünde bulunan RAM diskinin bir parçası) içindeki genel 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ıyor.
    1. Yeni güncellenen önyükleme bölümü yüklenir ve ikili dosyaları yeni güncellenen sistem bölümüne bağlar ve çalıştırmaya başlar.
    2. Normal başlatmanın bir parçası olarak sistem, kurtarma bölümünün içeriğini istenen içeriklerle (daha önce /system dosyasında saklanan) karşılaştırır. Farklıdırlar, bu nedenle kurtarma bölümü istenen içerikle yeniden oluşturulur. (Sonraki önyüklemelerde kurtarma bölümü zaten yeni içerikleri içerir, dolayısıyla yeniden başlatmaya gerek yoktur.)

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

Paketleri güncelle

Güncelleme paketi, yürütülebilir ikili META-INF/com/google/android/update-binary içeren bir .zip dosyasıdır. Paketteki imzayı doğruladıktan sonra recovery bu ikili dosyayı /tmp dosyasına çıkarır ve aşağıdaki bağımsız değişkenleri 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 kullanıcı arayüzü değişiklikleri için komutları kurtarma ikili dosyasına geri göndermek için bu kanalı kullanabilir.
  • Güncelleme paketinin dosya adı .zip dosyası .

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

Güncelleyici ikili programı, düzenleme sözdizimi ve yerleşik işlevlerle ilgili ayrıntılar için OTA Paketlerinin İçinde bölümüne bakın.

Önceki sürümlerden geçiş yapın

Android 2.3/3.0/4.0 sürümünden geçiş sırasında en büyük 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 tabloda, kabaca eşdeğer bir amaca hizmet eden eski işlevler ve yeni yöntemler listelenmektedir:

C işlevi C++ yöntemi
Device_recovery_start() Cihaz::RecoveryStart()
Device_toggle_display()
Device_reboot_now()
RecoveryUI::CheckKey()
(ayrıca RecoveryUI::IsKeyPressed())
Device_handle_key() Cihaz::HandleMenuKey()
Device_perform_action() Cihaz::InvokeMenuItem()
Device_wipe_data() Cihaz::WipeData()
Device_ui_init() ScreenRecoveryUI::Init()

Eski fonksiyonların 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.