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 birSSLHandshakeException
açık bu örneklerde bir sorun, Onun yerineSSLProtocolException
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ıkString
yerineIndexOutOfBoundsException
yerineIllegalArgumentException
atıyor. İlgili içeriği oluşturmak için kullanılanString
değişimi bir$
ile biterse de aynı istisna geçerli olur. Daha önce, bu senaryoda herhangi bir istisna yoktu.replaceFirst(null)
,Matcher
uygulamasındareset()
öğ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)
vegroup(int group)
, grup dizini sınırları dışındaysa artık daha genel birIndexOutOfBoundsException
hatası veriyor. Daha önce bu yöntemlerArrayIndexOutOfBoundsException
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çaserialVersionUID
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.