Modifiche del comportamento: app che hanno come target il livello API 28+

Android 9 (livello API 28) introduce una serie di modifiche al sistema Android. Le seguenti modifiche del comportamento si applicano esclusivamente alle app scelte come target Livello API 28 o superiore. App che impostano targetSdkVersion sul livello API 28 di livello superiore devono modificare le proprie app per supportare correttamente questi comportamenti, ove applicabile.

Per le modifiche che interessano tutte le app eseguite su Android 9, indipendentemente dall'API il livello scelto come target, Cambiamenti di comportamento: tutte le app.

Servizi in primo piano

Le app destinate ad Android 9 o versioni successive che utilizzano servizi in primo piano devono richiedere FOREGROUND_SERVICE autorizzazione. Si tratta di un'autorizzazione normale, in modo che il sistema lo concedi automaticamente all'app che ha inviato la richiesta.

Se un'app destinata ad Android 9 o versioni successive tenta di creare un servizio in primo piano senza richiedendo FOREGROUND_SERVICE, il sistema genera un SecurityException.

Modifiche alla privacy

Se la tua app ha come target Android 9, devi mantenere quanto segue di comportamento dei dipendenti. Questi aggiornamenti alle informazioni seriali e DNS del dispositivo migliorare la privacy degli utenti.

Ritiro del numero di serie della build

In Android 9, Build.SERIAL è sempre impostata su "UNKNOWN" per proteggere gli utenti privacy.

Se la tua app deve accedere al numero di serie hardware di un dispositivo, devi richiedi invece READ_PHONE_STATE autorizzazione, quindi chiama getSerial().

Privacy DNS

Le app che hanno come target Android 9 devono rispettare le API DNS private. In particolare, devono fare in modo che, se il resolver di sistema applica il protocollo DNS over TLS, il client DNS integrato utilizza il DNS criptato con lo stesso nome host del o viene disabilitata a favore del resolver di sistema.

Modifiche alla sicurezza del framework

Android 9 include diverse modifiche del comportamento che migliorano sicurezza dell'app, ma queste modifiche vengono applicate soltanto se l'app ha come target il livello API 28 o successiva.

TLS della rete abilitato per impostazione predefinita

Se la tua app ha come target Android 9 o versioni successive, isCleartextTrafficPermitted() restituisce false per impostazione predefinita. Se per la tua app è necessario attivare il testo in chiaro per domini specifici, devi impostare esplicitamente cleartextTrafficPermitted su true per questi domini nella sezione Sicurezza della rete della tua app Configurazione.

Directory di dati basate sul web separate per processo

Per migliorare la stabilità e l'integrità dei dati delle app in Android 9, le app non possono condividere un singolo dato di WebView directory tra più processi. In genere, tali directory dei dati memorizzano cookie, cache HTTP e altre risorse spazio di archiviazione temporaneo per la navigazione sul web.

Nella maggior parte dei casi, l'app dovrebbe utilizzare classi del android.webkit, ad esempio come WebView e CookieManager, in uno solo e il processo di sviluppo. Ad esempio, devi spostare tutti Activity oggetti che utilizzano un WebView nello stesso processo. Puoi applicare in modo più rigoroso il "solo processo" regola chiamando disableWebView() pollici altri processi dell'app. Questa chiamata impedisce l'inizializzazione di WebView in questi altri processi per errore, anche se viene chiamato da un libreria.

Se la tua app deve utilizzare istanze di WebView in più processi, devi assegnare un suffisso univoco alla directory dei dati per ogni processo, utilizzando WebView.setDataDirectorySuffix() prima di utilizzare una determinata istanza di WebView in quel processo. Questo metodo posiziona i dati web di ogni processo nella propria directory all'interno dei dati dell'app .

Domini SELinux per app

Le app destinate ad Android 9 o versioni successive non possono condividere dati con altre app che utilizzano autorizzazioni Unix accessibili a tutti. Questa modifica migliora l'integrità Sandbox per le applicazioni Android in particolare il requisito secondo cui dati privati accessibili solo da quell'app.

Per condividere file con altre app, usa un contenuti dell'utente.

Modifiche alla connettività

Conteggio dei dati per la connettività e percorsi multipli

All'interno delle app destinate ad Android 9 o versioni successive, il sistema viene conteggiato traffico di rete sulle reti che non sono l'impostazione predefinita corrente, ad esempio il traffico cellulare mentre il dispositivo è acceso Wi-Fi e fornisce metodi nella NetworkStatsManager eseguire una query per il traffico.

In particolare, getMultipathPreference() ora restituisce un valore basato sul traffico di rete sopra indicato. Inizia con Android 9, il metodo restituisce true per i dati delle celle, ma quando più di una determinata quantità di di traffico accumulato in un giorno, inizia a restituire false. App in esecuzione su Android 9 deve chiamare il metodo e rispettare questo suggerimento.

La ConnectivityManager.NetworkCallback ora invia informazioni sulle VPN alle app. Questa modifica rende molto più facile consente alle app di ascoltare gli eventi di connettività senza dover combinare tra loro chiamate asincrone e l'uso di API limitate. Inoltre, significa che il trasferimento di informazioni funziona come previsto quando un dispositivo è connesso a più dispositivi Reti Wi-Fi o di più reti cellulari contemporaneamente.

Deprecazione del client HTTP Apache

Con Android 6.0, abbiamo rimosso il supporto per il client HTTP Apache. A partire da Android 9, la libreria viene rimossa bootclasspath e non è disponibile per le app per impostazione predefinita.

Per continuare a utilizzare il client HTTP Apache, le app destinate ad Android 9 e versioni successive può aggiungere quanto segue a AndroidManifest.xml:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

In alternativa all'uso della libreria Apache runtime, le app possono raggruppare la propria versione della libreria org.apache.http nell'APK. Se lo fai, devi rielaborare la libreria (con un'utilità come Jar Jar) per evitare problemi di compatibilità delle classi con i corsi forniti nel runtime.

Modifiche alla UI

Visualizza focus

Le viste con un'area pari a 0 (la larghezza o l'altezza è pari a 0) non sono più attivabili.

Inoltre, le attività non assegnano più implicitamente l'attenzione iniziale modalità tocco. Spetta invece a te richiedere esplicitamente la priorità iniziale, se desiderato.

Gestione dei valori esadecimale RGBA CSS

Le app destinate ad Android 9 o versioni successive devono attivare la bozza Modulo colore CSS - Livello 4 comportamento per la gestione dei colori CSS a 4 e 8 cifre esadecimali.

Livello 4 del modulo Colore CSS è supportata da Chrome dalla release 52, ma Attualmente WebView disattiva la funzionalità. poiché le applicazioni Android esistenti contengono colori esadecimali a 32 bit. nell'ordine Android (ARGB), causando errori di rendering.

Ad esempio, al momento il colore #80ff8080 è visualizzato in WebView come opaco rosso chiaro (#ff8080) per le app che hanno come target livelli API 27 o precedenti. Il principale (che verrebbe interpretato da Android come componente alfa) è attualmente ignorato. Se un'app ha come target il livello API 28 o superiore, #80ff8080 è interpretato come verde chiaro trasparente al 50% (#80ff80).

Analisi del tipo MIME per il file: URI

Le versioni di Android precedenti ad Android 9 potevano dedurre i tipi MIME dal file contenuti. A partire da Android 9 (livello API 28) le app devono utilizzare il con l'estensione del file corretta durante il caricamento di URI file: in un WebView.

L'uso dei contenuti del file per dedurre i tipi MIME può essere una fonte di bug di sicurezza, e ciò non è generalmente consentito dai browser moderni.

Se un file ha un'estensione di file riconosciuta, ad esempio .html, .txt, .js o .css: il tipo MIME verrà determinato dall'estensione. Se un file non ha estensione o non è riconosciuto, il tipo MIME sarà normale testo.

Ad esempio, un URI come file:///sdcard/test.html verrà eseguito come HTML, ma un URI come file:///sdcard/test verrà visualizzato come testo normale, anche se il file contiene dati HTML.

Elemento di scorrimento del documento

Android 9 gestisce correttamente il caso in cui il file root di un documento è l'elemento di scorrimento. Nelle versioni precedenti, la posizione di scorrimento era impostata sull'elemento body; l'elemento principale aveva valori di scorrimento pari a zero. Android 9 consente comportamento conforme agli standard in cui l'elemento di scorrimento rappresenta la radice .

Inoltre, l'accesso diretto a document.body.scrollTop, document.body.scrollLeft, document.documentElement.scrollTop oppure document.documentElement.scrollLeft avrà un comportamento diverso a seconda dell'SDK target. Per accedere, scorri l'area visibile utilizza document.scrollingElement, se disponibile.

Notifiche delle app sospese

Prima di Android 9, le notifiche delle app sospese venivano annullate. A partire da Android 9, le notifiche delle app sospese sono nascoste fino a l'app viene ripresa.