Android 9 (API düzeyi 28), Android sisteminde çeşitli değişiklikler sunmaktadır.
Aşağıdaki davranış değişiklikleri yalnızca şu hedeflemeyi hedefleyen uygulamalar için geçerlidir:
API düzeyi 28 veya üstü. targetSdkVersion
değerini API düzeyi 28 veya daha yüksek bir değere ayarlayan uygulamaların, uygulama için geçerli olduğunda bu davranışları düzgün şekilde destekleyecek şekilde değiştirilmesi gerekir.
Hangi API'den bağımsız olarak Android 9'da çalışan tüm uygulamaları etkileyen değişiklikler için yüksek seviyelere ulaşmak için Davranış değişiklikleri: tüm uygulamalar.
Ön plan hizmetleri
Android 9 veya sonraki sürümleri hedefleyen ve ön plan hizmetleri kullanan uygulamalar FOREGROUND_SERVICE
iznini istemelidir. Bu bir normal izin olduğundan sistem, istek yapan uygulamaya otomatik olarak izin verir.
Android 9 veya sonraki sürümleri hedefleyen bir uygulama, FOREGROUND_SERVICE
isteğinde bulunmadan ön plan hizmeti oluşturmaya çalışırsa sistem bir SecurityException
hatası verir.
Gizlilik değişiklikleri
Uygulamanız Android 9'u hedefliyorsa aşağıdaki kurallara uymalısınız: dikkate almanız gerekir. Cihaz seri ve DNS bilgilerinde yapılan bu güncellemeler ve kullanıcı gizliliğini artırır.
Derleme seri numarası desteğinin sonlandırılması
Android 9'da Build.SERIAL
,
korumak için her zaman "UNKNOWN"
değerine ayarlayın. gizlilik.
Uygulamanızın bir cihazın donanım seri numarasına erişmesi gerekiyorsa bunun yerine READ_PHONE_STATE
iznine başvurmalı ve ardından getSerial()
işlevini çağırmalısınız.
DNS gizliliği
Android 9'u hedefleyen uygulamalar, gizli DNS API'lerini kabul etmelidir. Özellikle uygulamalar, sistem çözümleyicisi DNS-over-TLS kullanıyorsa yerleşik DNS istemcilerinin sistemle aynı ana makine adı için şifrelenmiş DNS kullanmasını veya sistem çözümleyicisi için devre dışı bırakılmasını sağlamalıdır.
Çerçeve güvenlik değişiklikleri
Android 9, uygulamanın güvenliğini artırır, ancak bu değişiklikler yalnızca uygulamanız API düzeyini hedefliyorsa geçerli olur 28 yaş veya üzeri.
Ağ TLS varsayılan olarak etkindir
Uygulamanız Android 9 veya sonraki sürümleri hedefliyorsa isCleartextTrafficPermitted()
yöntemi varsayılan olarak false
değerini döndürür. Uygulamanızın belirli alanlar için şifresiz metni etkinleştirmesi gerekiyorsa uygulamanızın Ağ Güvenlik Yapılandırması'nda bu alanlar için cleartextTrafficPermitted
değerini true
olarak açıkça ayarlamanız gerekir.
İşleme göre ayrılmış web tabanlı veri dizinleri
Android 9'da uygulama kararlılığını ve veri bütünlüğünü iyileştirmek için uygulamalar, birden fazla işlem arasında tek bir WebView
veri dizini paylaşamaz. Genellikle,
Bu tür veri dizinleri çerezleri, HTTP önbelleklerini ve diğer kalıcı ve
web'e göz atma ile ilgili geçici depolama alanı.
Çoğu durumda, uygulamanızda
android.webkit
paketi, örneğin
WebView
ve
Yalnızca bir tanesinde CookieManager
bahsedeceğim. Örneğin, WebView
kullanan tüm Activity
nesnelerini aynı işleme taşımanız gerekir. "Yalnızca tek bir işlemi" daha sıkı bir şekilde zorunlu kılabilirsiniz. kural
telefonla arayarak
disableWebView()
inç
diğer işlemleri de kullanabilirsiniz. Bu çağrı, WebView
ürününün başlatılmasını engelliyor
bağımlı bir kuruluştan çağrılsa bile söz konusu diğer süreçlerde
kitaplığını açar.
Uygulamanızın,
WebView
birden fazla işlemde,
WebView.setDataDirectorySuffix()
yöntemini çağırın.WebView
Bu yöntem, her işlemden gelen web verilerini uygulamanızın veri dizininde kendi dizinine yerleştirir.
Uygulama başına SELinux alanları
Android 9 veya sonraki sürümleri hedefleyen uygulamalar, herkese açık Unix izinlerini kullanarak diğer uygulamalarla veri paylaşamaz. Bu değişiklik, Android Uygulama Korumalı Alanı, özellikle de uygulamanın gizli verilere erişilebilir yalnızca o uygulama tarafından.
Dosyaları diğer uygulamalarla paylaşmak için bir içerik sağlayıcı kullanın.
Bağlantı değişiklikleri
Bağlantı verisi sayma ve çoklu yol
Android 9 veya sonraki sürümleri hedefleyen uygulamalarda sistem
ağlardaki ağ trafiği
Geçerli varsayılan ayar olmayanlar (ör. cihaz açıkken hücre trafiği)
yardımcı olur. Ayrıca
NetworkStatsManager
sınıfını kullanır.
Özellikle,
getMultipathPreference()
artık yukarıda belirtilen ağ trafiğine dayalı bir değer döndürüyor. Android 9'dan itibaren yöntem, hücre verileri için true
döndürür ancak bir günde belirli bir miktardan fazla trafik biriktiğinde false
döndürmeye başlar. Android 9'da çalışan uygulamalar, yöntemi çağırmalı ve bu ipucunu dikkate almalıdır.
ConnectivityManager.NetworkCallback
sınıfı artık uygulamalara VPN'lerle ilgili bilgi gönderiyor. Bu değişiklik sayesinde,
Böylece, uygulamaların bağlantı etkinliklerini dinlemesi için eşzamanlı ve
eşzamansız çağrılar yaparak ve sınırlı API'ler kullanarak. Ayrıca,
bir cihaz birden fazla cihaza bağlandığında bilgi aktarımı beklendiği gibi çalışır
Kablosuz ağlar veya birden çok hücre ağı aynı anda.
Apache HTTP istemci desteğinin sonlandırılması
Android 6.0 ile birlikte Apache HTTP istemcisi desteğini kaldırdık. Android 9'dan itibaren bu kitaplık bootclasspath ile başlar ve uygulamalarda varsayılan olarak kullanılamaz.
Android 9 ve sonraki sürümleri hedefleyen uygulamalar, Apache HTTP istemcisini kullanmaya devam etmek için
, şunu ekleyebilir: AndroidManifest.xml
:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Çalışma zamanı Apache kitaplığını kullanmaya alternatif olarak, uygulamalar
kendi APK'larında org.apache.http
kitaplığının sürümünü kullanıyor. Bunu yaparsanız çalışma zamanında sağlanan sınıflarla sınıf uyumluluk sorunlarını önlemek için kitaplığı (Jar Jar gibi bir yardımcı programla) yeniden paketlemeniz gerekir.
Kullanıcı arayüzü değişiklikleri
Odaklanma özelliğini görüntüleme
Alanı 0 olan görünümler (genişlik veya yükseklik 0) artık odaklanılabilir değildir.
Ayrıca, etkinlikler artık üstü kapalı olarak özelliği kullanabilirsiniz. Bunun yerine, isterseniz ilk odak noktasını açıkça talep edebilirsiniz.
CSS RGBA onaltılık değer işleme
Android 9 veya sonraki sürümleri hedefleyen uygulamalar, taslağı etkinleştirmelidir CSS Renk Modülü Düzey 4 davranışına işaret eder.
CSS Renk Modülü 4. Seviye, 52 sürümünden beri Chrome tarafından desteklenmektedir. Ancak mevcut Android uygulamalarında Android sıralamasında (ARGB) 32 bit onaltılık renklerin bulunduğu ve bunun da oluşturma hatalarına neden olduğu tespit edildiğinden WebView şu anda bu özelliği devre dışı bırakmaktadır.
Örneğin, #80ff8080
rengi şu anda WebView'de API seviyesi 27 veya altını hedefleyen uygulamalar için opak açık kırmızı (#ff8080
) olarak oluşturulur. Baştaki bileşen (Android tarafından alfa bileşeni olarak yorumlanır) şu anda göz ardı edilir. Bir uygulama API düzeyi 28 veya üstünü hedefliyorsa #80ff8080
, %50 şeffaf açık yeşil (#80ff80
) olarak yorumlanır.
Dosya için MIME türü yoklama: URI'lar
Android 9'dan önceki Android sürümleri, MIME türlerini dosyadan tahmin edebilir
içerik. Android 9 (API düzeyi 28) sürümünden itibaren uygulamalar,
file:
URI'ları yüklenirken doğru dosya uzantısına
Web Görünümü.
MIME türlerini anlamak için dosya içeriklerinin kullanılması güvenlik hatalarına neden olabilir, ve modern tarayıcılar buna genellikle izin vermez.
Bir dosyanın .html
, .txt
, .js
veya .css
gibi tanınan bir dosya uzantısı varsa MIME türü uzantıya göre belirlenir.
Bir dosyanın uzantısı yoksa veya tanınmayan bir dosya varsa MIME türü düz olur.
metin.
Örneğin, file:///sdcard/test.html
gibi bir URI HTML olarak oluşturulur ancak file:///sdcard/test
gibi bir URI, dosya HTML verileri içerse bile düz metin olarak oluşturulur.
Belge kaydırma öğesi
Android 9, bir dokümanın kök öğesinin kaydırma öğesi olduğu durumları düzgün şekilde ele alır. Önceki sürümlerde, kaydırma konumu gövde öğesinde ayarlı ve kök öğede sıfır kaydırma değeri var. Android 9, kaydırma öğesi kök olduğu durumda standartlara uygun davranış öğesine dokunun.
Ayrıca, document.body.scrollTop
, document.body.scrollLeft
, document.documentElement.scrollTop
veya document.documentElement.scrollLeft
doğrudan erişmek, hedef SDK'ya bağlı olarak farklı şekilde davranır. Görüntü alanı kaydırma değerlerine erişmek için varsa document.scrollingElement
öğesini kullanın.
Askıya alınan uygulamalardan gelen bildirimler
Android 9'dan önce, askıya alınan uygulamalardan gelen bildirimler iptal edilirdi. Android 9'dan itibaren, askıya alınan uygulamalardan gelen bildirimler uygulama devam ettirilene kadar gizlenir.