Artımlı Dosya Sistemi

Android 11'de kullanıma sunulan Artımlı Dosya Sistemi (IncFS) çekirdek modülü, Android OS'in Android Hata Ayıklama Köprüsü (ADB) üzerinden aktarılan APK'ları almasını sağlar.

Bu bağımsız çekirdek modülü, mevcut Android dosya sisteminin üzerine yerleştirilen yeni bir sanal dosya sistemi oluşturur. Bu, uygulama ve oyun geliştiricilerin Android 11 veya sonraki sürümleri çalıştıran bir cihaza ADB üzerinden büyük APK'lar dağıtmasına olanak tanımak için çerçeve ve SDK'da yapılan 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çevesi değişikliklerini, yeni sistem hizmetlerini ve ADB'deki değişiklikleri destekler.

Uygulama

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

Yalnızca Android 11 için, çekirdek sürücüsü modül olarak oluşturulduysa isteğe bağlı olarak yüklenir. ADB artımlı yükleme aracılığıyla yüklenen uygulama yoksa cihaz çekirdek sürücüsünü yüklemez.

Aksi takdirde, çekirdek resminin bir parçası olarak derlendiğinde sürücü her zaman yüklenir. Bu uygulama Android 12 ve sonraki sürümler için geçerlidir ve Android 11 ile kullanılabilir. Çekirdek sürücüsünü Android 12'ye yükseltme hakkında bilgi edinmek için Çekirdek sürücü yükseltme başlıklı makaleyi inceleyin.

Çekirdek sürücüsü, akışla APK yüklemelerini etkinleştirmek için daha büyük bir sistemin parçasıdır. OEM'lerin ve tedarikçilerin, örnek uygulamalarda sağlanan IncFS kodunu aynen kullanması gerekmez. Ancak cihazlar arasında tutarlı bir deneyim sağlamak için API uygulamasında, Artımlı Dosya Sistemi için Kullanıcı Alanı Arayüzü dokümanlarında tanımlandığı şekilde dosya okuma işlevine ve dizin okuma/yazma işlevine sahip bir dosya sistemi bulunduğundan emin olmanız gerekir.

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

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

  1. Çekirdeği derlemek için geliştirme makinesini kur.
  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 şube ödemesinde bulunduğundan emin olun:
  4. defconfig dosyasının alt kısmına CONFIG_INCREMENTAL_FS=y veya yalnızca Android 11 için CONFIG_INCREMENTAL_FS=m 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 resmi derlemesine yerleştirin.
  7. Hedef Android cihazınız için device.mk dosyanıza aşağıdaki tedarikçiye özgü sistem özelliği satırlarından birini 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 aşağıdakilerden birini ekleyin:

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

    CONFIG_INCREMENTAL_FS=m kullanırken (yalnızca Android 11 için), dosyaya aşağıdakilerden 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ızın /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üzdeki 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üzdeki 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ü 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ü aşağıdaki nedenlerle mevcut sürüme (bu durumda v2) güncellemenizi önerir:

  • Android 11 ile birlikte yayınlanan sürüm, yalnızca ADB yükleme desteği için hedeflenen IncFS'nin ilk uygulamasıdır.
  • Android 12, Play oyunlarının akış yüklemeleri 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.
  • 1. sürüm, oyun aktarımını destekler ancak bunu yaparken performans cezasına uğrar ve 2. sürüme kıyasla daha fazla pil, CPU ve RAM kullanır.
  • V2, akış için daha iyi bir kullanıcı deneyimi sunar. Bu sürümde, akışın pürüzsüz ilerlemesini sağlayan animasyonlar, disk alanı kullanımıyla ilgili doğru raporlar ve üçüncü taraf uygulamalarının akışa müdahale etmesini önleyen özellikler bulunur.

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

Diğer tüm özel çekirdek sürümleri için lütfen yamalar paketlerinden birini taşıyın. Bunlar 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 kernel resminin yerleşik bir parçası olarak veya ayrı bir modül olarak yükseltilmiş Android 11'i kullanın. Sistem kartını veya sistem mülkü yapılandırmasını değiştirmeyin.

GKI çekirdek resmi kullanan yeni cihazlar, çekirdek resminin bir parçası olarak yapılandırılmış en son (v2) IncFS sürücüsünü otomatik olarak alır. Bunun için ek adımlar gerekmez.

Yüklenebilir modül yapılandırması Android 12'de kullanımdan kaldırıldı ve yeni cihazlarda desteklenmiyor. Yalnızca yükseltmeler için veya orijinal çekirdekte zaten modül olarak oluşturulmuşsa tedarikçi firma görüntüsünün dondurulması için izin verilir.

Referans uygulamalar

Bu uygulama, bir çekirdek resminin parçası olarak veya (yalnızca Android 11 için) yüklenebilir bir modül olarak düşünülebilir.

Yüklenebilir modül (Pixel 4 cihaz) Android Emülatörü (çekirdek resminin bir parçası olarak)

Doğrulama ve test

Özellik birimi testlerini, CTS'yi ve GTS'yi kullanarak uygulamayı doğrulayın.

CTS

CtsIncrementalInstallHostTestCases hesabını kullan.

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ı kur.
  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

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

  • Bir geliştirme ortamı kur
  • Uygulama bölümünde belirtilen uygulama görevlerini tamamlayın.
  • Derlemeyi hedef fiziksel bir cihaza veya emülatöre yükleyin.
  • Mevcut bir APK oluşturun veya edinin.
  • Hata ayıklama imzalama anahtarı oluşturun.
  • APK'yıbuild-tools klasöründeki v4 imza biçimiyle 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