WindowManager Uzantıları

Jetpack WindowManager kitaplığı, uygulama geliştiricilerin yeni cihaz form faktörlerini ve çok pencereli ortamlarda yürütülür.

WindowManager Extensions (Extensions) adlı 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 etkinse devre dışı bırakılır.

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, androidx.window.extensions ve androidx.window.sidecar için 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 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:

Şekil 1. Uygulamaya yüklenen WindowManager Uzantıları işlem platform kodunu içerir.

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.

Şekil 2. Erişimle ilgili karar ağacı androidx.window.extensions veya androidx.window.sidecar.

Uzantı modülleri

Uzantılar, katlanabilir büyük ekranlı cihazlar için pencereleme özellikleri sunar. harici ekranlarda pencerelemeyi destekleyen cihazlar Ö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 doğrudan; 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ı veya kabine bağlı 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ın DeviceStateManagerService. Görüntüleyin Referans olarak DeviceStateProviderImpl.java.

    DeviceStateProvider varsayılan uygulamaları veya DeviceStatePolicy 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ğı (genellikle frameworks/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 veya hinge olabilir. left, top, right için değerler ve bottom, 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 sabitleri com.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ına izin vermek üzere katlanabilir cihazın ekranının üzerini kapatı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ın DeviceStateManagerService. Görüntüleyin DeviceStateProviderImpl.java konulu videomuzu izleyin.

    Varsayılan olarak DeviceStateProvider veya DeviceStatePolicy 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çin com.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ğerini true 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:

  1. Geliştirici seçenekleri ve USB üzerinden hata ayıklamanın etkin olduğu bir cihaz takın.
  2. Bilgisayarın cihazda hata ayıklamasına izin verin.
  3. androidx deposunun kök dizininde bir kabuk açın.
  4. Dizini framework/support olarak değiştirin.
  5. Şu komutu çalıştırın: ./gradlew window:window:connectedAndroidTest.
  6. Sonuçları analiz edin.

Testleri Android Studio'dan çalıştırmak için aşağıdakileri yapın:

  1. Android Studio'yu açın.
  2. Geliştirici seçenekleri ve USB üzerinden hata ayıklamanın etkin olduğu bir cihaz takın.
  3. Bilgisayarın cihazda hata ayıklamasına izin verin.
  4. Pencere modülünün pencere kitaplığındaki bir teste gidin.
  5. 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.