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.