Android 10, uygulamanızı etkileyebilecek güncellenmiş sistem davranışı değişiklikleri içerir.
Bu sayfada listelenen değişiklikler yalnızca API 29 veya sonraki sürümleri hedefleyen uygulamalar için geçerlidir. Uygulamanız targetSdkVersion değerini "29" veya daha yüksek bir değere ayarlıyorsa uygulamanızı, geçerli olduğu durumlarda bu davranışları düzgün bir şekilde destekleyecek şekilde değiştirmeniz gerekir.
Ayrıca, Android 10'da çalışan tüm uygulamaları etkileyen davranış değişikliklerinin listesini de inceleyin.
Not: Android 10, bu sayfada listelenen değişikliklere ek olarak aşağıdakiler de dahil olmak üzere gizlilikle ilgili çok sayıda değişiklik ve kısıtlama getirir:
- Kapsamlı depolama
- USB cihazı seri numarasına erişim
- Kablosuz bağlantıyı etkinleştirme, devre dışı bırakma ve yapılandırma özelliği
- Bağlantı API'leri için konum izinleri
API düzeyi 29 veya daha yüksek sürümleri hedefleyen uygulamaları etkileyen bu değişiklikler, kullanıcı gizliliğini artırır. Bu değişiklikleri nasıl destekleyeceğiniz hakkında daha fazla bilgi edinmek için Gizlilik değişiklikleri sayfasını inceleyin.
SDK olmayan arayüz kısıtlamalarıyla ilgili güncellemeler
Platform, uygulama kararlılığını ve uyumluluğunu sağlamak için uygulamanızın Android 9'da (API düzeyi 28) kullanabileceği SDK dışı arayüzleri kısıtlamaya başladı. Android 10, Android geliştiricileriyle yapılan ortak çalışmalar ve en son dahili testler doğrultusunda güncellenmiş kısıtlanmış SDK dışı arayüz listeleri içerir. SDK olmayan arayüzleri kısıtlamadan önce herkese açık alternatiflerin mevcut olduğundan emin olmak istiyoruz.
Android 10'u (API düzeyi 29) hedeflemeyecekseniz bu değişikliklerin bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK dışı arayüzleri kullanabilseniz de (uygulamanızın hedef API düzeyine bağlı olarak) SDK dışı bir yöntem veya alan kullanmak her zaman uygulamanızın bozulmasıyla ilgili yüksek risk taşır.
Uygulamanızın SDK dışı arayüzler kullanıp kullanmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK olmayan arayüzleri kullanıyorsa SDK alternatiflerine geçiş planlamaya başlamalısınız. Bununla birlikte, bazı uygulamaların SDK dışı arayüzleri kullanmak için geçerli kullanım alanları olduğunu biliyoruz. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.
Daha fazla bilgi edinmek için Android 10'daki SDK olmayan arayüz kısıtlamalarında yapılan güncellemeler ve SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleleri inceleyin.
Paylaşılan bellek
Ashmem, /proc/<pid>/maps içindeki dalvik haritalarının biçimini değiştirerek harita dosyasını doğrudan ayrıştıran uygulamaları etkiledi. Uygulama geliştiriciler, Android 10 veya sonraki sürümleri çalıştıran cihazlarda /proc/<pid>/maps biçimini test etmeli ve uygulama dalvik harita biçimlerine bağlıysa buna göre ayrıştırmalıdır.
Android 10'u hedefleyen uygulamalar ashmem'i (/dev/ashmem) doğrudan kullanamaz ve bunun yerine NDK'nın ASharedMemory sınıfı aracılığıyla paylaşılan belleğe erişmelidir.
Ayrıca uygulamalar, mevcut ashmem dosya tanımlayıcılarına doğrudan IOCTL'ler yapamaz ve bunun yerine paylaşılan bellek bölgeleri oluşturmak için NDK'nin ASharedMemory sınıfını veya Android Java API'lerini kullanmalıdır. Bu değişiklik, paylaşılan bellekle çalışırken güvenliği ve sağlamlığı artırarak Android'in genel performansını ve güvenliğini iyileştirir.
Uygulama ana dizini için yürütme izni kaldırıldı
Yazılabilir uygulama ana dizinindeki dosyaların yürütülmesi, W^X ihlalidir. Uygulamalar yalnızca uygulamanın APK dosyasına yerleştirilmiş ikili kodu yüklemelidir.
Android 10'u hedefleyen güvenilmeyen uygulamalar, uygulamanın ana dizinindeki dosyalarda doğrudan execve() işlevini çağıramaz.
Ayrıca, Android 10'u hedefleyen uygulamalar, dlopen() ile açılmış dosyalardaki yürütülebilir kodu bellek içinde değiştiremez ve bu değişikliklerin diske yazılmasını bekleyemez. Bunun nedeni, kitaplığın yazılabilir bir dosya tanımlayıcı aracılığıyla PROT_EXEC olarak eşlenememesidir. Metin yer değiştirmeleri içeren tüm paylaşılan nesne (.so) dosyaları buna dahildir.
Android çalışma zamanı yalnızca sistem tarafından oluşturulan OAT dosyalarını kabul eder
Android Çalışma Zamanı (ART) artık uygulama işleminden dex2oat yöntemini çağırmıyor. Bu değişiklik, ART'nin yalnızca sistem tarafından oluşturulan OAT dosyalarını kabul edeceği anlamına gelir.
ART'de AOT doğruluğunu zorunlu kılma
Geçmişte, Android Çalışma Zamanı (ART) tarafından gerçekleştirilen önceden (AOT) derleme, derleme zamanında ve çalışma zamanında sınıf yolu ortamı aynı değilse çalışma zamanı kilitlenmelerine neden olabiliyordu. Android 10 ve sonraki sürümler, bu ortam bağlamlarının her zaman aynı olmasını gerektirir. Bu durum, davranışta aşağıdaki değişikliklere neden olur:
- Özel sınıf yükleyiciler (
dalvik.systempaketindeki sınıf yükleyicilerin aksine uygulamalar tarafından yazılan sınıf yükleyiciler) AOT ile derlenmez. Bunun nedeni, ART'nin çalışma zamanında özelleştirilmiş sınıf arama uygulamasını bilememesidir. - İkincil dex dosyaları (yani birincil APK'da olmayan uygulamalar tarafından manuel olarak yüklenen dex dosyaları) arka planda AOT ile derlenir. Bunun nedeni, ilk kullanımda derlemenin çok pahalı olması ve yürütmeden önce istenmeyen gecikmelere yol açmasıdır. Uygulamalar için bölmelerin kullanılması ve ikincil dex dosyalarından uzaklaşılması önerilir.
- Android'deki paylaşılan kitaplıklar (Android manifest dosyasındaki <library> ve <uses-library> girişleri), platformun önceki sürümlerinde kullanılan hiyerarşiden farklı bir sınıf yükleyici hiyerarşisi kullanılarak uygulanır.
Tam ekran intent'ler için izin değişiklikleri
Android 10 veya sonraki sürümleri hedefleyen ve tam ekran intent'ler içeren bildirimler kullanan uygulamaların, uygulama manifest dosyasında USE_FULL_SCREEN_INTENT iznini istemesi gerekir. Bu, normal bir izin olduğundan sistem, izni isteyen uygulamaya otomatik olarak verir.
Android 10 veya sonraki sürümleri hedefleyen bir uygulama, gerekli izni istemeden tam ekran intent içeren bir bildirim oluşturmaya çalışırsa sistem, tam ekran intent'i yok sayar ve aşağıdaki günlük mesajını verir:
Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
Katlanabilir cihazlar için destek
Android 10'da katlanabilir ve büyük ekranlı cihazları destekleyen değişiklikler yapılmıştır.
Bir uygulama Android 10'da çalışırken onResume() ve onPause() yöntemleri farklı şekilde çalışır. Çoklu pencere veya çoklu ekran modunda aynı anda birden fazla uygulama göründüğünde, görünür yığınlardaki odaklanılabilir tüm üst etkinlikler devam ettirilir ancak bunlardan yalnızca biri, yani "en üstte devam ettirilen" etkinlik gerçekten odaklanır. Android 10'dan önceki sürümlerde çalışırken sistemde aynı anda yalnızca tek bir etkinlik devam ettirilebilir, görünür durumdaki diğer tüm etkinlikler duraklatılır.
"Odak" ile "en üstte devam ettirilen" etkinliği karıştırmayın. Sistem, kullanıcının en son etkileşimde bulunduğu etkinliklere daha yüksek öncelik vermek için etkinliklere z sırasına göre öncelik atar. Bir etkinlik en üstte devam ettirilebilir ancak odaklanılmayabilir (örneğin, bildirim gölgesi genişletilmişse).
Android 10 (API düzeyi 29) ve sonraki sürümlerde, etkinliğiniz en üstteki devam ettirilen konumu aldığında veya kaybettiğinde bildirim almak için onTopResumedActivityChanged() geri çağırma işlevine abone olabilirsiniz. Bu, Android 10'dan önceki devam ettirilen durumun eşdeğeridir ve uygulamanız diğer uygulamalarla paylaşılması gerekebilecek özel veya tekil kaynaklar kullanıyorsa ipucu olarak yararlı olabilir.
resizeableActivity manifest özelliğinin davranışı da değişti. Bir uygulama Android 10 (API düzeyi 29) veya sonraki sürümlerde resizeableActivity=false değerini ayarlarsa kullanılabilir ekran boyutu değiştiğinde veya uygulama bir ekrandan diğerine geçtiğinde uyumluluk moduna alınabilir.
Uygulamalar, uygulamanızın desteklediği ekran oranlarını belirtmek için Android 10'da kullanıma sunulan android:minAspectRatio özelliğini kullanabilir.
Android Studio'nun emülatör aracı, 3.5 sürümünden itibaren kodunuzu daha büyük ekranlarda test etmek için 7,3 inç ve 8 inç sanal cihazlar içerir.
Daha fazla bilgi için Uygulamalarınızı katlanabilir cihazlar için tasarlama başlıklı makaleyi inceleyin.