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

Android 10'da, uygulamanızı etkileyebilecek davranış değişiklikleri yer alır. Bu sayfada listelenen değişiklikler, uygulamanız çalışırken geçerli olur uygulamanın targetSdkVersion sürümünden bağımsız olarak Android 10'da. Hedeflerinizi ve ve bu değişiklikleri doğru şekilde destekleyecek şekilde gereken değişiklikleri yapın.

Uygulamanızın targetSdkVersion değeri 29 veya daha yüksekse ayrıca şunları da yapmanız gerekir: destekler. Ayrıntılar için 29 yaş ve üzeri kullanıcıları hedefleyen uygulamalarda davranış değişiklikleri başlıklı makaleyi okuyun.

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:

  • Cihaz konumuna arka planda erişim
  • Arka plan etkinliği başlangıcı
  • Kişilerin yakın ilgi alanı bilgileri
  • MAC adresinin rastgele seçilmesi
  • Kamera meta verileri
  • İzin modeli

Bu değişiklikler tüm uygulamaları etkilemekle birlikte kullanıcı gizliliğini iyileştiriyor. Şu konu hakkında daha fazla bilgi edinmek için: daha fazla bilgi edinmek için Gizlilikle ilgili değişiklikler sayfası.

SDK dışı arayüz kısıtlamaları

Platform, uygulama kararlılığı 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ş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. Amacımız, herkesin SDK dışı arayüzler kısıtlanmadan önce bunun için farklı alternatifler mevcuttur.

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 şunları yapabilirsiniz: uygulamanızı test ederek öğrenin. 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 edinmek için Android 10'daki SDK dışı arayüz kısıtlamalarında yapılan güncellemeler ve SDK dışı arayüzlerde kısıtlamalar başlıklı makaleleri inceleyin.

Hareketle Gezinme

Android 10'dan itibaren kullanıcılar olanak tanır. Bir kullanıcı hareketle gezinmeyi etkinleştirirse bu işlem, uygulamanın API düzeyi 29'u hedefleyip hedeflemediğine bakılmaksızın. Örneğin, kullanıcı hızlıca kaydırırsa ekranın kenarından uzaklaştırdığınızda, sistem bu hareketi bir Geri Bir uygulama, gezinmenin bazı bölümleri için bu hareketi özel olarak geçersiz kılmadığı sürece, ekranda görebilirsiniz.

Uygulamanızın hareketle gezinmeyle uyumlu olması için uygulama içeriğini kenardan kenara genişletmeniz ve çakışan hareketleri uygun şekilde ele almanız gerekir. Bilgi için Hareketle gezinme konusuna bakın. belgelerinden faydalanabilirsiniz.

NDK

Android 10, aşağıdaki NDK değişikliklerini içerir.

Paylaşılan nesneler metin taşıma içeremez

Android 6.0 (API düzeyi 23) izin verilmeyen kullanım metin yer değiştirmeleri gibi. Kod olduğu gibi yüklenmeli ve yüklenmemelidir değiştirebilirsiniz. Bu değişiklik, uygulama yüklenme sürelerini ve güvenliği iyileştirir.

SELinux, Android 10 veya sonraki sürümleri hedefleyen uygulamalarda bu kısıtlamayı uygular. Bu uygulamalar metin içeren paylaşılan nesneleri kullanmaya devam ederse buralarda kırılma riski var.

Bionic kitaplıkları ve dinamik bağlayıcı yollarındaki değişiklikler

Android 10'dan başlayarak bazı yollar normal dosyalar. Eskiden normal dosyalar olan yolları kullanan uygulamalar bozulabilir:

  • /system/lib/libc.so -> /apex/com.android.runtime/lib/bionic/libc.so
  • /system/lib/libm.so -> /apex/com.android.runtime/lib/bionic/libm.so
  • /system/lib/libdl.so -> /apex/com.android.runtime/lib/bionic/libdl.so
  • /system/bin/linker -> /apex/com.android.runtime/bin/linker

Bu değişiklikler, yalnızca lib/, lib64/ ile değiştirildi.

Uyumluluk için sembolik bağlantılar eski yollarda sağlanır. Örneğin, /system/lib/libc.so, /apex/com.android.runtime/lib/bionic/libc.so dosyasına giden bir kısayoldur. Bu nedenle dlopen(“/system/lib/libc.so”) çalışmaya devam eder ancak uygulamalar, /proc/self/maps veya benzeri bir yöntemle yüklü kitaplıkları incelemeye çalıştıklarında farkı fark ederler. Bu durum normal değildir ancak bazı uygulamaların, bilgisayar korsanlığı önleme süreçleri kapsamında bunu yaptığını tespit ettik. Bu durumda, /apex/… yolları Bionic dosyaları için geçerli yollar olarak eklenmelidir.

Yalnızca yürütülecek bellekle eşlenen sistem ikili programları/kitaplıkları

Android 10'dan itibaren, sistem ikili programlarının yürütülebilir segmentleri ve kitaplıklar, sertleştirme olarak yalnızca yürütülebilir (okunamaz) belleğe eşlenir güvenlik tekniklerinden bahsedeceğiz. Uygulamanız yalnızca yürütülebilir olarak işaretlenmiş bellek segmentleri (hata, güvenlik açığı veya bilinçli bellek denetimi: Sistem, uygulamanıza bir SIGSEGV sinyali gönderir.

Bu davranışın kilitlenmeye neden olup olmadığını anlamak için /data/tombstones/ konumundaki tombstone dosyası. Yalnızca yürütmeyle ilgili bir kilitlenme şu iptal mesajını içeriyor:

Cause: execute-only (no-read) memory access error; likely due to data in .text.

Bellek denetimi gibi işlemleri gerçekleştirmek üzere bu sorunu çözmek için mprotect() Ancak bu ayarı tekrar yalnızca daha sonra çalıştırılabilir. Bunun nedeni, bu izin ayarının hem de kullanıcılarınız için koruma sağlar.

Güvenlik

Android 10 aşağıdaki güvenlik değişikliklerini içerir.

TLS 1.3 varsayılan olarak etkindir

Android 10 ve sonraki sürümlerde TLS 1.3, tüm istemciler için varsayılan olarak etkindir. TLS bağlantıları. Aşağıda TLS 1.3 kullanımımızla ilgili birkaç önemli ayrıntı verilmiştir uygulama:

  • TLS 1.3 şifre paketleri özelleştirilemez. Desteklenen TLS 1.3 şifre paketleri, TLS 1.3 etkinleştirildiğinde her zaman etkindir. setEnabledCipherSuites() çağrısı yapılarak devre dışı bırakma girişimleri yoksayılır.
  • TLS 1.3 için HandshakeCompletedListener nesneler, oturumlar oturum önbelleğine eklenmeden önce çağrılır. (TLS 1.2 ve önceki sürümlerde bu nesneler, oturumlar oturum önbelleğine eklendikten sonra çağrılır.)
  • SSLEngine örneklerinin bir SSLHandshakeException açık bu örneklerde bir sorun, Onun yerine SSLProtocolException Android 10 ve sonraki sürümlerde kullanılabilir.
  • 0-RTT modu desteklenmez.

İsterseniz, şunu çağırarak TLS 1.3'ün devre dışı olduğu bir SSLContext edinebilirsiniz: SSLContext.getInstance("TLSv1.2") Ayrıca, protokol sürümlerini her bağlantı için ayrı ayrı etkinleştirebilir veya devre dışı bırakabilirsiniz: setEnabledProtocols() aranıyor bir kontrol noktası görevi görebilir.

SHA-1 ile imzalanmış sertifikalara TLS'de güvenilmez

Android 10'da, SHA-1 karma algoritmasını kullanan sertifikalar TLS bağlantılarında güvenilmez. Kök CA'lar bu tür bir sertifika vermemiş ve Chrome'da veya diğer büyük tarayıcılarda artık güvenilmemektedir.

Bağlantı, doğrudan bir yapılandırma sunan bir siteyle SHA-1 kullanan sertifikadır.

KeyChain davranışı değişiklikleri ve iyileştirmeleri

Google Chrome gibi bazı tarayıcılar, TLS sunucusu bir TLS el sıkışması kapsamında sertifika isteği mesajı gönderdiğinde kullanıcıların sertifika seçmesine olanak tanır. Şu tarih itibarıyla: Android 10, KeyChain nesneleri, kartı verenleri ve KeyChain.choosePrivateKeyAlias() çağrılırken temel spesifikasyon parametreleri kullanıcılara bir sertifika seçimi istemi gösterir. Özellikle, bu istem sunucu spesifikasyonlarına uymayan seçenekler içermelidir.

Kullanıcı tarafından seçilebilir sertifika yoksa, sertifika sunucu spesifikasyonuyla eşleşiyor veya cihazda hiçbir sertifika sertifika seçimi istemi hiç görünmüyor.

Ayrıca Android 10 veya sonraki sürümlerde Anahtarları veya CA sertifikalarını bir KeyChain nesnesine aktarmak için cihaz ekran kilidini açın.

Diğer TLS ve kriptografi değişiklikleri

TLS ve kriptografi kitaplıklarında pek çok değişiklik vardır:

  • AES/GCM/NoPadding ve ChaCha20/Poly1305/NoPadding şifreleri daha fazla sonuç döndürüyor getOutputSize() ile karşılaştırıldığında doğru arabellek boyutları.
  • TLS_FALLBACK_SCSV şifre paketi, TLS 1.2 veya üzeri bir maks. protokol olmalıdır. TLS sunucusundaki iyileştirmeler nedeniyle TLS harici yedekleri kullanmayı denemeniz önerilmez. Bunun yerine TLS sürüm iletişimi
  • ChaCha20-Poly1305, ChaCha20/Poly1305/NoPadding için kullanılan bir takma addır.
  • Sonunda nokta bulunan ana makine adları geçerli SNI ana makine adları olarak kabul edilmez.
  • CertificateRequest öğesindeki supported_signature_algorithms uzantısı: dikkate alınır.
  • Android Anahtar Deposu'ndakiler gibi opak imzalama anahtarları TLS'deki RSA-PSS imzaları.

Kablosuz doğrudan yayınlar

Android 10'da kablosuz ağ ile ilgili aşağıdaki yayınlar Doğrudan seçeneği sabit değildir:

Uygulamanız kayıt sırasında bu yayınları alıyor. Bunun nedeni yapışkansaydı, ilk kullanıma hazırlarken uygun get() yöntemini kullanın: anlayıp anlamayabilir.

Wi-Fi Aware özellikleri

Android 10'a, Wi-Fi Aware'i kullanarak TCP/UDP Yuvası oluşturma işlemini kolaylaştırmak için destek eklendi veri yollarıdır. ServerSocket ağına bağlanan bir TCP/UDP soketi oluşturmak için istemci cihazın IPv6 adresini ve sunucunun bağlantı noktasını bilmesi gerekir. Daha önce bu bilgilerin bant dışı olarak (ör. BT veya Wi-Fi Aware katman 2 mesajları kullanılarak) iletilmesi veya mDNS gibi diğer protokoller kullanılarak bant içinde keşfedilmesi gerekiyordu. Entegre Android 10'da bilgiler, ağ kurulumunun bir parçası olarak iletilebilir.

Sunucu aşağıdakilerden birini yapabilir:

  • Bir ServerSocket başlatın ve kullanılacak bağlantı noktasını ayarlayın veya edinin.
  • Kablosuz duyarlı ağ isteğinin bir parçası olarak bağlantı noktası bilgilerini belirtin.

Aşağıdaki kod örneğinde, ağ isteği:

Kotlin

val ss = ServerSocket()
val ns = WifiAwareNetworkSpecifier.Builder(discoverySession, peerHandle)
  .setPskPassphrase("some-password")
  .setPort(ss.localPort)
  .build()

val myNetworkRequest = NetworkRequest.Builder()
  .addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE)
  .setNetworkSpecifier(ns)
  .build()

Java

ServerSocket ss = new ServerSocket();
WifiAwareNetworkSpecifier ns = new WifiAwareNetworkSpecifier
  .Builder(discoverySession, peerHandle)
  .setPskPassphrase(some-password)
  .setPort(ss.getLocalPort())
  .build();

NetworkRequest myNetworkRequest = new NetworkRequest.Builder()
  .addTransportType(NetworkCapabilities.TRANSPORT_WIFI_AWARE)
  .setNetworkSpecifier(ns)
  .build();

Ardından istemci, IPv6'yı edinmek için Wi-Fi Aware ağ isteği gerçekleştirir ve sunucu tarafından sağlanan bağlantı noktası:

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
  override fun onAvailable(network: Network) {
    ...
  }
  
  override fun onLinkPropertiesChanged(network: Network,
      linkProperties: LinkProperties) {
    ...
  }

  override fun onCapabilitiesChanged(network: Network,
      networkCapabilities: NetworkCapabilities) {
    ...
    val ti = networkCapabilities.transportInfo
    if (ti is WifiAwareNetworkInfo) {
       val peerAddress = ti.peerIpv6Addr
       val peerPort = ti.port
    }
  }
  override fun onLost(network: Network) {
    ...
  }
};

connMgr.requestNetwork(networkRequest, callback)

Java

callback = new ConnectivityManager.NetworkCallback() {
  @Override
  public void onAvailable(Network network) {
    ...
  }
  @Override
  public void onLinkPropertiesChanged(Network network,
      LinkProperties linkProperties) {
    ...
  }
  @Override
  public void onCapabilitiesChanged(Network network,
      NetworkCapabilities networkCapabilities) {
    ...
    TransportInfo ti = networkCapabilities.getTransportInfo();
    if (ti instanceof WifiAwareNetworkInfo) {
       WifiAwareNetworkInfo info = (WifiAwareNetworkInfo) ti;
       Inet6Address peerAddress = info.getPeerIpv6Addr();
       int peerPort = info.getPort();
    }
  }
  @Override
  public void onLost(Network network) {
    ...
  }
};

connMgr.requestNetwork(networkRequest, callback);

Go cihazlarda SYSTEM_ALERT_WINDOW

Android 10 (Go sürümü) cihazlarda çalışan uygulamalar SYSTEM_ALERT_WINDOW izni gerekir. Bunun nedeni, bindirme pencere çizimlerinin aşırı bellek kullanmasıdır. Bu durum özellikle düşük bellekli Android'in performansını olumsuz yönde etkiliyor. cihazlar.

Android 9 veya önceki sürümleri çalıştıran Go sürümü bir cihazda çalışan bir uygulama SYSTEM_ALERT_WINDOW izniniz varsa Cihaz Android 10'a yükseltildiğinde. Ancak, bu özelliğe sahip olmayan uygulamalar bu izin, cihaz yeni sürüme geçirildikten sonra verilememektedir.

Go cihazındaki bir uygulama ACTION_MANAGE_OVERLAY_PERMISSION işlemini içeren bir intent gönderirse sistem isteği otomatik olarak reddeder ve kullanıcıyı, cihazı yavaşlattığı için izin verilmediğini belirten bir Ayarlar ekranına yönlendirir. Go cihazındaki bir uygulama Settings.canDrawOverlays() yöntem her zaman false (yanlış) değerini döndürür. Bu kısıtlamaların uygulamalar için geçerli olmadığını Bu kullanıcı, SYSTEM_ALERT_WINDOW iznini aldı. Android 10'a yükseltilmişti.

Eski Android sürümlerini hedefleyen uygulamalar için uyarılar

Android 10 veya sonraki sürümleri çalıştıran cihazlar ilk seferde kullanıcıları uyarır Bu kullanıcılar, Android 5.1 (API düzeyi 22) veya önceki sürümü hedefleyen uygulamaları çalıştırıyorlarsa. Uygulamanın çalışması için kullanıcının izin vermesi gerekiyorsa uygulamanın ilk kez çalışmasına izin verilmeden önce kullanıcıya uygulamanın izinlerini ayarlama fırsatı da verilir.

Google Play'in hedef API koşulları nedeniyle kullanıcılar bu uyarıları yalnızca yakın zamanda güncellenmemiş bir uygulamayı çalıştırdıklarında görür. Diğer mağazalar üzerinden dağıtılan uygulamalar için benzer hedef API koşulları 2019'da yürürlüğe girecek. Daha fazla bilgi için daha fazla bilgi edinmek için 2019.

SHA-2 CBC şifre paketleri kaldırıldı

Aşağıdaki SHA-2 CBC şifre paketleri platformdan kaldırıldı:

  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

Bu şifre paketleri, GCM'yi kullanan benzer şifre paketlerinden daha az güvenlidir. ve çoğu sunucu bu şifrenin hem GCM hem de CBC varyantlarını destekler ya da ikisini de desteklemez.

Uygulama kullanımı

Android 10, uygulama kullanımıyla ilgili aşağıdaki davranış değişikliklerini sunar:

  • Kullanım İstatistikleri uygulama kullanımıyla ilgili iyileştirmeler - Android 10, Kullanım İstatistikleri: bölünmüş ekran veya pencere içinde pencere modunda kullanılır. Ayrıca, Android 10, hazır uygulama kullanımını doğru şekilde izler.

  • Uygulama bazında gri tonlama - Android 10, uygulama bazında gri tonlamalı ekran modu ayarlayabilir.

  • Uygulama bazında dikkat dağıtıcı durum - Android 10, uygulamaları seçerek "dikkat dağıtıcı durumuna" ayarlayabilir burada: bildirimleri atlanır ve önerilen uygulamalar olarak gösterilmez.

  • Askıya alma ve oynatma: Askıya alınan uygulamalar Android 10'da ses çalamaz.

HTTPS bağlantısı değişiklikleri

Android 10 çalıştıran bir uygulama null cihazını geçirirse setSSLSocketFactory() IllegalArgumentException gerçekleşir. Önceki sürümlerde null, setSSLSocketFactory() öğesine iletiliyor mevcut varsayılan değerde geçirilmiş olarak fabrika.

android.preference kitaplığı kullanımdan kaldırıldı

android.preference kitaplığı, Android 10 sürümünden itibaren kullanımdan kaldırılmıştır. Geliştiriciler bunun yerine, Android uygulamasının bir parçası olan AndroidX tercih kitaplığını Jetpack'i yükleyin. Taşıma ve geçiş süreçlerine yardımcı olacak hakkında daha fazla bilgi edinmek için Ayarlar'ın Rehber ve herkese açık örneğimiz uygulama ve referans belgelerini inceleyin.

ZIP dosyası yardımcı programı kitaplığındaki değişiklikler

Android 10, ZIP dosyalarını işleyen java.util.zip paketindeki sınıflarda aşağıdaki değişiklikleri sunar. Bu değişiklikler, kitaplığın davranışını Android ile java.util.zip kullanan diğer platformlar arasında daha tutarlı hale getirir.

Şişirici

Önceki sürümlerde, Inflater sınıfındaki bazı yöntemler bir hata içeriyordu. Şu durumda IllegalStateException: end() çağrısından sonra çağrıldı. Android 10'da bu yöntemler bir Bunun yerine NullPointerException.

ZipFile

Android 10 ve sonraki sürümlerde ZipFile File, int ve Charset türündeki bağımsız değişkenleri alan bir komut dosyası, Sağlanan ZIP dosyası varsa ZipException hiçbir dosya içermiyor.

ZipOutputStream

Android 10 ve sonraki sürümlerde finish() yöntemi ZipOutputStream şu fırlatmıyor: ZipException bir dosya içermeyen bir ZIP dosyası için çıkış akışı.

Kamera değişiklikleri

Kamera kullanan birçok uygulama, cihaz dikey yapılandırmadaysa ise fiziksel cihaz da aşağıdaki şekilde dikey yönde olmalıdır: Kamera yönü. Bu, geçmişte güvenli bir varsayımdı ancak mevcut form faktörlerinin (ör. katlanabilir cihazlar) genişletilmesiyle birlikte değişiklikler O cihazların yanlış döndürülmesine veya ölçeklenmesine (ya da emin olun.

API düzeyi 24 veya üstünü hedefleyen uygulamalar android:resizeableActivity ve bunları kullanmak için işlemi yapabilirsiniz.

Pil kullanımı takibi

Android 10'dan başlayarak SystemHealthManager sıfırlandı önemli bir güncellemenin ardından cihaz fişi çekildikten sonra her zaman cihaz kullanım istatistikleri şarj etkinliği. Genel anlamda, önemli bir şarj işlemi şunlardan biridir: tamamen şarj oldu veya cihaz çoğu zaman tükenmişken, neredeyse şarj oldu.

Android 10'dan önceki sürümlerin yüklü olduğu cihazlarda pil kullanım istatistikleri şu şekilde sıfırlanır: cihazın fişe takılıp çekilmediğinden emin olun.

Android Beam desteğinin sonlandırılması

Android 10'da, Near Field Communication (NFC) üzerinden cihazlar arasında veri paylaşımını başlatmak için kullanılan eski bir özellik olan Android Beam'i kullanımdan kaldırıyoruz. Ayrıca, ilgili NFC API'lerinden birkaçını da kullanımdan kaldırıyoruz. Android Beam, kullanmak isteyen cihaz üreticisi iş ortakları tarafından isteğe bağlı olarak kullanılabilir ancak artık etkin olarak geliştirilmemektedir. Android diğer NFC'yi desteklemeye devam edecek özellikleri ile API'leri ve etiketlerden okuma gibi kullanım ödemeler beklendiği gibi çalışmaya devam edecektir.

java.math.BigDecimal.stripTrailingZeros() davranışında değişiklik

BigDecimal.stripTrailingZeros() artık giriş değeri sıfır ise sonundaki sıfırları özel durum olarak korumaz.

java.util.regex.Matcher ve Kalıp davranışı değişiklikleri

split() işlevinin sonucu, artık boş bir String ile başlamayacak şekilde değiştirildi (""), girişin başlangıcında sıfır genişlikli bir eşleşme olduğunda gösterilir. Bu ayrıca String.split() etkilenir. Örneğin, "x".split("") artık {"x"} değerini döndürüyor oysa eski Android sürümlerinde {"", "x"} değerini döndürüyordu. "aardvark".split("(?=a)" artık şu komut yerine {"a", "ardv", "ark"} değerini döndürüyor: {"", "a", "ardv", "ark"}.

Geçersiz bağımsız değişkenler için istisna davranışı da iyileştirildi:

  • appendReplacement(StringBuffer, String) artık String yerine IndexOutOfBoundsException yerine IllegalArgumentException atıyor. İlgili içeriği oluşturmak için kullanılan String değişimi bir $ ile biterse de aynı istisna geçerli olur. Daha önce, bu senaryoda herhangi bir istisna yoktu.
  • replaceFirst(null), Matcher uygulamasında reset() öğesini çağırır. NullPointerException. NullPointerException artık şurada da atılıyor: eşleşmez. Daha önce yalnızca bir maç olduğunda atılıyordu.
  • start(int group), end(int group) ve group(int group), grup dizini sınırları dışındaysa artık daha genel bir IndexOutOfBoundsException hatası veriyor. Daha önce bu yöntemler ArrayIndexOutOfBoundsException hatası veriyordu.

GradientDrawable için varsayılan açı artık TOP_BOTTOM

Android 10'da XML'de bir GradientDrawable tanımlarsanız ve açı ölçümü sağlamazsanız degrade yönü varsayılan olarak TOP_BOTTOM olur. Bu, varsayılan olarak LEFT_RIGHT olan Android'in önceki sürümlerinden farklıdır.

Geçici bir çözüm olarak, AAPT2'yi en son sürümüne güncellerseniz Araç, açı yoksa eski uygulamalar için açı ölçümünü 0 olarak ayarlar belirtildiğinden emin olun.

Varsayılan SUID kullanarak serileştirilmiş nesneler için günlük kaydı

Platform, Android 7.0'dan (API düzeyi 24) itibaren düzeltme yaptı. serilenebilir için varsayılan serialVersionUID değerine ayarlayın. nesneleri olarak ayarlayın. Bu düzeltme , API düzeyi 23 veya altını hedefleyen uygulamaları etkilememiştir.

Android 10'dan itibaren, bir uygulama API düzeyi 23 veya önceki sürümleri hedefliyorsa ve eski, yanlış, varsayılan serialVersionUID olan sistem günlüklerini temel alır. uyarı verir ve kod düzeltmesi önerir.

Sistem, aşağıdaki koşulların tümü geçerliyse uyarı günlüğe kaydeder:

  • Uygulama, API düzeyi 23 veya altını hedefliyor.
  • Bir sınıf serileştirildi.
  • Serileştirilmiş sınıf, şunun yerine varsayılan serialVersionUID öğesini kullanır: açıkça serialVersionUID ayarlamak.
  • Varsayılan serialVersionUID, serialVersionUID değerinden farklıdır Uygulama, API düzeyi 24 veya üstünü hedefliyorsa olur.

Bu uyarı, etkilenen her sınıf için bir kez günlüğe kaydedilir. Uyarı mesajında, serialVersionUID değerinin uygulama API düzeyi 24 veya sonraki sürümleri hedefliyorsa hesaplanacağı varsayılan değere açıkça ayarlanması önerilen bir düzeltme yer alır. Bu düzeltmeyi kullanarak Söz konusu sınıftaki bir nesne, API düzeyini hedefleyen bir uygulamada serileştirildiyse 23 veya daha azsa nesne, 24 veya sonraki bir sürümü hedefleyen uygulamalar tarafından doğru şekilde okunur. ve tam tersi de geçerlidir.

java.io.FileChannel.map() değişiklikleri

Android 10'dan itibaren FileChannel.map(), boyutu truncate() kullanılarak değiştirilemeyen /dev/zero gibi standart olmayan dosyalar için desteklenmez. Geri Android'in sürümleri tarafından döndürülen hatayı truncate(), ancak Android 10 bir IOException verir. Eski davranışa ihtiyacınız varsa yerel kod kullanmanız gerekir.