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 değiştirilmeli ve kendi uygulamalarını bu davranışları doğru şekilde desteklemesi için kullanabilirsiniz.

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 izni gerekir. 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.