Android 9 (API düzeyi 28), Android sisteminde bazı değişiklikler yaptık.
Aşağıdaki davranış değişiklikleri yalnızca API düzeyi 28 veya üstünü hedefleyen uygulamalar için geçerlidir. targetSdkVersion
ayarını API düzeyi 28 veya daha yüksek olarak ayarlayan uygulamalar, uygun olduğu durumlarda uygulamalarını bu davranışları doğru bir şekilde destekleyecek şekilde değiştirmelidir.
Hedefledikleri API düzeyinden bağımsız olarak, Android 9'da çalışan tüm uygulamaları etkileyen değişiklikler için Davranış değişiklikleri: tüm uygulamalar bölümüne bakın.
Ön plan hizmetleri
Android 9 veya sonraki sürümleri hedefleyen ve ön plan hizmetlerini kullanan uygulamalar FOREGROUND_SERVICE
iznini talep etmelidir. Bu normal bir izin olduğundan sistem, bunu isteyen uygulamaya otomatik olarak 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
gönderir.
Gizlilikle ilgili değişiklikler
Uygulamanız Android 9'u hedefliyorsa aşağıdaki davranış değişikliklerini göz önünde bulundurmalısınız. Cihaz seri ve DNS bilgilerinde yapılan bu güncellemeler, kullanıcı gizliliğini artırır.
Derleme seri numarasının kullanımdan kaldırılması
Android 9'da Build.SERIAL
, kullanıcıların gizliliğini korumak için her zaman "UNKNOWN"
olarak ayarlanmıştır.
Uygulamanızın bir cihazın donanım seri numarasına erişmesi gerekiyorsa bunun yerine READ_PHONE_STATE
iznini talep edip getSerial()
numaralı telefonu arayın.
DNS gizliliği
Android 9'u hedefleyen uygulamalar, gizli DNS API'lerini kullanmalıdır. Uygulamalar özellikle, sistem çözümleyicisi TLS üzerinden DNS yapıyorsa herhangi bir yerleşik DNS istemcisinin ya sistemle aynı ana makine adına şifrelenmiş DNS kullanması ya da sistem çözümleyicisi yerine devre dışı bırakılması gerekir.
Çerçeve güvenliği değişiklikleri
Android 9, uygulamanızın güvenliğini iyileştiren çeşitli davranış değişiklikleri içerir. Ancak bu değişiklikler yalnızca uygulamanız API düzeyi 28 veya üstünü hedeflediğinde geçerli olur.
Ağ TLS varsayılan olarak etkin
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 alanlar için şifresiz metni etkinleştirmesi gerekiyorsa uygulamanızın Ağ Güvenliği Yapılandırması'nda bu alanlar için cleartextTrafficPermitted
değerini bu alanlar için açıkça true
olarak 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 amacıyla uygulamalar, birden fazla işlem arasında tek bir WebView
veri dizinini paylaşamaz. Bu tür veri dizinleri genellikle çerezleri, HTTP önbelleklerini ve web'e göz atmayla ilgili diğer kalıcı ve geçici depolama alanlarını depolar.
Çoğu durumda, uygulamanız android.webkit
paketindeki sınıfları (ör. WebView
ve CookieManager
) yalnızca bir işlemde kullanmalıdır. Örneğin, WebView
kullanan tüm Activity
nesnelerini aynı işleme taşımanız gerekir. Uygulamanızın diğer işlemlerinde disableWebView()
yöntemini çağırarak "yalnızca tek bir işlem" kuralını daha sıkı bir şekilde uygulayabilirsiniz. Bu çağrı, bağımlı bir kitaplıktan çağrılsa bile WebView
ürününün bu diğer işlemlerde yanlışlıkla başlatılmasını engeller.
Uygulamanızın birden fazla işlemde WebView
örneklerini kullanması gerekiyorsa bu işlemde belirli bir WebView
örneğini kullanmadan önce WebView.setDataDirectorySuffix()
yöntemini kullanarak her işlem için benzersiz bir veri dizini son eki atamanız gerekir. Bu yöntem, her işlemdeki web verilerini uygulamanızın veri dizini içindeki kendi dizinine yerleştirir.
Uygulama başına SELinux alanları
Android 9 veya sonraki sürümleri hedefleyen uygulamalar dünya genelinde erişilebilen Unix izinlerini kullanarak diğer uygulamalarla veri paylaşamaz. Bu değişiklik, Android Uygulama Korumalı Alanı'nın bütünlüğünü, özellikle de bir uygulamanın özel verilerine yalnızca o uygulama tarafından erişilebilir olma şartını iyileştirmektedir.
Diğer uygulamalarla dosya paylaşmak için bir içerik sağlayıcı kullanın.
Bağlantı değişiklikleri
Bağlantı verilerini sayma ve çoklu yol
Android 9 veya sonraki sürümleri hedefleyen uygulamalarda sistem, varsayılan ayar olmayan ağlardaki ağ trafiğini (ör. cihaz kablosuz bağlantı açıkken gerçekleşen hücresel trafik) sayar ve bu trafiği sorgulamak için NetworkStatsManager
sınıfında yöntemler sağlar.
Ö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
değerini döndürür, ancak bir gün içinde 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 ipucuna uymalıdır.
ConnectivityManager.NetworkCallback
sınıfı artık uygulamalara VPN'ler hakkında bilgi gönderir. Bu değişiklik, uygulamaların eşzamanlı ve eşzamansız çağrıları birlikte kullanmak ve sınırlı API'ler kullanmak zorunda kalmadan bağlantı etkinliklerini dinlemesini çok daha kolay hale getirir. Ayrıca, bir cihaz aynı anda birden fazla kablosuz ağa veya birden fazla hücre ağına bağlandığında bilgi aktarımı beklendiği gibi çalışır.
Apache HTTP istemcisini kullanımdan kaldırma
Android 6.0'da Apache HTTP istemcisi desteğini kaldırdık. Android 9'dan itibaren bu kitaplık, bootclasspath'dan kaldırılır ve varsayılan olarak uygulamalar tarafından kullanılamaz.
Android 9 ve sonraki sürümleri hedefleyen uygulamalar Apache HTTP istemcisini kullanmaya devam etmek için aşağıdakileri AndroidManifest.xml
kodlarına ekleyebilir:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Çalışma zamanı Apache kitaplığını kullanmaya alternatif olarak uygulamalar, org.apache.http
kitaplığının kendi sürümlerini APK'larında paketleyebilirler. Bunu yaparsanız çalışma zamanında sağlanan sınıflarla ilgili sınıf uyumluluğu sorunlarını önlemek için kitaplığı yeniden paketlemeniz (Jar Jar gibi bir yardımcı programla) gerekir.
Kullanıcı arayüzü değişiklikleri
Odağı göster
Alanı 0 olan (genişlik veya yüksekliği 0 olan) görünümlere artık odaklanılamaz.
Ayrıca, dokunma modunda artık etkinlikler ilk odağı dolaylı yoldan atamaz. Bunun yerine, ilk odaklamayı açıkça istemek size bağlıdır.
CSS RGBA onaltılık değeri işleme
Android 9 veya sonraki sürümleri hedefleyen uygulamalar, 4 ve 8 on altılık CSS renklerini işlemeyle ilgili taslak CSS Renk Modülü Düzey 4 davranışını etkinleştirmelidir.
CSS Renk Modülü Düzey 4, Chrome tarafından 52. sürümünden beri desteklense de mevcut Android uygulamalarının Android sıralamasında (ARGB) 32 bit onaltılık renkler içerdiği tespit edildiğinden, Web Görünümü şu anda bu özelliği devre dışı bırakmaktadır. Bu durum, oluşturma hatalarına neden olabilir.
Örneğin, #80ff8080
rengi şu anda API düzeyi 27 veya altını hedefleyen uygulamalar için Web Görünümü'nde opak açık kırmızı (#ff8080
) olarak oluşturulmaktadır. İlk bileşen (Android tarafından alfa bileşeni olarak yorumlanır) şu anda yoksayılıyor. 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'ler
Android 9'dan önceki Android sürümleri, MIME türlerini dosya içeriklerinden belirleyebilir. Android 9'dan başlayarak (API düzeyi 28) uygulamalar, file:
URI'lerini Web Görünümü'ne yüklerken doğru dosya uzantısını kullanmalıdır.
MIME türlerini anlamak için dosya içeriğinin kullanılması güvenlik hatalarına yol açabilir 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 metin olur.
Ö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.
Doküman 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ıydı ve kök öğe sıfır kaydırma değerine sahipti. Android 9, kaydırma öğesinin kök öğe olduğu standartlarla uyumlu davranışı sağlar.
Ayrıca document.body.scrollTop
, document.body.scrollLeft
, document.documentElement.scrollTop
veya document.documentElement.scrollLeft
ürünlerine 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
değerini kullanın.
Askıya alınmış uygulamalardan gelen bildirimler
Android 9'dan önce, askıya alınmış uygulamalardan gelen bildirimler iptal ediliyordu. Android 9'dan itibaren, askıya alınan uygulamalardan gelen bildirimler uygulama devam ettirilene kadar gizlenir.