Android 11'de sunulan Artımlı Dosya Sistemi (IncFS) çekirdek modülü, Android işletim sisteminin Android Hata Ayıklama Köprüsü (ADB) üzerinden akışlı APK'ları almasını sağlar.
Bu kendi kendine yeten çekirdek modülü, mevcut Android dosya sisteminin üstünde yer alan yeni bir sanal dosya sistemi oluşturur. Bu, uygulama ve oyun geliştiricilerinin büyük APK'ları ADB aracılığıyla Android 11 veya daha yenisini çalıştıran bir cihaza dağıtmasına olanak tanıyan çerçeve ve SDK'daki değişiklikleri tamamlıyor.
Çekirdek değişikliği, yeni bir APK İmza Şeması v4 biçimini etkinleştirir ve Android Paket Yöneticisindeki Android çerçeve değişikliklerini, yeni sistem hizmetlerini ve ADB'deki değişiklikleri destekler.
Uygulama
IncFS'yi uygulamak için OEM'lerin ve SoC üreticilerinin Android cihaz yapılarına yeni bir çekirdek sürücüsü eklemesi gerekiyor.
Yalnızca Android 11 için , çekirdek sürücüsü modül olarak oluşturulmuşsa isteğe bağlı olarak yüklenir. ADB artımlı kurulumuyla yüklenen herhangi bir 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 üzeri için geçerlidir ve Android 11 ile kullanılabilir . Çekirdek sürücüsünü Android 12'ye yükseltme hakkında bilgi için bkz . Çekirdek sürücüsü yükseltmesi .
Çekirdek sürücüsü, akışlı APK kurulumlarını mümkün kılan daha büyük bir sistemin parçasıdır. OEM'lerin ve satıcıların örnek uygulamalarda sağlanan IncFS kodunun aynısını kullanmasına gerek yoktur. Ancak cihazlar arasında tutarlı bir deneyim sağlamak için API uygulamasının, Artımlı FS belgelerine yönelik Kullanıcı Alanı arayüzünde tanımlandığı gibi dosya okuma işlevine ve dizin okuma-yazma işlevine sahip bir dosya sistemine sahip olduğundan emin olmalısınız.
Ayrıca uygulamaların, IncFS örnek uygulamasıyla işlevsel olarak eşleşen bağlama seçeneklerine ve özel dosyalara sahip olması gerekir.
Aşağıda uygulama için gerekli değişiklikler listelenmektedir:
- Çekirdeği oluşturmak için geliştirme makinesini kurun .
-
common-android-mainline
şubesinden ortak çekirdeği hedefleyin.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- IncFS için gerekli olan aşağıdaki değişikliklerin şube ö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
-
defconfig
dosyasının altınaCONFIG_INCREMENTAL_FS=y
veya yalnızca Android 11 içinCONFIG_INCREMENTAL_FS=m
ekleyin. Bir örnek görmek için aşağıdaki bağlantılardan birine tıklayın: - Çekirdeği oluşturun
- Çekirdeği Android cihaz görüntüsü derlemesine gömün.
- 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 başlatılan 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 öykünücüsü 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 olarak 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 olarak 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
kullandığınızda, dosyayı aşağıdakilerden biriyle ekleyin:
CONFIG_INCREMENTAL_FS=m
( yalnızca Android 11 için) kullandığınızda, dosyayı aşağıdakilerden biriyle ekleyin:
Aşağıdaki içeriğe sahip bir vold.te
dosyası oluşturun ve cihazınızın /system/sepolicy/vendor
klasörüne ekleyin:
Artımlı dosya sistemi sürücüsünü yüklemesine izin verin:
Aşağıdaki SE Linux kurallarını /system/sepolicy/vendor
klasörünüzde bulunan mevcut file.te
dosyasına 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 cihazlar, IncFS sürücüsünün daha eski bir sürümünü içerebilir. AOSP, bu cihazlar için aşağıdaki nedenlerden dolayı IncFS sürücüsünü güncel sürüme (bu durumda v2) güncellemenizi önerir:
- Android 11 ile yayımlanan sürüm, IncFS'nin yalnızca ADB kurulum desteğine yönelik ilk uygulamasıdır.
- Android 12, daha iyi bir kullanıcı deneyimi için IncFS v2'nin yeni özelliklerini ve optimizasyonlarını gerektiren Play oyunlarının akış kurulumları için IncFS sürücüsünü kullanır.
- V1, oyun akışını destekler, ancak bunu v2'ye göre performans cezaları ve daha yüksek pil, CPU ve RAM kullanımıyla yapar.
- V2, sorunsuz ilerleme animasyonları, hassas disk alanı kullanımı raporlaması ve 3. taraf uygulamaların akışa müdahalesinin önlenmesiyle akış için iyileştirilmiş UX sağlar.
Ç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:
- Çekirdek 4.14 yaması
- Çekirdek 4.19 yaması
Diğer tüm özel çekirdek sürümleri için lütfen yama setlerinden birini taşıyın. Yalnızca fs/incfs
dizinini etkilerler ve mevcut v1 koduna temiz bir şekilde uygulanırlar.
- v1 sürücüsüne çekirdek 4.14 düzeltmesi
- v1 sürücüsüne çekirdek 4.19 düzeltmesi
- v1 sürücüsüne çekirdek 5.4 düzeltmesi
IncFS sürücüsünü orijinal ancak şimdi yükseltilmiş Android 11 ile aynı şekilde, çekirdek görüntüsünün yerleşik bir parçası olarak veya ayrı bir modül olarak kullanmaya devam edin. Sistem kartını veya sistem özelliği yapılandırmasını değiştirmeyin.
GKI çekirdek görüntüsünü kullanan yeni cihazlar, çekirdek görüntüsünün bir parçası olarak yapılandırılmış en son (v2) IncFS sürücüsünü otomatik olarak alır. Bu, ek adımlar gerektirmez.
Yüklenebilir modül yapılandırması Android 12'de kullanımdan kaldırıldı ve yeni cihazlar için desteklenmiyor. Yalnızca yükseltmeler için veya orijinal çekirdekte zaten bir modül olarak oluşturulmuşsa satıcı görüntüsünün dondurulması için 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 düşünülebilir.
Yüklenebilir modül (Pixel 4 cihazı)- Önceden Oluşturulmuş Çekirdek Modülü Ekleme
- Cihazda Çekirdek Modül Sistemi Özellik Değişikliğini Ekleme ve Etkinleştirme
- SE Linux Kurallarını Güncelleyin
Doğrulama ve test
Özellik Birimi Testlerini, CTS ve GTS'yi kullanarak uygulamayı doğrulayın.
CTS
CtsIncrementalInstallHostTestCases
kullanın.GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
IncFS'yi test edin
- Bir geliştirme ortamı oluşturun .
- Uygulama bölümünde özetlenen 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 (ADB ve apksigner) ile test etme
- Bir geliştirme ortamı oluşturun .
- Uygulama bölümünde özetlenen uygulama görevlerini tamamlayın.
- Yapıyı hedef fiziksel cihazda veya emülatörde flashlayın.
- Mevcut bir APK oluşturun veya edinin.
- Hata ayıklama imzalama anahtarı oluşturun.
- APK'yı
build-tools
klasöründen v4 imza formatıyla imzalayın ../apksigner sign --ks debug.keystore game.apk
- APK'yı cihaza
platform-tools
klasöründen yükleyin ../adb install game.apk
Bu testleri bulun
- /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