Artımlı Dosya Sistemi

Android 11'de kullanıma sunulan Incremental File System (IncFS) çekirdek modülü, Android OS'nin Android Debug Bridge (ADB) üzerinden yayınlanan APK'ları almasını sağlar.

Bu bağımsız çekirdek modülü, mevcut Android dosya sisteminin üzerinde yer alan yeni bir sanal dosya sistemi oluşturur. Bu, uygulama ve oyun geliştiricilerin ADB aracılığıyla Android 11 veya sonraki sürümleri çalıştıran bir cihaza büyük APK'lar dağıtmasına olanak tanımak için çerçeve ve SDK'daki değişiklikleri tamamlar.

Çekirdek değişikliği, yeni bir APK İmza Şeması v4 biçimini etkinleştirir ve Android Paket Yöneticisi'ndeki Android çerçeve değişikliklerini, yeni sistem hizmetlerini ve ADB'de yapılan değişiklikleri destekler.

Uygulama

IncFS'yi uygulamak için OEM'lerin ve SoC üreticilerinin Android cihaz derlemelerine yeni bir çekirdek sürücüsü eklemesi gerekir.

Yalnızca Android 11'de, çekirdek sürücüsü modül olarak oluşturulmuşsa isteğe bağlı olarak yüklenir. ADB artımlı yükleme yoluyla yüklenen uygulama yoksa cihaz, çekirdek sürücüsünü yüklemez.

Aksi takdirde, çekirdek görüntüsünün bir parçası olarak oluşturulduğunda sürücü her zaman yüklenir. Bu uygulama, Android 12 ve sonraki sürümlerde geçerlidir ve Android 11'de kullanılabilir. Çekirdek sürücüsünü Android 12'ye yükseltme hakkında bilgi için Çekirdek sürücüsü yükseltme başlıklı makaleye bakın.

Çekirdek sürücüsü, yayınlanan APK yüklemelerini etkinleştirmek için kullanılan daha büyük bir sistemin parçasıdır. OEM'lerin ve satıcıların, örnek uygulamalarda sağlanan tam IncFS kodunu kullanması gerekmez. Ancak cihazlar arasında tutarlı bir deneyim sağlamak için API uygulamasının, Userspace interface for Incremental FS dokümanında tanımlandığı gibi dosya okuma işlevine ve dizin okuma-yazma işlevine sahip bir dosya sistemine sahip olduğundan emin olmanız gerekir.

Ayrıca, uygulamalarda IncFS örnek uygulamasıyla işlevsel olarak eşleşen bağlama seçenekleri ve özel dosyalar bulunmalıdır.

Aşağıda, uygulamaya alma için gerekli değişiklikler listelenmiştir:

  1. Çekirdeği oluşturmak için geliştirme makinesini kurun.
  2. common-android-mainline dalındaki ortak çekirdeği hedefleyin.
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. IncFS için gereken aşağıdaki değişikliklerin dal ödemesinde olduğunu doğrulayın:
  4. CONFIG_INCREMENTAL_FS=y veya yalnızca Android 11 için CONFIG_INCREMENTAL_FS=m öğesini defconfig dosyasının en altına ekleyin. Örnek görmek için aşağıdaki bağlantılardan birini tıklayın:
  5. Çekirdeği oluşturma
  6. Çekirdeği Android cihaz görüntü derlemesine yerleştirin.
  7. Hedef Android cihazınız için aşağıdaki satıcıya özel sistem özelliği satırlarından birini device.mk dosyanıza ekleyin (Android 12 ve sonraki sürümlerle kullanıma sunulan cihazlarda isteğe bağlıdır):
  8. CONFIG_INCREMENTAL_FS=y kullanırken dosyaya şunlardan birini ekleyin:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    CONFIG_INCREMENTAL_FS=m kullanırken (yalnızca Android 11 için) dosyaya şunlardan birini ekleyin:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Android emülatörü ve Pixel 4 için örnek device.mk dosyalarına bakın.
  10. Yalnızca Android 11 için: CONFIG_INCREMENTAL_FS=m kullanıyorsanız SE Linux Kuralları'nı ekleyin.
  11. Aşağıdaki içeriğe sahip bir vold.te dosyası oluşturup cihazınızdaki /system/sepolicy/vendor klasörüne ekleyin:

    • vold.te

    Artımlı dosya sistemi sürücüsünü yüklemesine izin verin:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    /system/sepolicy/vendor klasörünüzde bulunan mevcut file.te dosyasına aşağıdaki SE Linux kurallarını ekleyin:

    • file.te dosyası (Örnek için bu file.te dosyasına bakın.)
    • Artımlı dosya sistemi sürücüsü
    • type vendor_incremental_module, vendor_file_type, file_type;

    Aşağıdaki SE Linux kurallarını, /system/sepolicy/vendor klasörünüzde bulunan mevcut file_contents dosyasına ekleyin:

    • file_contents dosyası: Örnek için bu file_contents dosyasına bakın.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Çekirdek sürücüsü yükseltmesi

Android 12'ye yükseltilen cihazlarda IncFS sürücüsünün eski bir sürümü bulunabilir. AOSP, bu cihazlarda IncFS sürücüsünü mevcut sürüme (bu durumda v2) güncellemenizi önerir. Bunun nedenleri şunlardır:

  • Android 11 ile yayınlanan sürüm, IncFS'nin yalnızca ADB yükleme desteğini hedefleyen ilk uygulamasıdır.
  • Android 12, Play oyunlarının akışla yüklenmesi için IncFS sürücüsünü kullanır. Bu sürücü, daha iyi bir kullanıcı deneyimi için IncFS v2'nin yeni özelliklerini ve optimizasyonlarını gerektirir.
  • V1, oyun akışını destekler ancak performans cezalarıyla ve v2'ye kıyasla daha yüksek pil, CPU ve RAM kullanımıyla yapar.
  • V2, akış için gelişmiş kullanıcı deneyimi sunar. Bu sürümde sorunsuz ilerleme animasyonları, hassas disk alanı kullanımı raporlaması ve üçüncü taraf uygulamalarının akışa müdahalesini önleme gibi özellikler bulunur.

Çekirdeğinizdeki IncFS sürücüsünü yükseltmek için çekirdek 4.14 veya çekirdek 4.19 için aşağıdaki yamaları uygulayın:

Diğer tüm özel çekirdek sürümleri için lütfen yama kümelerinden birini taşıyın. Bu değişiklikler yalnızca fs/incfs dizinini etkiler ve mevcut v1 koduna sorunsuz bir şekilde uygulanır.

IncFS sürücüsünü, orijinal sürümde olduğu gibi kullanmaya devam edin. Ancak artık çekirdek görüntüsünün yerleşik bir parçası veya ayrı bir modül olarak yükseltilmiş Android 11'de kullanabilirsiniz. Sistem kartını veya sistem özelliği yapılandırmasını değiştirmeyin.

GKI çekirdek görüntüsü kullanan yeni cihazlar, çekirdek görüntüsünün bir parçası olarak yapılandırılan en yeni (v2) IncFS sürücüsünü otomatik olarak alır. Bu işlem için ek adım gerekmez.

Yüklenebilir modül yapılandırması Android 12'de kullanımdan kaldırıldı ve yeni cihazlarda desteklenmiyor. Yalnızca yükseltmelerde veya orijinal çekirdek zaten bir modül olarak oluşturulmuşsa satıcı resim dondurma işleminde izin verilir.

Referans uygulamalar

Bu uygulama, çekirdek görüntüsünün bir parçası olarak veya (yalnızca Android 11 için) yüklenebilir bir modül olarak kabul edilebilir.

Yüklenebilir modül (Pixel 4 cihazı) Android Emulator (çekirdek görüntüsünün bir parçası olarak)

Doğrulama ve test

Özellik birimi testleri, CTS ve GTS kullanarak uygulamayı doğrulayın.

CTS

CtsIncrementalInstallHostTestCases e-posta adresini kullanın.

GTS

atest GtsIncrementalInstallTestCases:

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

IncFS'yi test etme

  1. Geliştirme ortamı kurun.
  2. Uygulama bölümünde belirtilen uygulama görevlerini tamamlayın.
  3. Aşağıdaki manuel testleri çalıştırın:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

Android SDK ile IncFS'yi test etme (ADB ve apksigner)

  • Geliştirme ortamı kurun.
  • Uygulama bölümünde belirtilen uygulama görevlerini tamamlayın.
  • Derlemeyi hedef fiziksel cihaza veya emülatöre yükleyin.
  • APK oluşturun veya mevcut bir APK'yı edinin.
  • Hata ayıklama imzalama anahtarı oluşturun.
  • build-tools klasöründeki v4 imza biçimiyle APK'yı imzalayın.
    ./apksigner sign --ks debug.keystore game.apk
  • APK'yı platform-tools klasöründen cihaza yükleyin.
    ./adb install game.apk
Yükleme örneği
Şekil 1: Yükleme örneği

Bu testleri bulma