Jetpack WindowManager kitaplığı, uygulama geliştiricilerin yeni cihaz form faktörlerini ve çok pencereli ortamlara uygundur.
WindowManager Extensions (Extensions) - isteğe bağlı bir Android platform modülüdür.
çeşitli Jetpack WindowManager özelliklerini etkinleştirir. Modül uygulandı
frameworks/base/libs/WindowManager/Jetpack
bölgesindeki AOSP'de
ve WindowManager özelliklerini destekleyen cihazlarda gönderilir.
Uzantı modülü dağıtımı
Uzantılar bir .jar
kitaplığında derlenir ve system_ext
bölümüne yerleştirilir.
bölümü, cihaz oluşturma dosyasında uzantılar etkinleştirildiyse.
Bir cihazda uzantıları etkinleştirmek için aşağıdaki bilgileri ürüne ekleyin Makefile:
$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
Bu işlem, androidx.window.extensions
ve androidx.window.sidecar
özelliklerini etkinleştirir.
cihazdaki paketleri belirler ve persist.wm.extensions.enabled
özelliğini ayarlar.
Bu paketlerin oluşturma dosyasına eklenmesi, ayrıca bildirimleri
etc/permissions/
sayesinde başvuru işlemlerinde kullanılabilir. Normalde
modüllerin, uygulama işleminin bir parçası olarak yüklendiği ve yürütüleceği
bu çalışma zamanı, Jetpack WindowManager kitaplığı tarafından kullanıldığında
aşağıda gösterildiği gibi, istemci tarafı çerçeve koduna benzer bir işlem
figür:
androidx.window.extensions
modülü,
aktif geliştirmenin
birçok yolu var. androidx.window.sidecar
modülü eski bir modüldür
Jetpack WindowManager'ın en eski sürümleriyle uyumluluk için dahil edilmiştir,
ancak yardımcı dosyalar artık etkin olarak yönetilmez.
Aşağıdaki şekilde,
androidx.window.extensions
veya androidx.window.sidecar
.
Uzantı modülleri
Uzantılar katlanabilir büyük ekranlı cihazlar için pencereleme özellikleri sağlar. harici ekranlarda pencere açmayı destekleyen cihazlardır. Öne çıkan alanlar şunlardır:
Uzantıların OEM uygulamaları,
WindowExtensions
cihazın donanımı ilgili özellikleri desteklemiyorsa
bu özellik
Uyumluluk Tanımlama Belgesi (CDD) 7.1.1.1.
Uzantılar ve Jetpack API'leri
WindowManager Uzantıları modülü, ek olarak kendi API yüzeyini
herkese açık platform API'lerini devreye sokmak. Uzantılar modülü, herkese açık olarak
geliştiricilere yönelik olmayan androidx.window.extensions
yapabilirsiniz. Böylece Jetpack WindowManager
(androidx.window
)
derleme sırasında buna bağlantı oluşturabilir. Extensions API yüzey, genellikle
daha düşük düzeyde API'ler sağlar.
Uzantıların sağladığı API'ler, Jetpack tarafından kullanılmak üzere tasarlanmıştır. Yalnızca WindowManager kitaplığı için. Extensions API'leri, doğrudan uygulama geliştiricilerden sorumludur. Uzantı kitaplığı, doğru sağlamak için Gradle derleme dosyasındaki bir uygulama bağımlılığıdır. işlevi görür. Uzantı kitaplığını bir uygulamada önceden derlemekten kaçınma directly; bir mix'in yüklenmesini önlemek için çalışma zamanında istenen yüklemeyi kullanın. bir örneğidir.
Jetpack WindowManager (androidx.window
) bir uygulama olarak eklenmelidir
bağımlılığı içerir ve şunlar da dahil olmak üzere herkese açık, geliştiricilere yönelik API'ler sağlar:
bir görünümünüz var. WindowManager kitaplığı otomatik olarak
Uzantıları uygulama işlemine yükler ve alt düzeyi sarmalar
API'leri üst düzey soyutlamalara ve daha odaklı soyutlamalara dönüştürür
kullanır. WindowManager Jetpack API'leri modern ve
Android uygulaması geliştirmeyi amaçlar ve
uygulamanızı kolaylaştırmak için
Diğer AndroidX sürümlerini kullanan kod tabanlarıyla iyi entegre olarak birlikte çalışabilirlik
kitaplıklar.
Uzantı sürümleri ve güncellemeleri
Uzantılar modülü, Android platformuyla birlikte her yıl güncellenebilir veya üç aylık güncellemeler. Üç aylık güncellemeler, Extensions API düzeyinin Android platform API güncellemeleri arasında artarak daha hızlı iterasyona imkan verir. OEM'lere yeni özelliklere resmi API erişimi ekleme fırsatı verir olduğu için çok iyi değil.
Aşağıdaki tabloda şunun için androidx.window.extensions
API sürümleri listelenmiştir:
çeşitli Android sürümleri.
Android platformu sürümü | WindowManager Extensions API düzeyi | androidx.window.extensions API sürümü |
---|---|---|
Android 15 | 6 | 1.5.0 (çok yakında) |
Android 14 QPR3 | 5 | 1.4.0 (yakında) |
Android 14 QPR1 | 4 | 1.3.0 |
Android 14 | 3 | 1.2.0 |
Android 13 QPR3 | 2 | 1.1.0 |
Android 13 | 1 | 1.0.0 |
Android 12L | 1 | 1.0.0 |
Extensions API düzeyi (orta sütun) mevcut olduğunda ve mevcut kararlı API yüzeyine (sağ sütun) ek olarak.
Geri ve ileri uyumluluk
Jetpack WindowManager, sık karşılaşılan API düzeyleriyle ilgilenmenin karmaşıklığını halleder hızlı API geliştirmesi ve geriye dönük uyumluluk özellikleri sunar. Kitaplık kodu uygulama işleminde yürütülürse kitaplık, bildirilen Extensions API seviyesidir ve beyana göre özelliklere erişim sağlar seviyesidir.
WindowManager, bir uygulamanın çalışma zamanında kilitlenmesini önlemek için göre mevcut Extensions API'lerinin çalışma zamanında istenen Java yansıma kontrolü beyan edilen Extensions API düzeyini değiştirin. Uyuşmazlık varsa WindowManager Uzantıların kullanımını (kısmen veya tamamen) devre dışı bırakmalı ve alakalı bazı özellikleri devre dışı bırakır.
WindowManager Uzantıları bir system_ext
modülü olarak uygulanır ve
WindowManager çekirdeğine çağrı yapmak için özel platform API'leri,
DeviceStateManager
,
ve diğer sistem hizmetlerine erişebilir.
Uzantıların yayın öncesi sürümleriyle uyumluluk sağlanamayabilir
bununla ilgili üç aylık veya yıllık Android platformu sürümünden önce
sürümlerin son halini alır. Extensions API'lerinin tam geçmişi
sürüm dalında bulundu
window:extensions:extensions
API metin dosyaları.
Uzantıların yeni sürümleri, WindowManager ileriye dönük uyumluluğu korumak için uygulamalarda derlendi. Alıcı: Extensions API'nin tüm yeni sürümlerinin yalnızca yeni API'ler ve eskilerini kaldırmaz. Sonuç olarak, eski WindowManager'a sahip uygulamalar sürümleri, uygulamaların derlediği eski Extensions API'lerini kullanmaya devam edebilir .
CTS doğrulaması, bu sürüme ve önceki sürümlere ilişkin tüm API'ler mevcut ve işlevseldir.
Performans
Uzantılar modülü, Android 14'ten (API düzeyi 34) itibaren varsayılan olarak bootclasspath olmayan sistem sınıfı yükleyicilerde önbelleğe alınır. Dolayısıyla, uygulama başlatılırken modülün belleğe yüklenmesi nedeniyle performans üzerinde herhangi bir etkisi yoktur. Bağımsız modül özelliklerinin kullanılması, istemci ile sunucu arasında ek IPC çağrıları yapıldığında uygulamaların performans özellikleri üzerinde küçük bir etkiye sahip olabilir.
Modüller
Etkinlik yerleştirme
Etkinlik yerleştirme bileşeni, bu bileşenlerin bazılarını düzenleyerek ana uygulamanın sınırları içinde sunulabilmesidir. Bu iki etkinliği aynı anda yan yana göstermeyi içerir. eski için büyük ekran optimizasyonunu kolaylaştıran çok bölmeli düzen izin verir.
Etkinlik yerleştirme bileşeni,
sw600 dp
değerine eşit veya daha büyük boyutta yerleşik ekran.
Etkinlik yerleştirme, harici ekranı destekleyen cihazlarda da etkinleştirilmelidir
boyut olarak da gösterilebileceği için, bu dosya harici
bağlantılar ile birlikte uygulama
bağlı olması gerekir.
Cihaz yapılandırması
Uzantıların etkinleştirilmesi dışında özel bir cihaz yapılandırması gerekmez. modülünü Uzantı modülü dağıtımı bölümünde açıklandığı gibi bölümüne bakın. Uzantıları destekleyen tüm cihazlarda çoklu pencere moduna girer. Gelecekteki Android sürümlerinde Uzantılar'dan yararlanma olasılığı yüksek yaygın olarak kullanılan avuç içi ve büyük ekranlı cihaz yapılandırmalarında kullanılabilir.
Pencere düzeni bilgileri
Pencere düzeni bilgi bileşeni, menteşe bir uygulama penceresinden geçtiğinde katlanabilir bir cihaza menteşe. Pencere düzeni bilgileri, uygulamaların yanıt vermesine ve optimize edilmiş reklamları göstermesine olanak tanır katlanabilir cihazlarda masaüstü modunda düzenler. Görüntüleyin Uygulamanızı kat farkına varma bakın.
Ayrı ayrı cihazları birbirine bağlayan menteşeli katlanabilir Android cihazlar
kesintisiz gösterge paneli alanlarında menteşe ile ilgili bilgi verilmelidir.
WindowLayoutComponent
aracılığıyla uygulamalar tarafından kullanılabilir.
Menteşe konumu ve sınırları, uygulamaya göre bildirilmelidir
Context
tarafından tanımlanan pencereyle ilişkilidir. Uygulama penceresi
sınırlar menteşe sınırlarıyla kesişmiyor, menteşe
DisplayFeature
bildirilmemesi gerekir. Ayrıca, görüntülü reklam özelliklerinin bildirilmemesi de kabul edilebilir.
güvenilir bir şekilde raporlanmadığı durumlarda (ör. bir uygulama
pencere, kullanıcı tarafından çoklu pencere modunda serbestçe hareket ettirilebilir veya
uyumlu sinemaskop modu.
Katlama özellikleri için:
menteşe konumu
İstikrarlı durumlarla karşılaşabilirsiniz. Varsayılan olarak düz görüntüleme durumunda API'nin
FoldingFeature.State.FLAT
.
Cihaz donanımı sabit bir durumda yarı katlanmış modda bırakılabiliyorsa
API, FoldingFeature.State.HALF_OPENED
değerini bildirmelidir.
API'de kapalı durum yoktur. Çünkü böyle bir durumda uygulama penceresi
görünmez ya da menteşe sınırlarını geçemez.
Cihaz yapılandırması
Katlama özelliğinin uygulanmasını desteklemek için OEM'lerin aşağıdakileri yapması gerekir:
device_state_configuration.xml
içindeki cihaz durumlarını tarafından kullanılacak şekilde yapılandırınDeviceStateManagerService
. Görüntüleyin Referans olarakDeviceStateProviderImpl.java
.DeviceStateProvider
varsayılan uygulamaları veyaDeviceStatePolicy
değilse özel bir uygulama kullanılabilir.Uzantılar modülünü şu konumda açıklandığı şekilde etkinleştirin: Uzantı modülü dağıtımı bölümünü inceleyin.
com.android.internal.R.string.config_display_features
içinde ekran özelliklerinin konumunu belirtin dize kaynağı (genellikleframeworks/base/core/res/res/values/config.xml
dilindedir) görebilirsiniz).Dize için beklenen biçim şu şekildedir:
<type>-[<left>,<top>,<right>,<bottom>]
type
,fold
veyahinge
olabilir.left
,top
,right
için değerler vebottom
, doğal ekran yönünü değiştirebilirsiniz. Yapılandırma dizesi birden çok özellikleri noktalı virgülle ayrılmış olarak görüntüleyin.Örnek:
<!-- Jetpack WindowManager display features --> <string name="config_display_features" translatable="false">fold-[1000,0,1000,2000]</string>
Şunda kullanılan dahili cihaz durumu tanımlayıcıları arasındaki eşlemeyi tanımlayın:
DeviceStateManager
ve geliştiricilere gönderilen herkese açık durum sabitlericom.android.internal.R.array.config_device_state_postures
.Her giriş için beklenen biçim:
<device_specific_state_identifier>:<Jetpack WindowManager state identifier>
Desteklenen durum tanımlayıcıları şunlardır:
COMMON_STATE_NO_FOLDING_FEATURES = 1
: Eyalette katlama özelliği bulunmuyor. rapordur. Örneğin, tipik bir katlanmış katlamanın kapalı durumu olabilir. Cihazın iç tarafında ana ekran.COMMON_STATE_HALF_OPENED = 2
: Katlama özelliği yarım açık.COMMON_STATE_FLAT = 3
: Katlama özelliği düz. Örneğin bu, normal bir katlanabilir cihazın açık durumu olabilir. Bu cihazın ana ekranı iç taraftadır.COMMON_STATE_USE_BASE_STATE = 1000
: İçinde Android 14, emülasyon için kullanılabilecek bir değer menteşe durumunun,CommonFoldingFeature.java
Daha fazla bilgi için bkz.
DeviceStateManager.DeviceStateCallback#onBaseStateChanged(int)
.Örnek:
<!-- Map of System DeviceState supplied by DeviceStateManager to WindowManager posture.--> <string-array name="config_device_state_postures" translatable="false"> <item>0:1</item> <!-- CLOSED : COMMON_STATE_NO_FOLDING_FEATURES --> <item>1:2</item> <!-- HALF_OPENED : COMMON_STATE_HALF_OPENED --> <item>2:3</item> <!-- OPENED : COMMON_STATE_FLAT --> <item>3:1</item> <!-- REAR_DISPLAY : COMMON_STATE_NO_FOLDING_FEATURES --> <item>4:1000</item> <!-- CONCURRENT : COMMON_STATE_USE_BASE_STATE --> </string-array>
Pencere alanı
Pencere alanı bileşeni, uygulamalara bir dizi özellik ekleyerek bazı katlanabilir cihazlarda ek ekranlar ile görüntüleme alanlarına erişim cihazlar.
Arka görüntü modu, bir uygulamanın için ana cihaz kamerasının kullanılmasını sağlamak üzere katlanabilir cihazın selfie'ler ve videolar var. Android uyumlu bir sürüme sahip cihazlar (Android CDD tarafından boyut, yoğunluk ve navigasyon aksesuarları) arka cihazla uyumlu olan kapak ekranı kameraların arka ekran moduna erişim sağlaması gerekir.
Android 14'te çift ekran modu, katlanabilir cihazların iç ekranında çalışan uygulamaların kapak ekranında diğer kullanıcılara dönük ek içerik göstermesini sağlar. Örneğin, kapak ekranı, fotoğrafı çekilen veya kaydedilen kişiye kamera önizlemesini gösterebilir.
Cihaz yapılandırması
Katlama özelliğinin uygulanmasını desteklemek için OEM'lerin aşağıdakileri yapması gerekir:
device_state_configuration.xml
içindeki cihaz durumlarını tarafından kullanılacak şekilde yapılandırınDeviceStateManagerService
. GörüntüleyinDeviceStateProviderImpl.java
konulu videomuzu izleyin.Varsayılan olarak
DeviceStateProvider
veyaDeviceStatePolicy
değilse özel bir uygulama kullanılabilir.Açık veya düz modu destekleyen katlanabilir cihazlarda ilgili
com.android.internal.R.array.config_openDeviceStates
içindeki durum tanımlayıcılarını belirtir.Katlanmış durumları destekleyen katlanmış cihazlarda, ilgili
com.android.internal.R.array.config_foldedDeviceStates
içindeki durum tanımlayıcılarını belirtir.Yarım katlanmış durumda (menteşe yarı açık) katlanmış durumda olan cihazlar için dizüstü bilgisayar gibi), ilgili durumları
com.android.internal.R.array.config_halfFoldedDeviceStates
Arka ekran modunu destekleyen cihazlar için:
DeviceStateManager
içincom.android.internal.R.array.config_rearDisplayDeviceStates
içinde ilgili eyaletleri listeleyin.- Arka ekranın fiziksel görünen adresini
com.android.internal.R.string.config_rearDisplayPhysicalAddress
cinsinden belirtin. - Uzantılar tarafından kullanılacak
com.android.internal.R.integer.config_deviceStateRearDisplay
olan durum tanımlayıcısını belirtin. - Uygulamalarda kullanılabilir hale getirmek için
com.android.internal.R.array.config_deviceStatesAvailableForAppRequests
içine durum tanımlayıcısını ekleyin.
Android 14'te ikili (eş zamanlı) ekran modunu destekleyen cihazlar için:
com.android.internal.R.bool.config_supportsConcurrentInternalDisplays
değerinitrue
olarak ayarlayın.- Arka ekranın fiziksel görünen adresini
com.android.internal.R.config_deviceStateConcurrentRearDisplay
cinsinden belirtin. - Tanımlayıcının uygulamalar için sunulması gerekiyorsa Uzantılar tarafından kullanılacak durum tanımlayıcısını
com.android.internal.R.integer.config_deviceStateConcurrentRearDisplay
dilinde belirtin. - Uygulamalarda kullanılabilir hale getirmek için
com.android.internal.R.array.config_deviceStatesAvailableForAppRequests
içine durum tanımlayıcısını ekleyin.
Doğrulama
Ortak halde beklenen davranışların sağlanabilmesi için OEM'ler uygulamalarını doğrulamalıdır. senaryoları ele alacağız. Jetpack WindowManager kullanan CTS testleri ve testleri, OEM'lerin kullanımına sunulur test amaçlı uygulamalardır.
CTS testleri
CTS testlerini çalıştırmak için CTS testlerini çalıştırma bölümüne bakın. CTS
Jetpack WindowManager ile ilgili testleri cts/tests/framework/base/windowmanager/jetpack/
altında bulabilirsiniz.
Test modülünün adı CtsWindowManagerJetpackTestCases
şeklindedir.
WindowManager testleri
Jetpack WindowManager testlerini indirmek için şu talimatları uygulayın:
Android Jetpack Talimatları.
Testler, window:window
modülü altındaki pencere kitaplığında bulunmaktadır: window/window/src/androidTest/
.
window:window
modülüne ilişkin cihaz testlerini komut satırından çalıştırmak için
şu:
- Geliştirici seçenekleri ve USB üzerinden hata ayıklamanın etkin olduğu bir cihaz takın.
- Bilgisayarın cihazda hata ayıklamasına izin verin.
- androidx deposunun kök dizininde bir kabuk açın.
- Dizini
framework/support
olarak değiştirin. - Şu komutu çalıştırın:
./gradlew window:window:connectedAndroidTest
. - Sonuçları analiz edin.
Testleri Android Studio'dan çalıştırmak için aşağıdakileri yapın:
- Android Studio'yu açın.
- Geliştirici seçenekleri ve USB üzerinden hata ayıklamanın etkin olduğu bir cihaz takın.
- Bilgisayarın cihazda hata ayıklamasına izin verin.
- Pencere modülünün pencere kitaplığındaki bir teste gidin.
- Bir test sınıfı açın ve kartın sağ tarafındaki yeşil okları kullanarak çalıştırın yardımcı olur.
Alternatif olarak test çalıştırmak üzere Android Studio'da bir yapılandırma oluşturabilirsiniz yöntemini, test sınıfını veya modüldeki tüm testleri.
Sonuçlar, kabuğun çıkışına bakılarak manuel olarak analiz edilebilir. Biraz cihaz belirli varsayımları karşılamıyorsa testler atlanır. Sonuçlar bir komut dosyası oluşturabilirsiniz. Analistler de otomatik olarak sonuç analizidir.