Android 7.0 per sviluppatori

Android 7.0 Nougat introduce una serie di nuove caratteristiche e funzionalità per utenti e sviluppatori. Questo documento mette in evidenza le novità per gli sviluppatori.

Assicurati di dare un'occhiata alle modifiche al comportamento di Android 7.0 per scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app.

Per scoprire di più sulle funzionalità per gli utenti di Android 7.0, visita il sito www.android.com.

Supporto multi-finestra

In Android 7.0, introdurremo nella piattaforma una nuova e richiesta funzionalità di multitasking: il supporto della modalità multi-finestra.

Gli utenti possono ora aprire contemporaneamente due app sullo schermo.

  • Su smartphone e tablet con Android 7.0, gli utenti possono eseguire due app affiancate o una sopra l'altra in modalità schermo diviso. Gli utenti possono ridimensionare le app trascinando il divisore tra le app.
  • Sui dispositivi Android TV, le app possono attivarsi in modalità Picture in picture, in modo da continuare a mostrare contenuti mentre l'utente naviga o interagisce con altre app.
App mobile in esecuzione in modalità schermo diviso

Figura 1. App in esecuzione in modalità schermo diviso.

Il supporto multi-finestra, soprattutto su tablet e altri dispositivi con schermi più grandi, offre nuovi modi per coinvolgere gli utenti. Puoi persino trascinare nella tua app per consentire agli utenti di trascinare comodamente i contenuti da o verso l'app: un ottimo modo per migliorare l'esperienza utente.

È facile aggiungere il supporto della modalità multi-finestra all'app e configurare la modalità di gestione della visualizzazione multi-finestra. Ad esempio, puoi specificare le dimensioni minime consentite della tua attività, impedendo agli utenti di ridimensionare l'attività al di sotto di queste dimensioni. Puoi anche disattivare la visualizzazione multi-finestra per la tua app, in modo che il sistema mostri l'app solo in modalità a schermo intero.

Per maggiori informazioni, consulta la documentazione per gli sviluppatori relativa al supporto di più finestre.

Miglioramenti alle notifiche

In Android 7.0 abbiamo riprogettato le notifiche per renderle più semplici e veloci da utilizzare. Di seguito sono riportate alcune delle modifiche:

  • Aggiornamenti dei modelli: stiamo aggiornando i modelli di notifica per dare maggiore enfasi all'immagine hero e all'avatar. Gli sviluppatori potranno sfruttare i nuovi modelli con modifiche minime al codice.
  • Personalizzazione dello stile dei messaggi: puoi personalizzare più etichette dell'interfaccia utente associate alle notifiche utilizzando la classe MessagingStyle. Puoi configurare il messaggio, il titolo della conversazione e la visualizzazione dei contenuti.
  • Notifiche raggruppate: il sistema può raggruppare i messaggi, ad esempio per argomento, e visualizzare il gruppo. Un utente può eseguire azioni su di essi, ad esempio Ignora o Archivia. Se hai implementato le notifiche per Android Wear, avrai già familiarità con questo modello.
  • Risposta diretta: per le app di comunicazione in tempo reale, il sistema Android supporta le risposte in linea per consentire agli utenti di rispondere rapidamente a un SMS o un messaggio di testo direttamente nell'interfaccia di notifica.
  • Visualizzazioni personalizzate: due nuove API ti consentono di sfruttare le decorazioni del sistema, come le intestazioni e le azioni di notifica, quando utilizzi le visualizzazioni personalizzate nelle notifiche.
Dispositivo mobile che mostra notifiche di messaggi in bundle
Dispositivo mobile su cui è visualizzata la notifica di un singolo messaggio
Dispositivo mobile che mostra una risposta a un messaggio in linea all'interno dell'interfaccia di notifica

Figura 2. Notifiche raggruppate e risposta diretta.

Per scoprire come implementare le nuove funzionalità, consulta la guida sulle notifiche.

Compilation JIT/AOT guidata dal profilo

In Android 7.0 abbiamo aggiunto ad ART un compilatore Just in Time (JIT) con profilazione di codice, che consente di migliorare costantemente le prestazioni delle app Android durante l'esecuzione. Il compilatore JIT integra l'attuale compilatore Ahead of Time (AOT) di ART e aiuta a migliorare le prestazioni di runtime, a risparmiare spazio di archiviazione e a velocizzare gli aggiornamenti delle app e del sistema.

La compilazione guidata dal profilo consente ad ART di gestire la compilazione AOT/JIT per ogni app in base al suo utilizzo effettivo e alle condizioni del dispositivo. Ad esempio, ART gestisce un profilo dei metodi ad accesso frequente di ogni app e può precompilare e memorizzare nella cache questi metodi per ottenere le migliori prestazioni. Altre parti dell'app non sono compilate finché non vengono effettivamente utilizzate.

Oltre a migliorare le prestazioni per le parti chiave dell'app, la compilazione guidata dal profilo aiuta a ridurre l'utilizzo complessivo di RAM di un'app, incluse le proprietà binarie associate. Questa funzionalità è particolarmente importante sui dispositivi con memoria ridotta.

ART gestisce la compilazione guidata al profilo in modo da ridurre al minimo l'impatto sulla batteria del dispositivo. Effettua la precompilazione solo quando il dispositivo è inattivo e in carica, risparmiando tempo e batteria effettuando queste operazioni in anticipo.

Percorso rapido per l'installazione di app

Uno dei vantaggi più tangibili del compilatore JIT di ART è la velocità delle installazioni di app e degli aggiornamenti di sistema. Anche le app di grandi dimensioni, che richiedono diversi minuti per essere ottimizzate e installate in Android 6.0, possono essere installate in pochi secondi. Anche gli aggiornamenti di sistema sono più rapidi, poiché non è necessario un passaggio di ottimizzazione più.

Sospensione ovunque ti trovi...

Android 6.0 ha introdotto Sospensione, una modalità di sistema che permette di risparmiare batteria posticipando le attività di rete e della CPU delle app quando il dispositivo è inattivo, ad esempio quando è seduto su un tavolo o in un cassetto.

Ora in Android 7.0, Sospensione fa un passo in più e risparmia batteria ovunque ti trovi. Ogni volta che lo schermo è spento per un determinato periodo di tempo e il dispositivo è scollegato, Doze applica alle app un sottoinsieme delle familiari limitazioni di CPU e rete. Ciò significa che gli utenti possono risparmiare batteria anche quando portano i dispositivi in tasca.

Illustrazione di come Sospensione applica un primo livello di limitazioni relative alle attività di sistema per aumentare la durata della batteria

Figura 3. La funzione Sospensione ora applica limitazioni per migliorare la durata della batteria anche quando il dispositivo non è fermo.

Poco tempo dopo lo spegnimento dello schermo quando il dispositivo è alimentato a batteria, Sospensione limita l'accesso alla rete e reinvia job e sincronizzazioni. Durante brevi finestre di manutenzione, alle applicazioni è consentito l'accesso alla rete e vengono eseguiti job/sincronizzazione differiti. Se accendo lo schermo o colleghi il dispositivo, il dispositivo verrà disconnesso dalla modalità Sospensione.

Quando il dispositivo è di nuovo fermo, con lo schermo spento e acceso per un certo periodo di tempo, la funzionalità Sospensione applica le limitazioni complete di CPU e rete su PowerManager.WakeLock, sveglie AlarmManager e ricerche GPS/Wi-Fi.

Le best practice per adattare l'app alla modalità Sospensione sono le stesse indipendentemente dal fatto che il dispositivo sia in movimento o meno. Pertanto, se hai già aggiornato l'app per gestire correttamente Sospensione, non devi fare altro. In caso contrario, inizia subito ad adattare la tua app a Sospensione.

Project Svelte: ottimizzazioni in background

Project Svelte è un impegno costante per ridurre al minimo l'utilizzo della RAM da parte del sistema e delle app su tutta la gamma di dispositivi Android nell'ecosistema. In Android 7.0, Project Svelte è incentrato sull'ottimizzazione dell'esecuzione in background delle app.

L'elaborazione in background è una parte essenziale della maggior parte delle app. Se gestita correttamente, può rendere l'esperienza utente straordinaria, immediata, rapida e sensibile al contesto. Se non gestita correttamente, l'elaborazione in background può consumare inutilmente RAM (e batteria) e influire sulle prestazioni del sistema per altre app.

A partire da Android 5.0, JobScheduler è stato il modo preferito per eseguire operazioni in background per gli utenti. Le app possono pianificare i job consentendo al sistema di eseguire l'ottimizzazione in base alle condizioni di memoria, alimentazione e connettività. JobScheduler offre controllo e semplicità e vogliamo che tutte le app lo utilizzino.

Un'altra buona opzione è GCMNetworkManager, che fa parte di Google Play Services, che offre una pianificazione simile dei job con la compatibilità tra le versioni precedenti di Android.

Stiamo continuando a estendere JobScheduler e GCMNetworkManager per soddisfare un maggior numero di casi d'uso. Ad esempio, in Android 7.0 ora è possibile pianificare le operazioni in background in base alle modifiche nei fornitori di contenuti. Al contempo, stiamo iniziando a ritirare alcuni dei pattern meno recenti che possono ridurre le prestazioni del sistema, in particolare sui dispositivi con memoria ridotta.

In Android 7.0 rimuoveremo tre trasmissioni implicite di uso comune (CONNECTIVITY_ACTION, ACTION_NEW_PICTURE e ACTION_NEW_VIDEO), in quanto possono riattivare i processi in background di più app contemporaneamente e consumare memoria e batteria. Se la tua app riceve questi messaggi, sfrutta Android 7.0 per eseguire la migrazione a JobScheduler e alle API correlate.

Per maggiori dettagli, consulta la documentazione relativa alle ottimizzazioni in background.

Visualizzazione superficie

Android 7.0 introduce il movimento sincrono nella classe SurfaceView, offrendo prestazioni della batteria migliori rispetto a TextureView in alcuni casi: quando si esegue il rendering di contenuti video o 3D, le app con scorrimento e posizioni di video animati consumano meno energia con SurfaceView rispetto a TextureView.

La classe SurfaceView consente una composizione sullo schermo con maggiore efficienza della batteria perché è composta in hardware dedicato, separatamente dai contenuti della finestra dell'app. Di conseguenza, crea meno copie intermedie di TextureView.

La posizione dei contenuti di un oggetto SurfaceView viene ora aggiornata in modo sincrono con i contenuti dell'app che li contengono. Uno dei risultati di questa modifica è che semplici traduzioni o scale di un video in riproduzione su un SurfaceView non producono più barre nere accanto alla visualizzazione durante lo spostamento.

A partire da Android 7.0, consigliamo vivamente di risparmiare energia utilizzando SurfaceView anziché TextureView.

Risparmio dati

Risparmio dati nelle Impostazioni

Figura 4. Risparmio dati nelle Impostazioni.

Nel corso del ciclo di vita di un dispositivo mobile, il costo di un piano di rete dati supera in genere il costo del dispositivo stesso. Per molti utenti la rete dati è una risorsa costosa che vogliono conservare.

Android 7.0 introduce la modalità Risparmio dati, un nuovo servizio di sistema che aiuta a ridurre l'utilizzo della rete dati da parte delle app, in roaming, verso la fine del ciclo di fatturazione o su un piccolo pacchetto di dati prepagato. La funzionalità Risparmio dati consente agli utenti di controllare l'utilizzo della rete dati da parte delle app e agli sviluppatori di fornire un servizio più efficiente quando la funzionalità Risparmio dati è attiva.

Quando un utente attiva la funzionalità Risparmio dati in Impostazioni e il dispositivo si trova su una rete a consumo, il sistema blocca l'utilizzo dei dati in background e segnala alle app di usare meno dati in primo piano quando possibile, ad esempio limitando la velocità in bit per il flusso di dati, riducendo la qualità delle immagini, rinviando il precaching ottimista e così via. Gli utenti possono consentire ad app specifiche di consentire l'utilizzo dei dati a consumo in background anche quando la funzionalità Risparmio dati è attiva.

Android 7.0 estende ConnectivityManager per fornire alle app un modo per recuperare le preferenze di Risparmio dati dell'utente e monitorare le modifiche alle preferenze. Tutte le app devono controllare se l'utente ha attivato Risparmio dati e fare uno sforzo per limitare l'utilizzo dei dati in primo piano e in background.

API Vulkan

Android 7.0 integra nella piattaforma VulkanTM, una nuova API per il rendering 3D. Come OpenGLTM ES, Vulkan è uno standard aperto per la grafica e il rendering 3D gestito da Khronos Group.

Vulkan è stato progettato interamente per ridurre al minimo l'overhead della CPU nel driver e consentire alla tua applicazione di controllare il funzionamento della GPU in modo più diretto. Vulkan consente inoltre un migliore caricamento in contemporanea, consentendo a più thread di eseguire contemporaneamente operazioni come la creazione del buffer dei comandi.

Gli strumenti di sviluppo e le librerie Vulkan sono inseriti nell'SDK per Android 7.0. tra cui:

  • Intestazioni
  • Livelli di convalida (librerie di debug)
  • Compilatore shabbyer SPIR-V
  • Libreria di compilazione dello Shadr runtime SPIR-V

Vulkan è disponibile solo per le app su dispositivi con hardware compatibile con Vulkan, come Nexus 5X, Nexus 6P e Nexus Player. Stiamo lavorando a stretto contatto con i nostri partner per portare Vulkan il prima possibile su più dispositivi.

Per ulteriori informazioni, consulta la documentazione dell'API.

API Tile Impostazioni rapide

Riquadri Impostazioni rapide nell'area notifiche

Figura 5. Riquadri Impostazioni rapide nell'area notifiche.

Le Impostazioni rapide sono un modo semplice e popolare per esporre impostazioni e azioni principali, direttamente dall'area notifiche. In Android 7.0, abbiamo esteso l'ambito delle Impostazioni rapide per renderle ancora più utili e pratiche.

Abbiamo aggiunto più spazio per ulteriori riquadri delle Impostazioni rapide, a cui gli utenti possono accedere da un'area di visualizzazione impaginata scorrendo verso sinistra o verso destra. Abbiamo anche dato agli utenti il controllo su quali riquadri delle Impostazioni rapide vengono visualizzati e dove vengono visualizzati: gli utenti possono aggiungere o spostare riquadri semplicemente trascinandoli.

Per gli sviluppatori, Android 7.0 aggiunge anche una nuova API che consente di definire riquadri Impostazioni rapide personali per consentire agli utenti di accedere facilmente ai controlli e alle azioni chiave della tua app.

I riquadri delle Impostazioni rapide sono riservati per controlli o azioni richiesti con urgenza o utilizzati di frequente e non devono essere utilizzati come scorciatoie per avviare un'app.

Una volta definiti i riquadri, puoi mostrarli agli utenti, che possono aggiungerli alle Impostazioni rapide semplicemente trascinandoli.

Per informazioni sulla creazione di un riquadro dell'app, consulta la documentazione di riferimento per Tile.

Blocco dei numeri

Android 7.0 ora supporta il blocco dei numeri nella piattaforma e fornisce un'API framework per consentire ai fornitori di servizi di mantenere un elenco dei numeri bloccati. L'app predefinita per gli SMS, l'app telefonica predefinita e le app dell'operatore possono leggere e scrivere nell'elenco dei numeri bloccati. L'elenco non è accessibile ad altre app.

Rendendo il blocco dei numeri una funzionalità standard della piattaforma, Android offre un modo coerente per le app di supportare il blocco dei numeri su un'ampia gamma di dispositivi. Tra gli altri vantaggi di cui le app possono sfruttare ci sono:

  • I numeri bloccati nelle chiamate vengono bloccati anche negli SMS
  • I numeri bloccati possono essere mantenuti su tutti i reset e i dispositivi tramite la funzionalità Backup e ripristino
  • Più app possono utilizzare lo stesso elenco di numeri bloccati

Inoltre, grazie all'integrazione dell'app dell'operatore tramite Android, gli operatori possono leggere l'elenco dei numeri bloccati sul dispositivo ed eseguire il blocco lato servizio per l'utente al fine di impedire che chiamate e SMS indesiderati raggiungano l'utente con qualsiasi mezzo, ad esempio un endpoint VOIP o i telefoni di deviazione.

Per maggiori informazioni, consulta la documentazione di riferimento per BlockedNumberContract.

Screening delle chiamate

Android 7.0 consente all'app telefono predefinita di filtrare le chiamate in arrivo. L'app Telefono esegue questa operazione implementando il nuovo CallScreeningService, che consente all'app per telefono di eseguire una serie di azioni in base al Call.Details di una chiamata in arrivo, ad esempio:

  • Rifiutare la chiamata in arrivo
  • Non consentire la chiamata al registro
  • Non mostrare all'utente una notifica per la chiamata

Per maggiori informazioni, consulta la documentazione di riferimento per CallScreeningService.

Supporto di più lingue, più lingue

Android 7.0 ora consente agli utenti di selezionare più lingue nelle Impostazioni per supportare meglio i casi d'uso bilingue. Le app possono utilizzare una nuova API per ottenere le impostazioni internazionali selezionate dall'utente, in modo da offrire esperienze utente più sofisticate agli utenti con più lingue, ad esempio mostrare i risultati di ricerca in più lingue e non proporre di tradurre pagine web in una lingua che l'utente già conosce.

Oltre al supporto multilingue, Android 7.0 espande anche la gamma di lingue disponibili per gli utenti. Offre oltre 25 varianti ognuna per le lingue di uso comune, come l'inglese, lo spagnolo, il francese e l'arabo. Inoltre, offre il supporto parziale per oltre 100 nuove lingue.

Le app possono ricevere l'elenco delle impostazioni internazionali impostate dall'utente chiamando LocaleList.GetDefault(). Per supportare il numero ampliato di impostazioni internazionali, Android 7.0 sta cambiando la modalità di risoluzione delle risorse. Assicurati di testare e verificare che le app funzionino come previsto con la nuova logica di risoluzione delle risorse.

Per informazioni sul nuovo comportamento di risoluzione delle risorse e sulle best practice da seguire, consulta la pagina relativa all'assistenza multilingue.

Nuove emoji

Android 7.0 introduce emoji aggiuntive e funzionalità correlate alle emoji, tra cui emoji per la tonalità della pelle e supporto per i selettori di variazione. Se la tua app supporta le emoji, segui le linee guida riportate di seguito per sfruttare queste funzionalità correlate alle emoji.

  • Verifica che un dispositivo contenga un'emoji prima di inserirla. Per verificare quali emoji sono presenti nel carattere di sistema, utilizza il metodo hasGlyph(String).
  • Verifica che un'emoji supporti i selettori di variante. I selettori di variante ti consentono di presentare determinate emoji a colori o in bianco e nero. Sui dispositivi mobili, le app dovrebbero rappresentare le emoji a colori anziché in bianco e nero. Tuttavia, se l'app mostra emoji incorporate nel testo, dovrebbe utilizzare la variante in bianco e nero. Per determinare se un'emoji ha una variazione, utilizza il selettore delle variazioni. Per un elenco completo dei caratteri con varianti, consulta la sezione Sequenze di varianti di emoji della documentazione Unicode sulle varianti.
  • Verifica che un'emoji supporti la tonalità della pelle. Android 7.0 consente agli utenti di modificare la tonalità della pelle visualizzata delle emoji in base alle loro preferenze. Le app tastiera dovrebbero fornire indicazioni visive per le emoji con più tonalità della pelle e dovrebbero consentire agli utenti di selezionare la tonalità della pelle che preferiscono. Per determinare quali emoji di sistema hanno modificatori della tonalità della pelle, utilizza il metodo hasGlyph(String). Puoi determinare quali emoji utilizzano le tonalità della pelle leggendo la documentazione di Unicode.

API ICU4J in Android

Android 7.0 ora offre un sottoinsieme di API ICU4J nel framework Android all'interno del pacchetto android.icu. La migrazione è semplice e principalmente comporta la semplice modifica dello spazio dei nomi com.java.icu a android.icu. Se utilizzi già un bundle ICU4J nelle tue app, il passaggio alle API android.icu fornite nel framework Android può produrre risparmi significativi nelle dimensioni degli APK.

Per saperne di più sulle API Android ICU4J, vedi ICU4J Support.

WebView

Chrome e WebView, insieme

A partire dalla versione 51 di Chrome su Android 7.0 e versioni successive, l'APK di Chrome sul dispositivo viene utilizzato per fornire ed eseguire il rendering di Android System WebView. Questo approccio migliora l'utilizzo della memoria sul dispositivo stesso e riduce anche la larghezza di banda necessaria per mantenere aggiornato WebView (poiché l'APK autonomo di WebView non verrà più aggiornato finché Chrome rimane attivo).

Puoi scegliere il tuo provider WebView attivando le Opzioni sviluppatore e selezionando Implementazione di WebView. Puoi utilizzare qualsiasi versione compatibile di Chrome (Dev, beta o stabile) installata sul tuo dispositivo o l'APK autonomo di WebView per fungere da implementazione di WebView.

Multiprocesso

A partire dalla versione 51 di Chrome in Android 7.0, WebView eseguirà i contenuti web in un processo separato con sandbox quando è attivata l'opzione per sviluppatori "WebView multiprocesso".

Prima di attivare WebView multiprocesso in una versione futura di Android, vorremmo ricevere feedback sulla compatibilità e sulle prestazioni di runtime in N. In questa versione sono previste regressioni nel tempo di avvio, nell'utilizzo totale della memoria e nelle prestazioni di rendering del software.

Se riscontri problemi imprevisti nella modalità multiprocesso, ci piacerebbe saperne di più. Contatta il team di WebView per informazioni sul tracker dei bug di Chromium.

Esecuzione JavaScript prima del caricamento della pagina

A partire dalle app che hanno come target Android 7.0, il contesto JavaScript viene reimpostato quando viene caricata una nuova pagina. Attualmente, il contesto viene trasferito per la prima pagina caricata in una nuova istanza di WebView.

Gli sviluppatori che intendono inserire codice JavaScript nel componente WebView devono eseguire lo script dopo l'inizio del caricamento della pagina.

Geolocalizzazione su origini non sicure

A partire dalle app che hanno come target Android 7.0, l'API di geolocalizzazione sarà consentita solo su origini sicure (tramite HTTPS). Questo criterio è progettato per proteggere le informazioni private degli utenti quando utilizzano una connessione non sicura.

Test con WebView beta

WebView viene aggiornato regolarmente, quindi ti consigliamo di verificare spesso la compatibilità con la tua app utilizzando il canale beta di WebView. Per iniziare a testare le versioni pre-release di WebView su Android 7.0, scarica e installa Chrome Dev o Chrome Beta e selezionala come implementazione di WebView nelle opzioni per sviluppatori, come descritto sopra. Segnala i problemi tramite il tracker dei bug di Chromium per consentirci di correggerli prima del rilascio di una nuova versione di WebView.

API OpenGLTM ES 3.2

Android 7.0 aggiunge interfacce del framework e supporto della piattaforma per OpenGL ES 3.2, tra cui:

  • Tutte le estensioni del Android Extensions Pack (AEP), ad eccezione di EXT_texture_sRGB_decode.
  • Framebuffer con virgola mobile per HDR e ombreggiatura differita.
  • Effettua il disegno delle chiamate BaseVertex per migliorare il batch e il flusso di dati.
  • Solido controllo dell'accesso al buffer per ridurre il sovraccarico di WebGL.

L'API framework per OpenGL ES 3.2 su Android 7.0 viene fornita con la classe GLES32. Quando utilizzi OpenGL ES 3.2, assicurati di dichiarare i requisiti nel file manifest utilizzando il tag <uses-feature> e l'attributo android:glEsVersion.

Per informazioni sull'utilizzo di OpenGL ES, incluso come verificare la versione OpenGL ES supportata di un dispositivo in fase di runtime, consulta la guida all'API OpenID ES.

Registrazione su Android TV

Android 7.0 aggiunge la possibilità di registrare e riprodurre contenuti dai servizi di input di Android TV tramite nuove API di registrazione. Basandosi sulle API time-shifting esistenti, i servizi di input TV possono controllare quali dati sui canali possono essere registrati, come vengono salvate le sessioni registrate e gestire l'interazione degli utenti con i contenuti registrati.

Per ulteriori informazioni, consulta la sezione API di registrazione di Android TV.

Android for Work

Android for Work aggiunge molte nuove funzioni e API per i dispositivi con Android 7.0. Di seguito sono riportate alcune caratteristiche principali; per un elenco completo delle funzionalità, consulta l'elenco delle funzionalità di Android Enterprise.

Verifica della sicurezza del profilo di lavoro

I proprietari del profilo che hanno come target l'SDK N possono specificare una verifica di sicurezza separata per le app in esecuzione nel profilo di lavoro. La sfida di lavoro viene mostrata quando un utente tenta di aprire qualsiasi app di lavoro. Il completamento della verifica di sicurezza sblocca il profilo di lavoro e, se necessario, lo decripta. Per i proprietari del profilo, ACTION_SET_NEW_PASSWORD chiede all'utente di impostare una verifica di lavoro e ACTION_SET_NEW_PARENT_PROFILE_PASSWORD chiede all'utente di impostare un blocco dispositivo.

I proprietari di profili possono impostare criteri diversi per i passcode per la sfida di lavoro (ad esempio, la durata del PIN o se è possibile utilizzare un'impronta per sbloccare il profilo) utilizzando setPasswordQuality(), setPasswordMinimumLength() e i metodi correlati. Il proprietario del profilo può anche impostare il blocco del dispositivo utilizzando l'istanza DevicePolicyManager restituita dal nuovo metodo getParentProfileInstance(). Inoltre, i proprietari del profilo possono personalizzare la schermata delle credenziali per la sfida di lavoro utilizzando i nuovi metodi setOrganizationColor() e setOrganizationName().

Stacca dal lavoro

Su un dispositivo con un profilo di lavoro, gli utenti possono attivare/disattivare la modalità di lavoro. Quando la modalità di lavoro è disattivata, l'utente gestito viene temporaneamente arrestato, il che comporta la disattivazione delle app del profilo di lavoro, della sincronizzazione in background e delle notifiche. È inclusa l'applicazione del proprietario del profilo. Quando la modalità di lavoro è disattivata, il sistema mostra un'icona di stato permanente per ricordare all'utente che non può avviare le app di lavoro. L'Avvio app indica che le app e i widget di lavoro non sono accessibili.

VPN sempre attiva

I proprietari dei dispositivi e dei profili possono garantire che le app di lavoro si connettano sempre tramite una VPN specificata. Il sistema avvia automaticamente la VPN dopo l'avvio del dispositivo.

I nuovi metodi DevicePolicyManager sono setAlwaysOnVpnPackage() e getAlwaysOnVpnPackage().

Poiché i servizi VPN possono essere associati direttamente dal sistema senza interazione con l'app, i client VPN devono gestire nuovi punti di ingresso per la VPN sempre attiva. Come prima, i servizi vengono indicati al sistema da un'azione di corrispondenza di filtro per intent android.net.VpnService.

Gli utenti possono anche impostare manualmente i client VPN sempre attivi che implementano i metodi VPNService utilizzando Impostazioni> Altro> VPN. L'opzione per abilitare VPN sempre attiva dalle impostazioni è disponibile solo se il client VPN ha come target il livello API 24.

Provisioning personalizzato

Un'applicazione può personalizzare i flussi di provisioning del proprietario del profilo e del proprietario del dispositivo con colori e loghi aziendali. DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR personalizza il colore del flusso. DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI personalizza il flusso con un logo aziendale.

Miglioramenti all'accessibilità

Android 7.0 ora offre le impostazioni visive direttamente nella schermata di benvenuto per la configurazione di nuovi dispositivi. In questo modo è molto più facile per gli utenti scoprire e configurare le funzioni di accessibilità sui loro dispositivi, tra cui il gesto di ingrandimento, le dimensioni del carattere, le dimensioni di visualizzazione e TalkBack.

Grazie a queste funzioni di accessibilità che hanno un posizionamento più evidente, è più probabile che gli utenti provino la tua app. Assicurati di testare le tue app in anticipo con queste impostazioni abilitate. Puoi attivarle da Impostazioni > Accessibilità.

Sempre in Android 7.0, ora i servizi di accessibilità possono aiutare gli utenti con disabilità motorie a toccare lo schermo. La nuova API consente di creare servizi con funzionalità come tracciamento dei volti, tracciamento oculare, scansione per punto e così via, per soddisfare le esigenze di questi utenti.

Per saperne di più, consulta la documentazione di riferimento per GestureDescription.

Avvio diretto

L'avvio diretto migliora i tempi di avvio del dispositivo e consente alle app registrate di avere funzionalità limitate anche dopo un riavvio imprevisto. Ad esempio, se un dispositivo criptato si riavvia mentre l'utente dorme, le sveglie registrate, i messaggi e le chiamate in arrivo ora possono continuare a inviare notifiche all'utente normalmente. Ciò significa anche che i servizi di accessibilità possono essere disponibili immediatamente dopo un riavvio.

L'avvio diretto sfrutta la crittografia basata su file in Android 7.0 per abilitare criteri di crittografia granulari per i dati di sistema e delle app. Il sistema utilizza uno store criptato dal dispositivo per determinati dati di sistema e dati dell'app registrati esplicitamente. Per impostazione predefinita, viene utilizzato un archivio criptato delle credenziali per tutti gli altri dati di sistema, dati utente, app e dati delle app.

All'avvio, il sistema si avvia in modalità con restrizioni, con accesso solo ai dati criptati del dispositivo e senza accesso generale ad app o dati. Se vuoi eseguire dei componenti in questa modalità, puoi registrarli impostando un flag nel manifest. Dopo il riavvio, il sistema attiva i componenti registrati trasmettendo l'intent LOCKED_BOOT_COMPLETED. Il sistema garantisce che i dati delle app criptati dal dispositivo registrati siano disponibili prima dello sblocco. Tutti gli altri dati non saranno disponibili finché l'utente non confermerà le proprie credenziali della schermata di blocco per decriptarli.

Per ulteriori informazioni, vedi Avvio diretto.

Attestazione chiave

Android 7.0 introduce l'attestazione delle chiavi, un nuovo strumento di sicurezza che aiuta ad assicurare che le coppie di chiavi archiviate nell'archivio chiavi supportato dall'hardware di un dispositivo proteggano correttamente le informazioni sensibili utilizzate dalla tua app. Utilizzando questo strumento, puoi avere la certezza che la tua app interagisca con chiavi che risiedono in hardware sicuro, anche se il dispositivo che esegue l'app è rooted. Se nelle tue app utilizzi chiavi dell'archivio chiavi supportate da hardware, dovresti usare questo strumento, in particolare se usi le chiavi per verificare informazioni sensibili all'interno dell'app.

L'attestazione della chiave consente di verificare che una coppia di chiavi RSA o EC sia stata creata e archiviata nell'archivio chiavi supportato da hardware di un dispositivo all'interno dell'ambiente di esecuzione attendibile del dispositivo. Lo strumento consente inoltre di utilizzare un servizio esterno al dispositivo, ad esempio il server back-end dell'app, per determinare e verificare con sicurezza gli utilizzi e la validità della coppia di chiavi. Queste funzionalità forniscono un ulteriore livello di sicurezza che protegge la coppia di chiavi, anche se qualcuno esegue il rooting del dispositivo o compromette la sicurezza della piattaforma Android sul dispositivo.

Nota: solo un numero limitato di dispositivi con Android 7.0 supporta l'attestazione delle chiavi a livello di hardware; tutti gli altri dispositivi con Android 7.0 utilizzano invece l'attestazione delle chiavi a livello di software. Prima di verificare le proprietà delle chiavi supportate da hardware di un dispositivo in un ambiente a livello di produzione, devi assicurarti che il dispositivo supporti l'attestazione delle chiavi a livello di hardware. Per farlo, devi verificare che la catena di certificati di attestazione contenga un certificato radice firmato dalla chiave radice di attestazione di Google e che l'elemento attestationSecurityLevel all'interno della struttura dei dati della descrizione della chiave sia impostato sul livello di sicurezza TrustedEnvironment.

Per maggiori informazioni, consulta la documentazione per gli sviluppatori relativa all'attestazione chiave.

Configurazione della sicurezza della rete

In Android 7.0, le app possono personalizzare il comportamento delle connessioni sicure (HTTPS, TLS) in modo sicuro, senza modificare il codice, utilizzando la configurazione di sicurezza della rete dichiarativa, invece di utilizzare le API programmatiche convenzionali soggette a errori (ad es. X509TrustManager).

Funzionalità supportate:

  • Trust anchor personalizzati. Consente a un'applicazione di personalizzare le autorità di certificazione (CA) ritenute attendibili per le sue connessioni sicure. ad esempio l'attendibilità di determinati certificati autofirmati o di un insieme limitato di CA pubbliche.
  • Override solo di debug. Consente a uno sviluppatore di applicazioni di eseguire il debug in modo sicuro delle connessioni protette dell'applicazione senza ulteriori rischi per la base installata.
  • Disattivazione del traffico con testo non crittografato. Consente a un'applicazione di proteggersi dall'uso involontario del traffico con testo in chiaro.
  • Blocco dei certificati. Una funzionalità avanzata che consente a un'applicazione di limitare le chiavi server attendibili per le connessioni sicure.

Per ulteriori informazioni, vedi Configurazione della sicurezza della rete.

Autorità di certificazione attendibile predefinita

Per impostazione predefinita, le app destinate ad Android 7.0 considerano attendibili solo i certificati forniti dal sistema e non considerano più attendibili le autorità di certificazione (CA) aggiunte dagli utenti. Le app che hanno come target Android 7.0 (livello API 24) che vogliono considerare attendibili le CA aggiunte dall'utente devono utilizzare la configurazione della sicurezza della rete per specificare in che modo le CA dell'utente devono essere attendibili.

Schema di firma APK v2

Android 7.0 introduce lo schema di firma dell'APK v2, un nuovo schema di firma dell'app che offre tempi di installazione più rapidi e maggiore protezione da modifiche non autorizzate ai file APK. Per impostazione predefinita, Android Studio 2.2 e il plug-in Android per Gradle 2.2 firmano la tua app utilizzando sia lo schema di firma APK v2 sia lo schema di firma tradizionale, che utilizza la firma JAR.

Anche se consigliamo di applicare lo schema di firma dell'APK v2 alla tua app, questo nuovo schema non è obbligatorio. Se la tua app non si crea correttamente quando utilizzi lo schema di firma dell'APK v2, puoi disattivare il nuovo schema. In seguito al processo di disattivazione, Android Studio 2.2 e il plug-in Android per Gradle 2.2 firmano la tua app utilizzando solo lo schema di firma tradizionale. Per firmare solo con lo schema tradizionale, apri il file build.gradle a livello di modulo, quindi aggiungi la riga v2SigningEnabled false alla configurazione di firma della release:

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

Attenzione: se firmi la tua app utilizzando lo schema di firma dell'APK v2 e apporti ulteriori modifiche all'app, la firma dell'app viene invalidata. Per questo motivo, usa strumenti come zipalign prima di firmare la tua app utilizzando lo schema di firma dell'APK v2 e non dopo.

Per ulteriori informazioni, leggi i documenti di Android Studio che descrivono come firmare un'app in Android Studio e come configurare il file di build per la firma delle app utilizzando il plug-in Android per Gradle.

Accesso alla directory mirata

In Android 7.0, le app possono utilizzare nuove API per richiedere l'accesso a specifiche directory di archiviazione esterna, incluse le directory su supporti rimovibili come le schede SD. Le nuove API semplificano notevolmente l'accesso dell'applicazione alle directory di archiviazione esterne standard, come la directory Pictures. Le app come le app di foto possono utilizzare queste API anziché utilizzare READ_EXTERNAL_STORAGE, che concede l'accesso a tutte le directory di archiviazione, oppure Storage Access Framework, che consente all'utente di passare alla directory.

Inoltre, le nuove API semplificano i passaggi che un utente esegue per concedere l'accesso allo spazio di archiviazione esterno alla tua app. Quando utilizzi le nuove API, il sistema utilizza una semplice UI delle autorizzazioni che indica chiaramente a quale directory l'applicazione richiede l'accesso.

Per ulteriori informazioni, consulta la documentazione per gli sviluppatori relativa all'accesso con ambito alla directory.

Aiuto scorciatoie da tastiera

In Android 7.0, l'utente può premere Meta + / per attivare una schermata Scorciatoie da tastiera in cui vengono visualizzate tutte le scorciatoie disponibili sia dal sistema sia dall'app in stato attivo. Il sistema recupera queste scorciatoie automaticamente dal menu dell'app, se sono presenti. Puoi anche fornire elenchi di scorciatoie perfezionati per lo schermo. Per farlo, puoi eseguire l'override del metodo onProvideKeyboardShortcuts().

Nota: il tasto Meta non è presente su tutte le tastiere: sulle tastiere Macintosh è il tasto Command, sulla tastiera Windows è il tasto Windows e sulle tastiere di Pixel C e di ChromeOS è il tasto Ricerca.

Per attivare l'Assistente per le scorciatoie da tastiera da qualsiasi punto dell'app, chiama requestShowKeyboardShortcuts() dall'attività pertinente.

API Custom Pointer

Android 7.0 introduce l'API Custom Pointer, che consente di personalizzare l'aspetto, la visibilità e il comportamento del puntatore. Questa funzionalità è particolarmente utile quando un utente utilizza un mouse o un touchpad per interagire con gli oggetti dell'interfaccia utente. Il puntatore predefinito utilizza un'icona standard. Questa API include inoltre funzionalità avanzate come la modifica dell'aspetto dell'icona del puntatore in base a movimenti specifici del mouse o del touchpad.

Per impostare un'icona del puntatore, esegui l'override del metodo onResolvePointerIcon() della classe View. Questo metodo utilizza un oggetto PointerIcon per disegnare l'icona che corrisponde a un evento di movimento specifico.

API Sustained Performance

Le prestazioni possono variare drasticamente per le app a lunga esecuzione, perché il sistema limita i motori system-on-chip quando i componenti dei dispositivi raggiungono i limiti di temperatura. Questa fluttuazione rappresenta un bersaglio mobile per gli sviluppatori di app che creano app di lunga durata ad alte prestazioni.

Per risolvere queste limitazioni, Android 7.0 include il supporto per la modalità di prestazioni sostenute, che consente agli OEM di fornire suggerimenti sulle funzionalità relative alle prestazioni dei dispositivi per le app a lunga esecuzione. Gli sviluppatori di app possono utilizzare questi suggerimenti per ottimizzare le app in modo da ottenere un livello prevedibile e coerente di prestazioni del dispositivo per lunghi periodi di tempo.

Gli sviluppatori di app possono provare questa nuova API in Android 7.0 solo su dispositivi Nexus 6P. Per utilizzare questa funzionalità, imposta il flag della finestra di prestazioni sostenute per la finestra che vuoi eseguire in modalità di prestazioni sostenute. Imposta questo flag utilizzando il metodo Window.setSustainedPerformanceMode(). Il sistema disattiva automaticamente questa modalità quando la finestra non è più a fuoco.

Supporto VR

Android 7.0 aggiunge il supporto della piattaforma e le ottimizzazioni per una nuova modalità VR per consentire agli sviluppatori di creare esperienze VR di alta qualità su dispositivi mobili per gli utenti. Esistono diversi miglioramenti delle prestazioni, tra cui l'accesso a un core della CPU esclusivo per le app VR. Nelle app puoi sfruttare il tracciamento intelligente della testa e le notifiche stereo. Ma soprattutto, Android 7.0 offre grafica a latenza molto bassa. Per informazioni complete sulla creazione di app VR per Android 7.0, consulta l'SDK Google VR per Android.

In Android 7.0, gli sviluppatori di servizi di stampa possono ora visualizzare informazioni aggiuntive su singole stampanti e processi di stampa.

Quando si elencano singole stampanti, un servizio di stampa ora può impostare le icone per stampante in due modi:

Inoltre, puoi fornire un'attività per stampante per visualizzare ulteriori informazioni chiamando il numero setInfoIntent().

Puoi indicare l'avanzamento e lo stato dei processi di stampa nella notifica relativa al processo di stampa richiamando rispettivamente setProgress() e setStatus().

API Frame Metrics

L'API Frame Metrics consente a un'app di monitorare le prestazioni di rendering dell'interfaccia utente. L'API fornisce questa funzionalità esponendo un'API Pub/Sub di streaming per trasferire le informazioni sulle tempistiche del frame per la finestra attuale dell'app. I dati restituiti sono equivalenti a quelli visualizzati da adb shell dumpsys gfxinfo framestats, a titolo esemplificativo negli ultimi 120 frame.

Puoi utilizzare l'API Frame Metrics per misurare le prestazioni dell'interfaccia utente a livello di interazione in produzione, senza connessione USB. Questa API consente la raccolta di dati con una granularità molto maggiore rispetto a adb shell dumpsys gfxinfo. Questa granularità maggiore è possibile perché il sistema può raccogliere dati per determinate interazioni nell'app; il sistema non deve acquisire un riepilogo globale delle prestazioni dell'intera app né cancellare alcuno stato globale. Puoi utilizzare questa funzionalità per raccogliere dati sulle prestazioni e rilevare regressioni nelle prestazioni della UI per casi d'uso reali all'interno di un'app.

Per monitorare una finestra, implementa il metodo di callback OnFrameMetricsAvailableListener.onFrameMetricsAvailable() e registralo in quella finestra.

L'API fornisce un oggetto FrameMetrics, che contiene i dati di tempo che il sottosistema di rendering riporta per le varie tappe del ciclo di vita di un frame. Le metriche supportate sono: UNKNOWN_DELAY_DURATION, INPUT_HANDLING_DURATION, ANIMATION_DURATION, LAYOUT_MEASURE_DURATION, DRAW_DURATION, SYNC_DURATION, COMMAND_ISSUE_DURATION, SWAP_BUFFERS_DURATION, TOTAL_DURATION e FIRST_DRAW_FRAME.

File virtuali

Nelle versioni precedenti di Android, la tua app poteva utilizzare Storage Access Framework per consentire agli utenti di selezionare i file dai propri account di archiviazione sul cloud, ad esempio Google Drive. Tuttavia, non c'era un modo per rappresentare i file che non avevano una rappresentazione diretta di bytecode; ogni file doveva fornire un flusso di input.

Android 7.0 aggiunge il concetto di file virtuali a Storage Access Framework. La funzionalità dei file virtuali consente a DocumentsProvider di restituire gli URI dei documenti che possono essere utilizzati con un intent ACTION_VIEW anche se non hanno una rappresentazione in bytecode diretta. Android 7.0 consente inoltre di fornire formati alternativi per i file utente, virtuali o di altro tipo.

Per maggiori informazioni sull'apertura di file virtuali, consulta Aprire file virtuali nella guida Storage Access Frameworks.