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:
- Çekirdeği oluşturmak için geliştirme makinesini kurun.
common-android-mainline
dalındaki ortak çekirdeği hedefleyin.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- IncFS için gereken aşağıdaki değişikliklerin dal ödemesinde olduğunu doğrulayın:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
CONFIG_INCREMENTAL_FS=y
veya yalnızca Android 11 içinCONFIG_INCREMENTAL_FS=m
öğesinidefconfig
dosyasının en altına ekleyin. Örnek görmek için aşağıdaki bağlantılardan birini tıklayın:- Çekirdeği oluşturma
- Çekirdeği Android cihaz görüntü derlemesine yerleştirin.
- 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): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Android emülatörü ve Pixel 4 için örnek
device.mk
dosyalarına bakın. - Yalnızca Android 11 için:
CONFIG_INCREMENTAL_FS=m
kullanıyorsanız SE Linux Kuralları'nı ekleyin. vold.te
allow vold self:capability sys_module;
allow vold vendor_incremental_module:file r_file_perms;
allow vold vendor_incremental_module:system module_load;
-
file.te
dosyası (Örnek için bufile.te
dosyasına bakın.) - Artımlı dosya sistemi sürücüsü
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
dosyası: Örnek için bufile_contents
dosyasına bakın. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
CONFIG_INCREMENTAL_FS=y
kullanırken dosyaya şunlardan birini ekleyin:
CONFIG_INCREMENTAL_FS=m
kullanırken (yalnızca Android 11 için) dosyaya şunlardan birini ekleyin:
Aşağıdaki içeriğe sahip bir vold.te
dosyası oluşturup cihazınızdaki
/system/sepolicy/vendor
klasörüne ekleyin:
Artımlı dosya sistemi sürücüsünü yüklemesine izin verin:
/system/sepolicy/vendor
klasörünüzde bulunan mevcut file.te
dosyasına aşağıdaki SE Linux kurallarını ekleyin:
Aşağıdaki SE Linux kurallarını, /system/sepolicy/vendor
klasörünüzde bulunan mevcut file_contents
dosyasına ekleyin:
Ç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:
- Kernel 4.14 yaması
- Kernel 4.19 yaması
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.
- Kernel 4.14'te v1 sürücüsüyle ilgili düzeltme
- Kernel 4.19'da v1 sürücüsüyle ilgili düzeltme
- Kernel 5.4'te v1 sürücüsüyle ilgili düzeltme
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ı)- Add Kernel Module Prebuilts
- Cihazda çekirdek modülü sistem özelliği değişikliği ekleme ve etkinleştirme
- SE Linux kurallarını güncelleme
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
- Geliştirme ortamı kurun.
- Uygulama bölümünde belirtilen uygulama görevlerini tamamlayın.
- 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

Bu testleri bulma
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java