Davranış değişiklikleri: API 29 veya sonraki sürümleri hedefleyen uygulamalar

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 ayarlarsa geçerli olduğu durumlarda uygulamanızı bu davranışları düzgün şekilde destekleyecek şekilde değiştirmeniz gerekir.

Android 10'da çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.

Not: Android 10, bu sayfada listelenen değişikliklere ek olarak gizliliğe dayalı çok sayıda değişikliğe ve kısıtlamaya yol açıyor. şu:

  • Kapsamlı depolama
  • USB cihazının seri numarasına erişme
  • Kablosuz bağlantıyı etkinleştirme, devre dışı bırakma ve yapılandırma
  • Bağlantı API'leri için konum izinleri

API düzeyi 29 veya üstünü hedefleyen uygulamaları etkileyen bu değişiklikler ve kullanıcı gizliliğini artırır. Bu değişiklikleri nasıl destekleyeceğinizle ilgili daha fazla bilgi edinmek için Gizlilik değişiklikleri sayfasına gidin.

SDK olmayan arayüz kısıtlamalarında yapılan güncellemeler

Uygulama kararlılığını ve uyumluluğunu sağlamak için platformda kısıtlamaya başladı. SDK dışı arayüzlerin uygulamanızın Android 9'da (API düzeyi 28) kullanabileceği anlamına gelir. Android 10, Android geliştiricilerle yapılan ortak çalışmalara ve en son dahili testlere dayalı olarak kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Hedefimiz, SDK dışı arayüzleri kısıtlamadan önce herkese açık alternatiflerin kullanıma sunulduğundan emin olmaktır.

Android 10'u (API düzeyi 29) hedeflemeyecekseniz bu değişikliklerden bazıları sizi hemen etkilemeyebilir. Ancak şu anda SDK olmayan arayüzler (uygulamanızın hedef API seviyesine bağlı olarak), SDK dışı bir yöntem veya alan kullanmak her zaman uygulamasını indirin.

Uygulamanızın SDK dışı arayüz kullanıp kullanmadığından emin değilseniz bunu öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı arayüz kullanıyorsa en iyi uygulamaları paylaşacağız. Bununla birlikte, bazı uygulamalarda SDK dışı arayüzler için geçerli kullanım alanları. Alternatif bir alternatif bulamazsanız SDK olmayan arayüz kullanmak istiyorsanız bunu yeni bir herkese açık API isteğinde bulunun.

Daha fazla bilgi için Android 10'da SDK dışı arayüz kısıtlamalarıyla ilgili güncellemeler bölümünü inceleyin. SDK dışı arayüzlerle ilgili kısıtlamalar bölümünü inceleyin.

Paylaşılan anı

Ashmem, /proc/<pid>/maps adresindeki dalvik haritalarının biçimini değiştirdi. Bu değişiklik, harita dosyasını doğrudan ayrıştıran uygulamaları etkiledi. Uygulama geliştiriciler, çalıştıran cihazlarda /proc/<pid>/maps biçimini Android 10 veya sonraki bir sürüm yüklü olmalı ve uygulama dalvik harita biçimlerinden yararlanır.

Android 10'u hedefleyen uygulamalar doğrudan ashmem'i kullanamaz (/dev/ashmem) oluşturur ve bunun yerine, paylaşılan belleğe NDK’lar üzerinden ASharedMemory sınıf. Ayrıca, uygulamalar mevcut ashmem dosyası tanımlayıcılarına doğrudan IOCTL'ler yapamaz. ve NDK'nın ASharedMemory sınıfını veya Android Java'yı kullanmalıdır. Paylaşılan bellek bölgeleri oluşturmaya yönelik API'ler. Bu değişiklik, güvenliği ve paylaşılan bellekle çalışırken dayanıklılık, performans ve güvenliği iyileştirme önemli bir rol oynadı.

Uygulama ana dizini için yürütme izni kaldırıldı

Dosyaların yazılabilir uygulama ana dizininden yürütülmesi W^X ihlali. Uygulamalar yalnızca bir uygulamanın APK dosyasına yerleştirilmiş ikili program kodunu yüklemelidir.

Android 10'u hedefleyen güvenilmeyen uygulamalar execve() komutunu çağıramaz ana dizinindeki dosyalara erişebilir.

Ayrıca, Android 10'u hedefleyen uygulamalar bellekte değişiklik yapamaz. dlopen() ile açılmış ve beklenen dosyalardan yürütülebilir kod bu değişikliklerin diske yazılmasını sağlar. Çünkü kitaplık, yazılabilir bir dosya tanımlayıcı aracılığıyla PROT_EXEC eşlendi. Buna, herhangi bir metin yeri değiştirilmiş paylaşılan nesne (.so) dosyaları.

Android çalışma zamanı yalnızca sistem tarafından oluşturulan OAT dosyalarını kabul eder

Android çalışma zamanı (ART) artık uygulamadan dex2oat öğesini çağırmıyor bahsedeceğim. Bu değişiklik, ART'ın yalnızca oluşturabilirsiniz.

ART'ta AOT doğruluğunu zorunlu kılma

Geçmişte, Android tarafından gerçekleştirilen "önceden tanımlanmış" (AOT) derleme Sınıf yolu ortamı şöyle değilse çalışma zamanı (ART) çalışma zamanı kilitlenmelerine neden olabilir aynı performansı sağlar. Android 10 ve sonraki sürümler Bu ortam bağlamlarının her zaman aynı olmasını gerektirir. Bu da aşağıdaki davranış değişiklikleri söz konusudur:

  • Özel sınıf yükleyiciler (sınıfın aksine, uygulamalar tarafından yazılan sınıf yükleyiciler) dalvik.system paketindeki yükleyiciler (AOT) olarak derlenmiş değildir. Çünkü ART, çalışma zamanında özelleştirilmiş sınıf araması uygulamasını bilemez.
  • İkincil dex dosyaları; yani birincil APK'lar: Arka planda AOT tarafından derlenir. Bunun nedeni, ilk ve derleme işlemi çok pahalı olabilir. Bu da, işleme başlamadan önce birkaç adım var. Not: Uygulamalarda, bölümleri kullanmak ve ikincil dex dosyaları kullanmanız önerilir.
  • Android'de paylaşılan kitaplıklar (<library> ve <uses-library> emin olmak için) farklı bir kod sınıf yükleyici hiyerarşisi, platformun önceki sürümlerinde kullanılandan daha fazladır.

Tam ekran intent'ler için izin değişiklikleri

Android 10 veya sonraki bir sürümü hedefleyen ve bildirimleri şu cihazla kullanan uygulamalar: tam ekran intents, "the" USE_FULL_SCREEN_INTENT izin vermiş olması gerekir. Bu, normal söz konusu olabilir. istekte bulunan uygulamaya otomatik olarak izin 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 yoksayıp aşağıdaki günlük mesajını döndürür:

Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission

Katlanabilir cihazlar için destek

Android 10'da katlanabilir cihazları 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ı çalışır. Çoklu pencerede aynı anda birden fazla uygulama göründüğünde veya çoklu ekran modunda, görünür gruplardaki odaklanılabilir en önemli etkinliklerin tümü devam ettirilmiş durumda ancak içlerinden yalnızca biri, "en üstte devam ettirilen" etkinlik, odaklanıyor. Android 10'dan önceki sürümlerde çalışırken yalnızca sistemdeki tek bir etkinlik de devam ettirilebilir; diğer tüm etkinlikleri etkinlikler duraklatıldı.

"Odaklanma" kavramını karıştırmayın "en üstte devam ettirilen" etkinliği'ne dokunun. Sistem, her bir görev için Z-sırasına göre Kullanıcının en son etkileşimde bulunduğu etkinlikler. Bir etkinlik, en üst devam ettirilen ancak odakta olmayan (örneğin, bildirim gölgesi genişletildi).

Android 10 (API düzeyi 29) ve sonraki sürümlerde onTopResumedActivityChanged() geri arama etkinliğiniz en üst düzey devam ettirildiğinde veya kaybettiğinde bildirim almak için dokunun. Bu, Android 10'dan önceki devam ettirilen duruma eşdeğerdir ve faydalı olabilir. Örneğin, uygulamanız gereken özel veya tekil kaynaklar kullanıyorsa diğer uygulamalarla paylaşılacak.

Tarayıcının davranışı resizeableActivity manifesto özelliğinde de değişiklik yapıldı. Uygulama resizeableActivity=false uygulaması Android 10 (API düzeyi 29) veya sonraki sürümlerde ise uyumluluk moduna alınmış olabilir. mevcut ekran boyutu değiştiğinde veya uygulama bir ekrandan başka bir tane.

Uygulamalar, android:minAspectRatio özelliği ile birlikte Android 10'da kullanıma sunulan bu özelliğin, uygulamanızın desteklediği oranları göstermelisiniz.

3.5 sürümünden itibaren Android Studio'nun emülatör aracı 7,3 inç içerir ve 8 inç sanal cihazlar kullanarak kodunuzu daha büyük ekranlarla test edebilirsiniz.

Daha fazla bilgi için Uygulamalarınızı katlanabilir cihazlar için tasarlama konusuna bakın.