Artımlı Dosya Sistemi

Android 11'de kullanıma sunulan Artımlı Dosya Sistemi (IncFS) çekirdek modülü Android OS'in Android Debug Bridge üzerinden akışla yayınlanan APK'ları almasını sağlar (ADB) olarak değiştirin.

Bu bağımsız çekirdek modülü, mevcut projenize uyan yeni bir sanal dosya sistemi üstüne yerleştirin. Bu, çerçeve ve SDK'yı kullanarak uygulama ve oyun geliştiricilerin ADB'yi, Android 11 veya sonraki sürümleri çalıştıran bir cihaza aktarın.

Çekirdek değişikliği, yeni bir APK İmza Şeması v4 biçimi Android Paket Yöneticisi'nde Android çerçevesi değişikliklerini destekler. yeni sistem hizmetlerini ve ADB'deki değişiklikleri içerir.

Uygulama

IncFS'i uygulamak için OEM'ler ve SoC üreticilerinin yeni bir çekirdek eklemesi gerekir. sürücüsünü yükseltmeye çalışıyor.

Yalnızca Android 11 için: Çekirdek sürücüsü istek üzerine yüklendiği bir modül olarak oluşturulur. Eğer ADB artımlı yüklemesi aracılığıyla yüklenen uygulama yoksa cihazı, çekirdek sürücüsünü yüklemez.

Aksi takdirde, çekirdeğin bir parçası olarak derlendiğinde sürücü her zaman yüklüdür. Bu uygulama yalnızca Android 12 ve sonraki sürümler, Android 11 ile kullanılabilir. Örneğin, çekirdek sürücüsünü Android 12'ye yükseltme hakkında bilgi için bkz. Çekirdek sürücüsünü yükseltme.

Çekirdek sürücüsü, akışlı APK'yı etkinleştirmek için kullanılan daha büyük bir sistemin parçasıdır yükleme sayısını artırır. OEM'lerin ve tedarikçilerin, sağlanan IncFS kodunun aynısını kullanması gerekmez bazı örnekler vereceğim. Ancak farklı platformlarda tutarlı bir deneyim API uygulamasının dosya sistemine sahip olduğundan emin olmalısınız. hem dosya okuma hem de dizin okuma ve yazma işlevine sahip olan Artımlı FS için kullanıcı alanı arayüzü dokümanlarında tanımlanmıştır.

Ayrıca, uygulamalarda ekleme seçenekleri olmalıdır ve özel dosyalar IncFS örnek uygulamasıyla işlevsel olarak eşleşenleri bulun.

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

  1. Geliştirme makinesini kurun kullanır.
  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 gerekli olan aşağıdaki değişikliklerin şube ödemesi:
  4. CONFIG_INCREMENTAL_FS=y veya yalnızca Android 11 için CONFIG_INCREMENTAL_FS=m dosyanın alt kısmına gidin.defconfig Bir örnek görmek için aşağıdaki bağlantılardan birini ziyaret edin:
  5. Çekirdek oluşturma
  6. Çekirdeği Android cihaz görüntüsü derlemesine yerleştirin.
  7. Hedef Android cihazınız için aşağıdaki satıcıya özgü etiketlerden birini ekleyin device.mk dosyanıza sistem özelliği satırları 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 dosyayı şunlardan biri:

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

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

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

    • 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;

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

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

    Aşağıdaki SE Linux kurallarını mevcut file_contents hizmetine ekleyin dosya /system/sepolicy/vendor klasörünüzde bulundu:

    • 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 geçen cihazlar IncFS'in eski bir sürümünü içerebilir gerekir. AOSP, bu tür cihazlar için IncFS sürücüsünü geçerli sürümü (bu örnekte v2) şu nedenlerle karşılaştırabilirsiniz:

  • Android 11 ile yayınlanan sürüm, Google Ads'deki ilk uygulamadır yalnızca ADB yükleme desteği için hedeflenen IncFS.
  • Android 12, Play oyunlarının akış yüklemeleri için IncFS sürücüsünü kullanır. Daha iyi bir kullanıcı deneyimi için IncFS v2'nin yeni özelliklerini ve optimizasyonlarını gerektiren sahip olacaksınız.
  • V1, oyun akışını destekler ancak bu özellik, performans cezaları ve v2'ye göre daha yüksek pil, CPU ve RAM kullanımı sağlar.
  • V2, akıcı ilerleme animasyonlarıyla ve akış için iyileştirilmiş bir kullanıcı deneyimi sağlar. Hassas disk alanı kullanım raporlaması ve üçüncü taraf uygulama akışlarının önlenmesi müdahale.

Çekirdekinizdeki IncFS sürücüsünü yeni sürüme geçirmek üzere ya da çekirdek 4.14'ü veya çekirdek 4.19'u seçin:

Diğer tüm özel çekirdek sürümleri için lütfen yama kümelerinden birini taşıyın. Onlar yalnızca fs/incfs dizinini etkiler ve mevcut v1 kodunu içerir.

IncFS sürücüsünü orijinalle aynı şekilde kullanmaya devam edin ancak şimdi Android 11'i yeni sürüme geçirmiş olmanız gerekir. ayrı bir modül olarak oluşturabilirsiniz. Sistem kartını veya sistem özelliğini değiştirmeyin yapılandırma.

GKI çekirdek görüntüsü kullanan yeni cihazlar en son (v2) IncFS sürücüsünü alır otomatik olarak yapılandırılacak. Bunu gerektirmez adım adım anlatacağım.

Yüklenebilir modül yapılandırması, Android 12'de kullanımdan kaldırıldığı için yeni cihazlarda desteklenir. Yalnızca yükseltme için veya bir tedarikçi firma tarafından orijinal çekirdekte modül olarak oluşturulmuşsa görüntü donuyor.

Referans uygulamalar

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

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

Doğrulama ve test etme

Özellik Birimi Testleri, CTS 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'i test etme

  1. Bir geliştirme ortamı kurun.
  2. Uygulama bölümünde açıklanan 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 (ADB ve apksigner) ile IncFS'i test edin

  • Kurulum bir geliştirme ortamıdır.
  • Uygulama bölümünde açıklanan uygulama görevlerini tamamlayın.
  • Derlemeyi bir hedef fiziksel cihazda veya emülatörde Flash'a geçirin.
  • Mevcut bir APK oluşturun veya edinin.
  • Hata ayıklama imzalama anahtarı oluşturun.
  • APK'yı build-tools klasöründen v4 imza biçimiyle imzalayın.
    ./apksigner sign --ks debug.keystore game.apk
  • APK'yı platform-tools üzerinden cihaza yükleyin emin olmanız gerekir.
    ./adb install game.apk
ziyaret edin.
Yükleme örneği
Şekil 1: Yükleme örneği

Bu testleri bulma