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 değiştirilmeli
ve uygulamalar, bu davranışları doğru şekilde desteklemelidir.
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 hizmetlerini kullanan uygulamalar istekte bulunmalıdır
FOREGROUND_SERVICE
iznidir. Bu normal bir izindir,
Bu nedenle, sistem bunu istekte bulunan uygulamaya otomatik olarak verir.
Android 9 veya sonraki bir sürümü hedefleyen bir uygulama,
FOREGROUND_SERVICE
isteniyor,
sistem bir SecurityException
atar.
Gizlilikle ilgili değişiklikler
Uygulamanız Android 9'u hedefliyorsa aşağıdaki kurallara uymanız gerekir: 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
şunu ara:
getSerial()
.
DNS gizliliği
Android 9'u hedefleyen uygulamalar, gizli DNS API'lerini kabul etmelidir. Özellikle, sistem çözümleyici tarafından TLS-over-TLS işlemi yapılıyorsa Gmail istemci kimliği ile aynı ana makine adına, şifrelenmiş DNS'yi veya sistem çözümleyicisi lehine devre dışı bırakılmış olabilir.
Ç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 bir sürümü hedefliyorsa
isCleartextTrafficPermitted()
yöntemi varsayılan olarak false
değerini döndürür. Uygulamanızın
belirli alanlarda, cleartextTrafficPermitted
ayarını açıkça true
olarak ayarlamanız gerekir
uygulamanızın Ağ Güvenliği bölümündeki alan adları için
Yapılandırma.
İş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 şunu yapamaz:
tek bir WebView
verisi paylaşma
dizin arasında
birden fazla işlem. 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, seçtiğiniz tüm alanları
WebView
kullanan Activity
nesne
işleyeceğiz. "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şlemdeki web verilerini, uygulamanızın verilerine kendi dizinine yerleştirir
dizin.
Uygulama başına SELinux alanları
Android 9 veya sonraki sürümleri hedefleyen uygulamalar, herkes tarafından erişilebilen Unix izinlerini verir. Bu değişiklik, Android Uygulama Korumalı Alanı, özellikle de uygulamanın gizli verilere erişilebilir yalnızca o uygulama tarafından.
Diğer uygulamalarla dosya paylaşmak için bir içerik kullanın sağlayıcı.
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. Şununla başlayan:
Android 9'da bu yöntem, hücre verileri için true
değerini döndürür, ancak
trafik bir günde birikir, false
döndürmeye başlar. Şu cihazlarda çalışan uygulamalar:
Android 9, yöntemi çağırmalı ve bu ipucuna uymalı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 ve sınırlı API'ler kullanma. 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 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
kitaplığı yeniden paketlemeniz gerekir (örneğin,
Jar Jar) kullanın.
belirtilen sınıflarla uyumlu olmasını sağlar.
Kullanıcı arayüzü değişiklikleri
Odağı göster
0 alanı olan (genişlik veya yükseklik 0 olan) görünümlere artık odaklanılamaz.
Ayrıca, etkinlikler artık üstü kapalı olarak özelliği kullanabilirsiniz. Bunun yerine, ilk odaklama isteğini açıkça belirtmek size bağlıdır. gerekir.
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ü Düzey 4 52 sürümünden itibaren Chrome tarafından destekleniyor, ancak Web Görünümü şu anda bu özelliği devre dışı bırakıyor çünkü mevcut Android uygulamalarının 32 bit onaltılık renk içerdiği tespit edildi (ARGB) görebilirsiniz. Bu, oluşturma hatalarına neden olur.
Örneğin, #80ff8080
rengi şu anda şu dilde oluşturuluyor:
Opak olarak WebView
API düzeyi 27 veya altını hedefleyen uygulamalar için açık kırmızı (#ff8080
). En iyi
bileşeni (Android tarafından alfa bileşeni olarak yorumlanır)
şu anda yoksayıldı. 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.
Dosya, .html
gibi tanınan bir dosya uzantısına sahipse
.txt
, .js
veya .css
MIME türü, uzantı tarafından 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 aşağıdaki gibi oluşturulur:
HTML'dir, ancak file:///sdcard/test
gibi bir URI düz metin olarak oluşturulur,
dosyayı HTML verileri içerse bile.
Doküman kaydırma öğesi
Android 9, bir dokümanın kök dizininin olduğu durumlara öğesi, kayan öğedir. Ö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.
Dahası, document.body.scrollTop
, document.body.scrollLeft
ve
document.documentElement.scrollTop
veya document.documentElement.scrollLeft
hedef SDK'ya bağlı olarak farklı şekilde davranır. Görüntü alanına erişmek için kaydırın
değerleri (varsa) document.scrollingElement
kullanın.
Askıya alınan uygulamalardan gelen bildirimler
Android 9'dan önce, askıya alınan uygulamalardan gelen bildirimler iptal ediliyordu. Android 9'dan itibaren, askıya alınan uygulamalardan gelen bildirimler şu tarihe kadar gizlenir: Uygulama devam ettirilir.