Davranış değişiklikleri: tüm uygulamalar

Android 15 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion değerinden bağımsız olarak Android 15'te çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve ardından, uygun olduğu durumlarda bunları düzgün şekilde desteklemek için gerektiği gibi değiştirmelisiniz.

Yalnızca Android 15'i hedefleyen uygulamaları etkileyen davranış değişiklikleri listesini de incelemeyi unutmayın.

Temel işlevler

Android 15, Android sisteminin çeşitli temel özelliklerini değiştirir veya genişletir.

Paketin durdurulmuş durumundaki değişiklikler

The intention of the package FLAG_STOPPED state (which users can engage in AOSP builds by long-pressing an app icon and selecting "Force Stop") has always been to keep apps in this state until the user explicitly removes the app from this state by directly launching the app or indirectly interacting with the app (through the sharesheet or a widget, selecting the app as live wallpaper, etc.). In Android 15, we've updated the behavior of the system to be aligned with this intended behavior. Apps should only be removed from the stopped state through direct or indirect user action.

To support the intended behavior, in addition to the existing restrictions, the system also cancels all pending intents when the app enters the stopped state on a device running Android 15. When the user's actions remove the app from the stopped state, the ACTION_BOOT_COMPLETED broadcast is delivered to the app providing an opportunity to re-register any pending intents.

You can call the new ApplicationStartInfo.wasForceStopped() method to confirm whether the app was put into the stopped state.

16 KB sayfa boyutları için destek

Android, geçmişte yalnızca 4 KB bellek sayfası boyutlarını desteklemişti. Bu da Android cihazların genellikle sahip olduğu toplam bellek miktarı için sistem belleği performansını optimize etmişti. Android 15'ten itibaren AOSP, 16 KB sayfa boyutu kullanacak şekilde yapılandırılmış cihazları (16 KB cihazlar) destekler. Uygulamanız doğrudan veya bir SDK üzerinden dolaylı olarak NDK kitaplıkları kullanıyorsa uygulamanızı 16 KB'lık cihazlarda çalışacak şekilde yeniden oluşturmanız gerekir.

Cihaz üreticileri daha fazla fiziksel bellek (RAM) içeren cihazlar üretmeye devam ettikçe bu cihazların çoğu, cihazın performansını optimize etmek için 16 KB (ve sonunda daha büyük) sayfa boyutlarını kullanacak. 16 KB sayfa boyutuna sahip cihazlar için destek eklemek, uygulamanızın bu cihazlarda çalışmasını sağlar ve uygulamanızın ilgili performans iyileştirmelerinden yararlanmasına yardımcı olur. Yeniden derlenmeyen uygulamalar, gelecekteki Android sürümlerinde 16 KB'lık cihazlarda çalışmayacaktır.

Uygulamanıza destek eklemenize yardımcı olmak için uygulamanızın etkilenip etkilenmediğini kontrol etme, uygulamanızı yeniden oluşturma (geçerliyse) ve emülatörleri (Android Emulator için Android 15 sistem görüntüleri dahil) kullanarak uygulamanızı 16 KB ortamında test etme hakkında rehberlik sağladık.

Benefits and performance gains

16 KB sayfa boyutlarıyla yapılandırılan cihazlar, ortalama olarak biraz daha fazla bellek kullanır. Ancak, hem sistem hem de uygulamalar için çeşitli performans iyileştirmeleri sağlar:

  • Sistem bellek baskısı altındayken daha düşük uygulama başlatma süreleri: Test ettiğimiz bazı uygulamalarda daha belirgin iyileştirmeler (%30'a varan) ile birlikte ortalama %3, 16 daha düşük
  • Uygulama başlatma sırasında güç tüketimi azaltıldı: Ortalama% 4,56 oranında azalma
  • Daha hızlı kamera başlatma: Ortalama% 4,48 daha hızlı çalışır durumda başlatma ve ortalama% 6,60 daha hızlı soğuk başlatma
  • İyileştirilmiş sistem önyükleme süresi: Ortalama %8 (yaklaşık 950 milisaniye) iyileşme

Bu iyileştirmeler, ilk testlerimizi temel almaktadır ve gerçek cihazlardaki sonuçlar büyük olasılıkla farklılık gösterecektir. Testlerimizi sürdürürken uygulamaların olası kazanımlara ilişkin ek analizler sağlayacağız.

Check if your app is impacted

Uygulamanız yerel kod kullanıyorsa uygulamanızı 16 KB cihazları destekleyecek şekilde yeniden oluşturmanız gerekir. Uygulamanızın yerel kod kullanıp kullanmadığından emin değilseniz APK Analiz Aracı'nı kullanarak yerel kod olup olmadığını belirleyebilir ve ardından bulduğunuz paylaşılan kitaplıklar için ELF segmentlerinin hizalamasını kontrol edebilirsiniz. Android Studio, hizalama sorunlarını otomatik olarak algılamanıza yardımcı olan özellikler de sunar.

Uygulamanızda yalnızca Java programlama dilinde veya Kotlin'de yazılmış kodlar (tüm kitaplıklar veya SDK'lar dahil) kullanılıyorsa uygulamanız 16 KB cihazları zaten destekliyor demektir. Bununla birlikte, uygulama davranışında beklenmedik bir gerileme olmadığını doğrulamak için uygulamanızı 16 KB ortamında test etmenizi öneririz.

Bazı uygulamaların özel alanı desteklemesi için gerekli değişiklikler

Özel alan, Android 15'teki yeni bir özelliktir. Kullanıcıların cihazlarında ayrı bir alan oluşturarak hassas uygulamaları, ek bir kimlik doğrulama katmanıyla meraklı gözlerden korumalarına olanak tanır. Özel alandaki uygulamaların görünürlüğü kısıtlandığından, bazı uygulama türlerinin kullanıcının özel alanındaki uygulamaları görüp bunlarla etkileşim kurabilmesi için ek adımlar atması gerekir.

Tüm uygulamalar

Gizli alandaki uygulamalar, iş profillerine benzer şekilde ayrı bir kullanıcı profilinde tutulduğundan, uygulamaların ana profilde olmayan yüklü kopyalarının iş profilinde olduğunu varsaymaması gerekir. Uygulamanızda, iş profili uygulamalarıyla ilgili bu varsayımı yapan bir mantık varsa bu mantığı düzenlemeniz gerekir.

Tıbbi uygulamalar

Kullanıcı özel alanı kilitlediğinde özel alandaki tüm uygulamalar durdurulur ve bu uygulamalar, bildirim göstermek de dahil olmak üzere ön planda veya arka planda etkinlik gerçekleştiremez. Bu davranış, özel alana yüklenen tıbbi uygulamaların kullanımını ve işlevini önemli ölçüde etkileyebilir.

Özel alan kurulum deneyimi, kullanıcıları özel alanın tıbbi uygulamalardan gelen bildirimleri gösterme gibi kritik ön plan veya arka plan etkinlikleri gerçekleştirmesi gereken uygulamalar için uygun olmadığı konusunda uyarır. Ancak uygulamalar, özel alanda kullanılıp kullanılmadıklarını belirleyemediğinden bu durumda kullanıcıya uyarı gösteremez.

Bu nedenle, tıbbi uygulama geliştiriyorsanız bu özelliğin uygulamanızı nasıl etkileyebileceğini inceleyin ve kritik uygulama özelliklerinin kesintiye uğramasını önlemek için uygun işlemleri yapın (ör. kullanıcılarınızı uygulamanızı özel alana yüklememeleri konusunda bilgilendirin).

Başlatıcı uygulamaları

Bir başlatıcı uygulaması geliştirirseniz özel alandaki uygulamaların görünmesi için aşağıdakileri yapmanız gerekir:

  1. Uygulamanız, cihaz için varsayılan başlatıcı uygulaması olarak atanmış olmalıdır. Yani ROLE_HOME rolüne sahip olmalıdır.
  2. Uygulamanız, ACCESS_HIDDEN_PROFILES normal iznini uygulamanızın manifest dosyasında beyan etmelidir.

ACCESS_HIDDEN_PROFILES iznini beyan eden başlatıcı uygulamaları aşağıdaki özel alan kullanım alanlarını ele almalıdır:

  1. Uygulamanızda, özel alana yüklenen uygulamalar için ayrı bir başlatıcı kapsayıcısı olmalıdır. Hangi tür kullanıcı profilinin işlendiğini belirlemek için getLauncherUserInfo() yöntemini kullanın.
  2. Kullanıcı, özel alan kapsayıcısını gizleyip gösterebilmelidir.
  3. Kullanıcı, özel alan kapsayıcısını kilitleyip kilidini açabilmelidir. Özel alanı kilitlemek (true ile) veya kilidini açmak (false ile) için requestQuietModeEnabled() yöntemini kullanın.
  4. Kilitliyken özel alan kapsayıcısındaki hiçbir uygulama görünmemeli veya arama gibi mekanizmalar aracılığıyla bulunamamalıdır. Uygulamanız, ACTION_PROFILE_AVAILABLE ve ACTION_PROFILE_UNAVAILABLE yayınları için bir alıcı kaydettirmeli ve özel alan kapsayıcısının kilitli veya kilidi açık durumu değiştiğinde uygulamanızdaki kullanıcı arayüzünü güncellemelidir. Bu yayınların her ikisi de EXTRA_USER içerir. Uygulamanız, özel profil kullanıcısını belirtmek için bu kimliği kullanabilir.

    Özel alan profilinin kilitli olup olmadığını kontrol etmek için isQuietModeEnabled() yöntemini de kullanabilirsiniz.

Uygulama mağazası uygulamaları

Özel alanda, kullanıcının özel alanına uygulama yüklemek için bir örtülü intent başlatan bir "Uygulama Yükle" düğmesi bulunur. Uygulamanızın bu dolaylı intent'i alabilmesi için uygulamanızın manifest dosyasında CATEGORY_APP_MARKET <category> içeren bir <intent-filter> beyan edin.

PNG tabanlı emoji yazı tipi kaldırıldı

The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf) has been removed, leaving just the vector-based file. Beginning with Android 13 (API level 33), the emoji font file used by the system emoji renderer changed from a PNG-based file to a vector based file. The system retained the legacy font file in Android 13 and 14 for compatibility reasons, so that apps with their own font renderers could continue to use the legacy font file until they were able to upgrade.

To check if your app is affected, search your app's code for references to the NotoColorEmojiLegacy.ttf file.

You can choose to adapt your app in a number of ways:

  • Use platform APIs for text rendering. You can render text to a bitmap-backed Canvas and use that to get a raw image if necessary.
  • Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
  • As a last resort, you can bundle the legacy emoji font file (NotoColorEmoji.ttf) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.

Minimum hedef SDK sürümü 23'ten 24'e yükseltildi

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私 更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

Güvenlik ve gizlilik

Android 15 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

Kamera ve medya içerikleri

Android 15, tüm uygulamalar için kamera ve medya davranışında aşağıdaki değişiklikleri yapar.

Doğrudan ve yükü azaltarak ses oynatma, kaynak sınırlarına ulaşıldığında daha önce açılmış doğrudan veya yükü azaltarak ses parçalarını geçersiz kılar.

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

Kullanıcı deneyimi ve sistem arayüzü

Android 15, daha tutarlı ve sezgisel bir kullanıcı deneyimi oluşturmayı amaçlayan bazı değişiklikler içerir.

Katılan uygulamalar için tahmin edilen geri gitme animasyonları etkinleştirildi

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

Kullanıcı bir uygulamayı durdurmaya zorladığında widget'lar devre dışı bırakılır

Bir kullanıcı, Android 15 çalıştıran bir cihazda bir uygulamayı zorla durdurursa sistem, uygulamanın tüm widget'larını geçici olarak devre dışı bırakır. Widget'lar devre dışıdır ve kullanıcı bunlarla etkileşim kuramaz. Bunun nedeni, Android 15'ten itibaren sistemin, uygulama zorla durdurulduğunda uygulamanın bekleyen tüm intent'lerini iptal etmesidir.

Sistem, kullanıcı uygulamayı bir sonraki sefer başlattığında bu widget'ları yeniden etkinleştirir.

Daha fazla bilgi için Paket durduruldu durumunda yapılan değişiklikler başlıklı makaleyi inceleyin.

Medya projeksiyonu durum çubuğu çipi, kullanıcıları ekran paylaşımı, yayınlama ve kayıt konusunda uyarır.

屏幕投影漏洞会泄露用户的私密数据(例如财务信息),因为用户不知道自己的设备屏幕正在共享。

对于搭载 Android 15 QPR1 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。

Ekran paylaşımı, yayınlama ve kayıt için durum çubuğu çipi.

Uygulamanızın etkilenip etkilenmediğini kontrol edin

Uygulamanız varsayılan olarak durum çubuğu çipini içerir ve kilit ekranı etkinleştirildiğinde ekran yansıtmayı otomatik olarak askıya alır.

Uygulamanızı bu kullanım alanları için nasıl test edeceğiniz hakkında daha fazla bilgi edinmek için Durum çubuğu çipi ve otomatik durdurma başlıklı makaleyi inceleyin.

Arka plan ağ erişimi kısıtlamaları

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

Kullanımdan kaldırmalar

Her sürümde belirli Android API'leri eski hale gelebilir veya daha iyi bir geliştirici deneyimi sunmak ya da yeni platform özelliklerini desteklemek için yeniden düzenlenmesi gerekebilir. Bu durumlarda, eski API'lerin desteğini resmi olarak sonlandırırız ve geliştiricileri bunun yerine kullanabilecekleri alternatif API'lere yönlendiririz.

Desteğin sonlandırılması, API'ler için resmi desteğin sona erdiği ancak geliştiricilerin bu API'leri kullanmaya devam edebileceği anlamına gelir. Android'in bu sürümündeki önemli desteği sonlandırılan özellikler hakkında daha fazla bilgi edinmek için desteği sonlandırılan özellikler sayfasını inceleyin.