Davranış değişiklikleri: API düzeyi 28 ve sonraki sürümleri hedefleyen uygulamalar

Android 9 (API düzeyi 28), Android sisteminde bir dizi değişiklik sunmaktadır. Aşağıdaki davranış değişiklikleri yalnızca API düzeyi 28 veya üstünü hedefleyen uygulamalar için geçerlidir. targetSdkVersion API'sini 28 veya daha yüksek bir seviyeye ayarlayan uygulamalar, uygun olduğu durumlarda uygulamalarını bu davranışları destekleyecek şekilde değiştirmelidir.

Hedefledikleri API düzeyi ne olursa olsun, 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 istemelidir. Bu normal bir izin olduğundan sistem, izni istekte bulunan 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 ayarlıdı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 dikkate almalıdır. Uygulamalar özellikle, sistem çözümleyicisi TLS üzerinden DNS kullanıyorsa, tüm yerleşik DNS istemcilerinin ya sistemle aynı ana makine adına şifrelenmiş DNS kullandığından ya da sistem çözümleyicisi yerine devre dışı bırakıldığından emin olmalıdır.

Çerçeve güvenlik 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 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üvenliği Yapılandırması'nda bu alanlar için cleartextTrafficPermitted değerini 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, tek bir WebView veri dizinini birden fazla işlem arasında paylaşamaz. Genellikle bu tür veri dizinleri ç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 WebView ve CookieManager gibi sınıfları 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ı, WebView ürününün bu diğer işlemlerde yanlışlıkla (bağımlı bir kitaplıktan çağrılsa bile) 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 dizinindeki 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 kullanan 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 söz konusu uygulama tarafından erişilebilir olma şartını iyileştiriyor.

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 bir sürümü hedefleyen uygulamalarda sistem, geçerli varsayılan olmayan ağlardaki ağ trafiğini (ör. cihaz kablosuz bağlantıdayken gerçekleşen hücre trafiği) 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. Yöntem, Android 9'dan itibaren hücre verileri için true değerini döndürür. Ancak bir günde belirli bir miktarın üzerinde 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'lerle ilgili bilgi gönderiyor. Bu değişiklik, uygulamaların eşzamanlı ve eşzamansız çağrıları karıştırmak ve sınırlı API'ler kullanmak zorunda kalmadan bağlantı etkinliklerini dinlemesini çok daha kolay hale getirir. Buna ek olarak, 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 istemcisinin kullanımdan kaldırılması

Android 6.0 ile birlikte Apache HTTP istemcisi desteğini kaldırdık. Bu kitaplık, Android 9'dan itibaren bootclasspath'tan 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 kendi APK'larında org.apache.http kitaplığının kendi sürümlerini paket haline getirebilirler. 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ı program ile) gerekir.

Kullanıcı arayüzü değişiklikleri

Odağı göster

Alanı 0 olan (genişlik veya yükseklik 0 olan) görünümlere artık odaklanılamaz.

Ayrıca, dokunma modunda etkinlikler artık başlangıç odağını dolaylı olarak atamaz. Bunun yerine, istenirse ilk odağı 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 onaltılık basamaklı CSS renklerini işlemek için 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 da oluşturma hatalarına neden olur.

Ö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. Lider bileşen (Android tarafından alfa bileşeni olarak yorumlanır) şu anda yoksayılmaktadır. 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, dosya içeriklerinden MIME türlerini belirleyebilir. Android 9'dan başlayarak (API düzeyi 28) uygulamalar, file: URI'lerini Web Görünümü'nde yüklerken doğru dosya uzantısını kullanmalıdır.

MIME türlerini anlamak için dosya içeriklerini kullanmak 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. 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 verisi içerse bile düz metin olarak oluşturulur.

Doküman kaydırma öğesi

Android 9, dokümanın kök öğesinin kaydırma öğesi olduğu durumu düzgün şekilde ele alır. Önceki sürümlerde, kaydırma konumu body öğ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 standartlara uygun davranış sağlar.

Ayrıca doğrudan document.body.scrollTop, document.body.scrollLeft, document.documentElement.scrollTop veya document.documentElement.scrollLeft'ye 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 kullanın.

Askıya alınan 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.