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

Android 16 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion'den bağımsız olarak Android 16'da çalıştırıldığında tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve uygun olduğu durumlarda bu değişiklikleri desteklemek için uygulamanızı gerektiği gibi değiştirmelisiniz.

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

Temel işlevler

Android 16 (API düzeyi 36), Android sisteminin çeşitli temel özelliklerini değiştiren veya genişleten aşağıdaki değişiklikleri içerir.

JobScheduler kota optimizasyonları

Android 16'dan itibaren, normal ve hızlandırılmış iş yürütme çalışma zamanı kotasını aşağıdaki faktörlere göre ayarlıyoruz:

  • Uygulamanın hangi uygulama bekleme modunda olduğu: Android 16'da etkin bekleme modu grupları, cömert bir çalışma zamanı kotasıyla zorunlu kılınmaya başlanacak.
  • İş, uygulama üst durumda iken yürütülmeye başlarsa: Android 16'da, uygulama kullanıcıya görünürken başlatılan ve uygulama görünmez hale geldikten sonra devam eden işler, işin çalışma süresi kotasına uyar.
  • İş, ön plan hizmeti çalıştırılırken yürütülüyorsa: Android 16'da, ön plan hizmetiyle eşzamanlı olarak yürütülen işler, iş çalışma süresi kotasına uyar. Kullanıcı tarafından başlatılan veri aktarımı için işlerden yararlanıyorsanız bunun yerine kullanıcı tarafından başlatılan veri aktarımı işlerini kullanmayı düşünebilirsiniz.

Bu değişiklik, WorkManager, JobScheduler ve DownloadManager kullanılarak planlanan görevleri etkiler. Bir işin neden durdurulduğunu belirlemek için WorkInfo.getStopReason() işlevini çağırarak işinizin neden durdurulduğunu günlüğe kaydetmenizi öneririz (JobScheduler işleri için JobParameters.getStopReason() işlevini çağırın).

Uygulamanızın durumunun kullanabileceği kaynakları nasıl etkilediği hakkında bilgi edinmek için Güç yönetimi kaynak sınırları başlıklı makaleyi inceleyin. Pil kullanımını optimize etmeye yönelik en iyi uygulamalar hakkında daha fazla bilgi için görev planlama API'leri için pil kullanımını optimize etme ile ilgili yönergelere bakın.

Ayrıca, bir işin neden yürütülmediğini anlamak için Android 16'da kullanıma sunulan yeni JobScheduler#getPendingJobReasonsHistory API'den yararlanmanızı öneririz.

Test

Uygulamanızın davranışını test etmek için, uygulama Android 16 cihazda çalıştığı sürece belirli iş kotası optimizasyonlarının geçersiz kılınmasını etkinleştirebilirsiniz.

"En üst durum, iş çalışma zamanı kotasına uyar" kuralının uygulanmasını devre dışı bırakmak için aşağıdaki adb komutunu çalıştırın:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

"Ön plan hizmetiyle eşzamanlı olarak yürütülen işler, iş çalışma süresi kotasına uyar" kuralının uygulanmasını devre dışı bırakmak için aşağıdaki adb komutunu çalıştırın:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

Belirli uygulama bekleme modu grubu davranışlarını test etmek için aşağıdaki adb komutunu kullanarak uygulamanızın uygulama bekleme modu grubunu ayarlayabilirsiniz:

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

Uygulamanızın bulunduğu uygulama bekleme grubunu anlamak için aşağıdaki adb komutunu kullanarak uygulamanızın uygulama bekleme grubunu alabilirsiniz:

adb shell am get-standby-bucket APP_PACKAGE_NAME

Boş bırakılan işleri durdurma nedeni

An abandoned job occurs when the JobParameters object associated with the job has been garbage collected, but JobService#jobFinished(JobParameters, boolean) has not been called to signal job completion. This indicates that the job may be running and being rescheduled without the app's awareness.

Apps that rely on JobScheduler, don't maintain a strong reference to the JobParameters object, and timeout will now be granted the new job stop reason STOP_REASON_TIMEOUT_ABANDONED, instead of STOP_REASON_TIMEOUT.

If there are frequent occurrences of the new abandoned stop reason, the system will take mitigation steps to reduce job frequency.

Apps should use the new stop reason to detect and reduce abandoned jobs.

If you're using WorkManager, AsyncTask, or DownloadManager, you aren't impacted because these APIs manage the job lifecycle on your app's behalf.

JobInfo#setImportantWhileForeground tamamen kullanımdan kaldırılıyor

The JobInfo.Builder#setImportantWhileForeground(boolean) method indicates the importance of a job while the scheduling app is in the foreground or when temporarily exempted from background restrictions.

This method has been deprecated since Android 12 (API level 31). Starting in Android 16, it no longer functions effectively and calling this method will be ignored.

This removal of functionality also applies to JobInfo#isImportantWhileForeground(). Starting in Android 16, if the method is called, the method returns false.

Sıralı yayın önceliği kapsamı artık global değil

Android uygulamalarının, alıcılara yayını alma ve işleme sırasını kontrol etmek için yayın alıcılarında öncelikleri tanımlamasına izin verilir. Manifestte tanımlanan alıcılarda uygulamalar önceliği tanımlamak için android:priority özelliğini, bağlamda kaydedilen alıcılarda ise IntentFilter#setPriority() API'yi kullanabilir. Bir yayın gönderildiğinde sistem, yayını öncelik sırasına göre (en yüksekten en düşüğe) alıcılara iletir.

Android 16'da, farklı işlemlerde android:priority özelliğini veya IntentFilter#setPriority() değerini kullanan yayın sırası garanti edilmez. Yayın önceliklerine tüm süreçlerde değil, yalnızca aynı başvuru sürecinde uyulur.

Ayrıca yayın öncelikleri otomatik olarak (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1) aralığına sınırlandırılır. Yalnızca sistem bileşenlerinin SYSTEM_LOW_PRIORITY, SYSTEM_HIGH_PRIORITY'ü yayın önceliği olarak ayarlamasına izin verilir.

Uygulamanız aşağıdakilerden birini yapıyorsa bu durumdan etkilenebilir:

  1. Uygulamanız aynı yayın intent'iyle birden fazla işlem tanımladı ve bu intent'leri önceliğe göre belirli bir sırada alma konusunda beklentileri var.
  2. Başvuru süreciniz diğer süreçlerle etkileşim kurar ve belirli bir sırada yayın amacı almayla ilgili beklentileri vardır.

İşlemlerin birbiriyle koordinasyon kurması gerekiyorsa diğer koordinasyon kanallarını kullanarak iletişim kurmalıdır.

ART ile ilgili dahili değişiklikler

Android 16, Android Runtime'da (ART) performansı artıran ve ek Java özellikleri için destek sağlayan en son güncellemeleri içerir. Google Play sistem güncellemeleri sayesinde bu iyileştirmeler, Android 12 (API düzeyi 31) ve sonraki sürümleri çalıştıran bir milyardan fazla cihazda da kullanılabilir.

Bu değişiklikler kullanıma sunulduğunda, ART'nin dahili yapılarına dayanan kitaplıklar ve uygulama kodları, Android 16 çalıştıran cihazların yanı sıra Google Play sistem güncellemeleri aracılığıyla ART modülünü güncelleyen önceki Android sürümlerinde düzgün çalışmayabilir.

Dahili yapılara (ör. SDK dışı arayüzler) güvenmek her zaman uyumluluk sorunlarına yol açabilir. Ancak ART değişiklikleri cihazın çalıştığı platform sürümüne bağlı olmadığı ve Google Play sistem güncellemeleri aracılığıyla bir milyardan fazla cihaza dağıtıldığı için özellikle dahili ART yapılarından yararlanan koda (veya kod içeren kitaplıklara) güvenmekten kaçınmak önemlidir.

Tüm geliştiriciler, uygulamalarını Android 16'da ayrıntılı bir şekilde test ederek uygulamalarının etkilenip etkilenmediğini kontrol etmelidir. Ayrıca, uygulamanızın dahili ART yapılarına dayalı olarak tespit ettiğimiz kitaplıklara bağımlı olup olmadığını görmek için bilinen sorunları kontrol edin. Etkilenen uygulama kodunuz veya kitaplık bağımlılıklarınız varsa mümkün olduğunda herkese açık API alternatifleri arayın ve sorun takipçimizde özellik isteği oluşturarak yeni kullanım alanları için herkese açık API'ler isteyin.

16 KB sayfa boyutu uyumluluk modu

Android 15 introduced support for 16 KB memory pages to optimize performance of the platform. Android 16 adds a compatibility mode, allowing some apps built for 4 KB memory pages to run on a device configured for 16 KB memory pages.

When your app is running on a device with Android 16 or higher, if Android detects that your app has 4 KB aligned memory pages, it automatically uses compatibility mode and display a notification dialog to the user. Setting the android:pageSizeCompat property in the AndroidManifest.xml to enable the backwards compatibility mode will prevent the display of the dialog when your app launches. To use the android:pageSizeCompat property, compile your app using the Android 16 SDK.

For best performance, reliability, and stability, your app should still be 16 KB aligned. Check out our recent blog post on updating your apps to support 16 KB memory pages for more details.

The compatibility mode dialog that displays when the system detects that a 4 KB-aligned app could run more optimally if 16 KB aligned.

Kullanıcı deneyimi ve sistem arayüzü

Android 16 (API düzeyi 36), daha tutarlı ve sezgisel bir kullanıcı deneyimi oluşturmak için aşağıdaki değişiklikleri içerir.

Kullanımı engelleyen erişilebilirlik duyurularının desteğinin sonlandırılması

Android 16, announceForAccessibility kullanımı veya TYPE_ANNOUNCEMENT erişilebilirlik etkinliklerinin gönderilmesiyle karakterize edilen erişilebilirlik duyurularını desteklememektedir. Bu durum, TalkBack ve Android'in ekran okuyucusunun kullanıcıları için tutarsız kullanıcı deneyimleri oluşturabilir. Alternatifler ise Android'in çeşitli yardımcı teknolojileri genelinde daha geniş bir kullanıcı ihtiyacı yelpazesine daha iyi hizmet eder.

Alternatiflere örnekler:

Kullanımdan kaldırılan announceForAccessibility API'nin referans dokümanlarında, önerilen alternatifler hakkında daha fazla bilgi verilmektedir.

3 düğmeli gezinme desteği

Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.

This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).

The predictive back animations in 3-button navigation mode.

Otomatik temalı uygulama simgeleri

Beginning with Android 16 QPR 2, Android automatically applies themes to app icons to create a cohesive home screen experience. This occurs if an app does not provide its own themed app icon. Apps can control the design of their themed app icon by including a monochrome layer within their adaptive icon and previewing what their app icon will look like in Android Studio.

Cihaz form faktörleri

Android 16 (API düzeyi 36), sanal cihaz sahipleri tarafından ekranlara yansıtılan uygulamalar için aşağıdaki değişiklikleri içerir.

Sanal cihaz sahibinin geçersiz kılmaları

A virtual device owner is a trusted or privileged app that creates and manages a virtual device. Virtual device owners run apps on a virtual device and then project the apps to the display of a remote device, such as a personal computer, virtual reality device, or car infotainment system. The virtual device owner is on a local device, such as a mobile phone.

Virtual device owner on phone creates virtual device that projects app to remote display.

Per-app overrides

On devices running Android 16 (API level 36), virtual device owners can override app settings on select virtual devices that the virtual device owners manage. For example, to improve app layout, a virtual device owner can ignore orientation, aspect ratio, and resizability restrictions when projecting apps onto an external display.

Common breaking changes

The Android 16 behavior might impact your app's UI on large screen form factors such as car displays or Chromebooks, especially layouts that were designed for small displays in portrait orientation. To learn how to make your app adaptive for all device form factors, see About adaptive layouts.

References

Companion app streaming

Güvenlik

Android 16 (API düzeyi 36), uygulamaları ve kullanıcıları kötü amaçlı uygulamalardan korumaya yardımcı olmak için sistem güvenliğini artıran değişiklikler içerir.

Niyet yönlendirme saldırılarına karşı gelişmiş güvenlik

Android 16, genel Intent yönlendirme saldırılarına karşı varsayılan güvenlik sağlar. Minimum uyumluluk ve geliştirici değişiklikleri gerektirir.

Intent Yönlendirme saldırılarına karşı varsayılan olarak güvenlik sağlamlaştırma çözümleri sunuyoruz. Çoğu durumda, amaçları kullanan uygulamalarda normalde uyumluluk sorunları yaşanmaz. Hangi uygulamalarda sorun yaşanabileceğini izlemek için geliştirme sürecimiz boyunca metrikler topladık.

Android'de Intent yönlendirmesi, saldırganın savunmasız bir uygulama bağlamında yeni bir bileşeni başlatmak için kullanılan bir Intent'in içeriğini kısmen veya tamamen kontrol edebildiği, kurban uygulamanın ise bir ("üst düzey") Intent'in ekstralar alanında güvenilmeyen bir alt düzey Intent başlattığı durumlarda gerçekleşir. Bu durum, saldırgan uygulamanın kurban uygulaması bağlamında özel bileşenler başlatmasına, ayrıcalıklı işlemleri tetiklemesine veya hassas verilere URI erişimi kazanmasına yol açabilir. Bu da veri hırsızlığına ve rastgele kod yürütmeye neden olabilir.

Intent yönlendirme işleme özelliğini devre dışı bırakma

Android 16, uygulamaların başlatma güvenlik korumalarını devre dışı bırakmasına olanak tanıyan yeni bir API sunuyor. Bu, varsayılan güvenlik davranışının meşru uygulama kullanım alanlarını engellediği belirli durumlarda gerekli olabilir.

Android 16 (API düzeyi 36) SDK'sı veya sonraki sürümlerine karşı derlenen uygulamalar için

Intent nesnesinde doğrudan removeLaunchSecurityProtection() yöntemini kullanabilirsiniz.

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
Android 15 (API düzeyi 35) veya önceki sürümlere göre derlenen uygulamalar için

Önerilmese de removeLaunchSecurityProtection() yöntemine erişmek için yansıtma kullanabilirsiniz.

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
    val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
    removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
    // Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }

Tamamlayıcı uygulamalar artık keşif zaman aşımları hakkında bildirim almayacak

Android 16, kullanıcının konum gizliliğini kötü amaçlı uygulamalardan korumak için yardımcı cihaz eşleme akışında yeni bir davranış sunar. Android 16'da çalışan tüm tamamlayıcı uygulamalar artık RESULT_DISCOVERY_TIMEOUT kullanılarak keşif zaman aşımı hakkında doğrudan bilgilendirilmez. Bunun yerine, kullanıcıya görsel bir iletişim kutusu gösterilerek zaman aşımı etkinlikleri bildirilir. Kullanıcı iletişim kutusunu kapattığında uygulama, RESULT_USER_REJECTED ile ilişkilendirme hatası konusunda uyarılır.

Arama süresi de orijinal 20 saniyeden uzatıldı ve cihaz bulma işlemi, arama sırasında kullanıcı tarafından herhangi bir noktada durdurulabilir. Aramanın başlatılmasından sonraki ilk 20 saniye içinde en az bir cihaz bulunursa CDM başka cihaz aramayı durdurur.

Bağlantı

Android 16 (API düzeyi 36), çevre birimi cihazlarla bağlantıyı iyileştirmek için Bluetooth yığınında aşağıdaki değişiklikleri içerir.

Geliştirilmiş tahvil kaybı işleme

Android 16'dan itibaren Bluetooth yığını, uzak bağlantı kaybı algılandığında güvenliği ve kullanıcı deneyimini iyileştirmek için güncellendi. Daha önce sistem, bağı otomatik olarak kaldırır ve yeni bir eşleme işlemi başlatırdı. Bu da istemeden yeniden eşlemeye neden olabilirdi. Birçok durumda, uygulamaların bağ kaybı etkinliğini tutarlı bir şekilde ele almadığını tespit ettik.

Android 16, deneyimi birleştirmek için sistemde bağ kaybının ele alınmasını iyileştirdi. Daha önce bağlanmış bir Bluetooth cihazı yeniden bağlandığında kimliği doğrulanamazsa sistem bağlantıyı keser, yerel bağlantı bilgilerini saklar ve kullanıcıları bağlantı kaybı hakkında bilgilendirip yeniden eşlemeye yönlendiren bir sistem iletişim kutusu gösterir.