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:
- Çekirdeği derlemek için geliştirme makinesini kur.
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 şube ödemesinde bulunduğundan emin olun:
- 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
defconfig
dosyasının alt kısmınaCONFIG_INCREMENTAL_FS=y
veya yalnızca Android 11 içinCONFIG_INCREMENTAL_FS=m
ekleyin. Örnek görmek için aşağıdaki bağlantılardan birini tıklayın:- Çekirdeği oluşturma
- Çekirdeği Android cihaz resmi derlemesine yerleştirin.
- 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): 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 aşağıdakilerden birini ekleyin:
CONFIG_INCREMENTAL_FS=m
kullanırken (yalnızca Android 11 için), dosyaya aşağıdakilerden birini ekleyin:
Aşağıdaki içeriğe sahip bir vold.te
dosyası oluşturup cihazınızın /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üzdeki 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üzdeki mevcut file_contents
dosyasına ekleyin:
Ç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:
- Çekirdek 4.14 yaması
- Çekirdek 4.19 yaması
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.
- v1 sürücüsünde çekirdek 4.14 düzeltmesi
- Kernel 4.19 sürümünde sürücü v1 için düzeltme
- Kernel 5.4 sürümünde v1 sürücüsü için düzeltme
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)- Önceden Derlenmiş Çekirdek Modülü Ekle
- Cihazlarda çekirdek modülü sistem özelliği değişikliğini ekleme ve etkinleştirme
- SE Linux kurallarını güncelleme
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
- Geliştirme ortamı kur.
- 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
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

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