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:
- Geliştirme makinesini kurun kullanır.
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 gerekli olan aşağıdaki değişikliklerin şube ödemesi:
- 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:+Artımlı+fs:%2522+branch:android-mainline+status:merg
CONFIG_INCREMENTAL_FS=y
veya yalnızca Android 11 içinCONFIG_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:- Çekirdek oluşturma
- Çekirdeği Android cihaz görüntüsü derlemesine yerleştirin.
- 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): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Android emülatörü için örnek
device.mk
dosyalarına bakın ve Pixel 4. - 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ını inceleyin.) - 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 dosyayı
şunlardan biri:
CONFIG_INCREMENTAL_FS=m
uygulamasını kullanırken (yalnızca Android 11 için)
dosyayı şunlardan birini ekleyin:
Bir vold.te
dosyası oluşturup cihazınıza ekleyin
Şu içeriğe sahip /system/sepolicy/vendor
klasörü:
Artımlı dosya sistemi sürücüsünü yüklemesine izin verin:
Aşağıdaki SE Linux kurallarını mevcut file.te
dosyasına ekleyin
/system/sepolicy/vendor
klasörünüzde bulundu:
Aşağıdaki SE Linux kurallarını mevcut file_contents
hizmetine ekleyin
dosya /system/sepolicy/vendor
klasörünüzde bulundu:
Ç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:
- 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. Onlar
yalnızca fs/incfs
dizinini etkiler ve
mevcut v1 kodunu içerir.
- Kernel 4.14'ten v1 sürücüsüne düzeltme
- Kernel 4.19 düzeltmesi v1 drivr
- Kernel 5.4'ten v1 sürücüsüne düzeltme
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)- Önceden Oluşturulmuş Çekirdek Modülü Ekle
- Cihazda Kernel Modülü Sistem Özelliği Değişikliğini Ekleme ve Etkinleştirme
- SE Linux Kurallarını Güncelleme
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
- Bir geliştirme ortamı kurun.
- Uygulama bölümünde açıklanan 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 (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
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