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 değerinden bağımsız olarak Android 16'da çalışan 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ı

Starting in Android 16, we're adjusting regular and expedited job execution runtime quota based on the following factors:

  • Which app standby bucket the application is in: in Android 16, active standby buckets will start being enforced by a generous runtime quota.
  • If the job starts execution while the app is in a top state: in Android 16, Jobs started while the app is visible to the user and continues after the app becomes invisible, will adhere to the job runtime quota.
  • If the job is executing while running a Foreground Service: in Android 16, jobs that are executing concurrently with a foreground service will adhere to the job runtime quota. If you're leveraging jobs for user initiated data transfer, consider using user initiated data transfer jobs instead.

This change impacts tasks scheduled using WorkManager, JobScheduler, and DownloadManager. To debug why a job was stopped, we recommend logging why your job was stopped by calling WorkInfo.getStopReason() (for JobScheduler jobs, call JobParameters.getStopReason()).

For information about how your app's state affects the resources it can use, see Power management resource limits. For more information on battery-optimal best practices, refer to guidance on optimize battery use for task scheduling APIs.

We also recommend leveraging the new JobScheduler#getPendingJobReasonsHistory API introduced in Android 16 to understand why a job has not executed.

Testing

To test your app's behavior, you can enable override of certain job quota optimizations as long as the app is running on an Android 16 device.

To disable enforcement of "top state will adhere to job runtime quota", run the following adb command:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

To disable enforcement of "jobs that are executing while concurrently with a foreground service will adhere to the job runtime quota", run the following adb command:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

To test certain app standby bucket behavior, you can set the app standby bucket of your app using the following adb command:

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

To understand the app standby bucket your app is in, you can get the app standby bucket of your app using the following adb command:

adb shell am get-standby-bucket APP_PACKAGE_NAME

Boş bırakılan işlerin durdurulma nedeni

İşle ilişkili JobParameters nesnesi çöp toplandıysa ancak iş tamamlandığını belirtmek için JobService#jobFinished(JobParameters, boolean) çağrılmadıysa iş terk edilmiş olur. Bu, işin uygulamanın bilgisi olmadan çalıştığını ve yeniden planlandığını gösterir.

JobScheduler'ı kullanan uygulamalar JobParameters nesnesine güçlü bir referans sağlamaz ve zaman aşımı artık STOP_REASON_TIMEOUT yerine yeni iş durdurma nedeni STOP_REASON_TIMEOUT_ABANDONED ile verilir.

Yeni terk edilmiş duraklatma nedeni sık sık gerçekleşirse sistem, iş sıklığını azaltmak için azaltma adımları atar.

Uygulamalar, terk edilmiş işleri tespit edip azaltmak için yeni durdurma nedenini kullanmalıdır.

WorkManager, AsyncTask veya DownloadManager kullanıyorsanız bu API'ler iş yaşam döngüsünü uygulamanız adına yönettiğinden bu değişiklikten etkilenmezsiniz.

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 apps are allowed to define priorities on broadcast receivers to control the order in which the receivers receive and process the broadcast. For manifest-declared receivers, apps can use the android:priority attribute to define the priority and for context-registered receivers, apps can use the IntentFilter#setPriority() API to define the priority. When a broadcast is sent, the system delivers it to receivers in order of their priority, from highest to lowest.

In Android 16, broadcast delivery order using the android:priority attribute or IntentFilter#setPriority() across different processes will not be guaranteed. Broadcast priorities will only be respected within the same application process rather than across all processes.

Also, broadcast priorities will be automatically confined to the range (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1). Only system components will be allowed to set SYSTEM_LOW_PRIORITY, SYSTEM_HIGH_PRIORITY as broadcast priority.

Your app might be impacted if it does either of the following:

  1. Your application has declared multiple processes with the same broadcast intent, and has expectations around receiving those intents in a certain order based on the priority.
  2. Your application process interacts with other processes and has expectations around receiving a broadcast intent in a certain order.

If the processes need to coordinate with each other, they should communicate using other coordination channels.

ART dahili değişiklikleri

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, platformun performansını optimize etmek için 16 KB bellek sayfası desteğini kullanıma sundu. Android 16, 4 KB bellek sayfaları için geliştirilmiş bazı uygulamaların 16 KB bellek sayfaları için yapılandırılmış bir cihazda çalışmasına olanak tanıyan bir uyumluluk modu ekler.

Uygulamanız Android 16 veya sonraki bir sürümün yüklü olduğu bir cihazda çalışırken Android, uygulamanızda 4 KB'lık hizalanmış bellek sayfaları olduğunu algılarsa otomatik olarak uyumluluk modunu kullanır ve kullanıcıya bir bildirim iletişim kutusu gösterir. AndroidManifest.xml özelliğini AndroidManifest.xml içinde geriye dönük uyumluluk modunu etkinleştirecek şekilde ayarlamak, uygulamanız başlatıldığında iletişim kutusunun gösterilmesini engeller.android:pageSizeCompat android:pageSizeCompat mülkünü kullanmak için uygulamanızı Android 16 SDK'sını kullanarak derleyin.

En iyi performans, güvenilirlik ve kararlılık için uygulamanız 16 KB'ya hizalanmış olmalıdır. Uygulamalarınızı 16 KB bellek sayfalarını destekleyecek şekilde güncellemeyle ilgili daha fazla bilgi için son blog yayınımıza göz atın.

Sistem, 4 KB'lık bir uygulamanın 16 KB'lık bir uygulamayla daha optimal şekilde çalışabileceğini tespit ettiğinde görüntülenen uyumluluk modu iletişim kutusu.

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ği sonlandırılıyor

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ılma işlemleri

Sanal cihaz sahibi, sanal cihaz oluşturan ve yöneten güvenilir veya ayrıcalıklı bir uygulamadır. Sanal cihaz sahipleri, uygulamaları sanal cihazda çalıştırıp kişisel bilgisayar, sanal gerçeklik cihazı veya araba bilgi-eğlence sistemi gibi uzak bir cihazın ekranına yansıtır. Sanal cihaz sahibi, cep telefonu gibi yerel bir cihaz kullanıyordur.

Telefondaki sanal cihaz sahibi, uygulamayı uzak ekrana yansıtan bir sanal cihaz oluşturur.

Uygulama bazında geçersiz kılma işlemleri

Android 16 (API düzeyi 36) çalıştıran cihazlarda sanal cihaz sahipleri, sanal cihaz sahiplerinin yönettiği belirli sanal cihazlardaki uygulama ayarlarını geçersiz kılabilir. Örneğin, uygulama düzenini iyileştirmek için sanal cihaz sahibi, uygulamaları harici bir ekrana yansıtırken yön, en-boy oranı ve yeniden boyutlandırma kısıtlamalarını yok sayabilir.

Sık karşılaşılan zarar veren değişiklikler

Android 16'daki bu davranış, özellikle dikey yönde küçük ekranlar için tasarlanmış düzenlerde, araba ekranları veya Chromebook'lar gibi büyük ekranlı form faktörlerinde uygulamanızın kullanıcı arayüzünü etkileyebilir. Uygulamanızı tüm cihaz form faktörlerine uyarlanabilir hale getirmeyi öğrenmek için Uyarlanabilir düzenler hakkında başlıklı makaleyi inceleyin.

Referanslar

Yardımcı uygulama akışı

Güvenlik

Android 16 (API düzeyi 36), uygulamaları ve kullanıcıları kötü amaçlı uygulamalardan korumak 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, minimum uyumluluk ve geliştirici değişiklikleri gerektirerek genel Intent yönlendirme saldırılarına karşı varsayılan güvenlik sağlar.

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 herhangi bir uyumluluk sorunu 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ının bağlamında özel bileşenleri 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ına veya sonraki sürümlere göre 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 introduces a new behavior during companion device pairing flow to protect the user's location privacy from malicious apps. All companion apps running on Android 16 are no longer directly notified of discovery timeout using RESULT_DISCOVERY_TIMEOUT. Instead, the user is notified of timeout events with a visual dialog. When the user dismisses the dialog, the app is alerted of the association failure with RESULT_USER_REJECTED.

The search duration has also been extended from the original 20 seconds, and the device discovery can be stopped by the user at any point during the search. If at least one device was discovered within the first 20 seconds of starting the search, the CDM stops searching for additional devices.

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ş bağ 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.