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

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.