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'den bağımsız olarak Android 15'te çalıştırıldığında 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

软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。

为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。

您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。

16 KB sayfa boyutları için destek

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。

随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。

为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用

优势和性能提升

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.

检查您的应用是否受到影响

如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题

如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。

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ı

Eski, PNG tabanlı emoji yazı tipi dosyası (NotoColorEmojiLegacy.ttf) kaldırıldı ve yalnızca vektör tabanlı dosya kaldı. Android 13'ten (API düzeyi 33) itibaren sistem emoji oluşturma aracı tarafından kullanılan emoji yazı tipi dosyası PNG tabanlı bir dosyadan vektör tabanlı bir dosyaya değiştirildi. Sistem, Android 13 ve 14'te uyumluluk nedeniyle eski yazı tipi dosyasını sakladı. Böylece, kendi yazı tipi oluşturma araçlarına sahip uygulamalar yeni sürüme geçene kadar eski yazı tipi dosyasını kullanmaya devam edebildi.

Uygulamanızın etkilenip etkilenmediğini kontrol etmek için uygulamanızın kodunda NotoColorEmojiLegacy.ttf dosyasına yapılan referansları arayın.

Uygulamanızı birkaç şekilde uyarlayabilirsiniz:

  • Metin oluşturma için platform API'lerini kullanın. Metni bitmap destekli bir Canvas olarak oluşturabilir ve gerekirse ham resim elde etmek için bunu kullanabilirsiniz.
  • Uygulamanıza COLRv1 yazı tipi desteği ekleyin. FreeType açık kaynak kitaplığı, 2.13.0 sürümü ve sonraki sürümlerde COLRv1'i destekler.
  • Son çare olarak eski emoji yazı tipi dosyasını (NotoColorEmoji.ttf) APK'nıza ekleyebilirsiniz. Ancak bu durumda uygulamanızda en son emoji güncellemeleri eksik olur. Daha fazla bilgi için Noto Emoji GitHub proje sayfasına göz atın.

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 uygulamalarda kamera ve medya davranışıyla ilgili aşağıdaki değişiklikleri yapar.

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

在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack

从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack 对象失效,以防止执行新轨道请求。

(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)

Kullanıcı deneyimi ve sistem kullanıcı 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 tahmine dayalı geri hareketi animasyonları etkinleştirildi

从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转场效果可与预测性返回导航搭配使用。
  • 请弃用动画和框架过渡,改用动画和 androidx 过渡。
  • FragmentManager 不认识的返回堆栈迁移。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

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

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

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

Ekran yansıtma istismarlarında, kullanıcılar cihaz ekranlarının paylaşıldığını fark etmediğinden finansal bilgiler gibi gizli kullanıcı verileri açığa çıkar.

Android 15 QPR1 veya sonraki sürümleri çalıştıran cihazlarda, büyük ve belirgin bir durum çubuğu çipi, devam eden ekran yansıtma işlemleri hakkında kullanıcıları uyarır. Kullanıcılar, ekranlarının paylaşılmasını, yayınlamasını veya kaydedilmesini durdurmak için çipe dokunabilir. Ayrıca, cihaz ekranı kilitlendiğinde ekran yansıtma otomatik olarak durur.

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ı

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

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 tür 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 erdirildiğ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.