Android 7.0 per sviluppatori

Android 7.0 Nougat introduce una serie di nuove 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 possono influire sulle tue app.

Per ulteriori informazioni sulle funzionalità per gli utenti di Android 7.0, visita il sito www.android.com.

Supporto multi-finestra

In Android 7.0, stiamo introducendo nella piattaforma una nuova e molto richiesta funzionalità di multitasking: il supporto multi-finestra.

Ora gli utenti possono aprire contemporaneamente due app sullo schermo.

  • Sui telefoni 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 avere la modalità Picture in picture, in modo da continuare a mostrare contenuti mentre l'utente sfoglia o interagisce con altre app.
App per dispositivi mobili in esecuzione in modalità schermo diviso

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

In particolare sui tablet e su altri dispositivi con schermi più grandi, il supporto multi-finestra ti offre nuovi modi per coinvolgere gli utenti. Puoi anche attivare il trascinamento all'interno dell'app per consentire agli utenti di trascinare facilmente i contenuti da o verso l'app: un ottimo modo per migliorare l'esperienza utente.

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

Per ulteriori 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ù facili e veloci da usare. Ecco alcune modifiche:

  • Aggiornamenti dei modelli: stiamo aggiornando i modelli di notifica per dare una nuova enfasi all'immagine hero e all'avatar. Gli sviluppatori potranno sfruttare i nuovi modelli apportando modifiche minime al codice.
  • Personalizzazione dello stile di messaggistica: puoi personalizzare di 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 esso, 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 dall'interfaccia di notifica.
  • Visualizzazioni personalizzate: due nuove API consentono di utilizzare decorazioni di sistema, come azioni e intestazioni di notifica, quando si utilizzano le visualizzazioni personalizzate nelle notifiche.
Dispositivo mobile che mostra notifiche di messaggi raggruppati
Dispositivo mobile che mostra una notifica con messaggio singolo
Dispositivo mobile che mostra una risposta a un messaggio in linea nell'interfaccia di notifica

Figura 2. Notifiche raggruppate e risposta diretta.

Per informazioni su come implementare le nuove funzionalità, consulta la guida relativa alle notifiche.

Compilation JIT/AOT con profilo-guidato

In Android 7.0 abbiamo aggiunto ad ART un compilatore Just in Time (JIT) con profilazione del 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 consente di migliorare le prestazioni di runtime, risparmiare spazio di archiviazione e velocizzare gli aggiornamenti delle app e del sistema.

La compilazione guidata da un 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 mantiene un profilo dei metodi attivi di ogni app e può precompilare e memorizzare nella cache questi metodi per ottenere le migliori prestazioni. Altre parti dell'app non vengono 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'ingombro complessivo della RAM di un'app, inclusi i binari associati. Questa funzione è particolarmente importante sui dispositivi con memoria ridotta.

ART gestisce la compilazione guidata dal profilo in modo da ridurre al minimo l'impatto sulla batteria del dispositivo. Effettua la precompilazione solo quando il dispositivo è inattivo e si ricarica, risparmiando tempo e batteria svolgendo il lavoro 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. Gli aggiornamenti di sistema sono anche più rapidi, in quanto non c'è più passaggio per l'ottimizzazione.

Sospensione ovunque ti trovi...

Android 6.0 ha introdotto Sospensione, una modalità di sistema che consente di risparmiare batteria posticipando le attività di CPU e rete delle app quando il dispositivo è inattivo, ad esempio quando è appoggiato a un tavolo o in un riquadro a scomparsa.

Ora in Android 7.0, Doze 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 un sottoinsieme delle familiari limitazioni di CPU e rete alle app. Ciò significa che gli utenti possono risparmiare batteria anche quando portano i dispositivi in tasca.

Illustrazione di come la funzionalità 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 aumentare 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 rinvia i processi e le sincronizzazioni. Durante brevi periodi di manutenzione, alle applicazioni è consentito l'accesso alla rete e qualsiasi job/sincronizzazione differita viene eseguito. Accendi lo schermo o collega il dispositivo alla modalità di sospensione.

Quando il dispositivo è di nuovo fermo, con lo schermo spento e acceso per un certo periodo di tempo, la funzione 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 in modo da gestire correttamente Sospensione, non devi fare altro. In caso contrario, inizia subito ad adattare la tua app alla modalità Sospensione.

Progetto Svelte: ottimizzazioni in background

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

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

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

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

Continuiamo a estendere JobScheduler e GCMNetworkManager per soddisfare un maggior numero dei tuoi casi d'uso. Ad esempio, in Android 7.0 ora puoi pianificare le attività in background in base alle modifiche nei fornitori di contenuti. Allo stesso tempo, stiamo iniziando a ritirare alcuni dei modelli precedenti 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) perché possono riattivare i processi in background di più app contemporaneamente e consumare memoria e batteria. Se la tua app riceve questi dati, utilizza Android 7.0 per eseguire la migrazione a JobScheduler e alle API correlate.

Per informazioni dettagliate, consulta la documentazione Ottimizzazioni in background.

Visualizzazione superficie

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

La classe SurfaceView consente una composizione sullo schermo più efficiente dalla batteria, perché è composta in hardware dedicato, separatamente dai contenuti della finestra dell'app. Di conseguenza, produce meno copie intermedie rispetto a TextureView.

La posizione dei contenuti di un oggetto SurfaceView ora viene aggiornata in modo sincrono ai contenuti dell'app che la contengono. Un risultato di questa modifica è che le semplici traduzioni o scale di un video riprodotto in un SurfaceView non producono più barre nere insieme alla visualizzazione durante il movimento.

A partire da Android 7.0, ti 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 dati cellulare supera in genere il costo del dispositivo stesso. Per molti utenti la rete dati è una risorsa costosa da 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. Risparmio dati consente agli utenti di controllare il modo in cui le app utilizzano la rete dati e permette agli sviluppatori di fornire un servizio più efficiente quando la funzionalità Risparmio dati è attiva.

Quando un utente attiva 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 utilizzare meno dati in primo piano quando possibile, ad esempio limitando la velocità in bit per lo streaming, riducendo la qualità delle immagini, posticipando la pre-memorizzazione ottimistica nella cache e così via. Gli utenti possono consentire ad app specifiche di consentire l'utilizzo dei dati a consumo in background anche quando è attiva la funzionalità Risparmio dati.

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 abilitato Risparmio dati e cercare di 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 dal Khronos Group.

Vulkan è stato progettato da zero 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 migliora anche il parallelizzazione, consentendo a più thread di eseguire contemporaneamente operazioni come la costruzione del buffer di comando.

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

  • Intestazioni
  • Livelli di convalida (librerie di debug)
  • Compilatore mesh SPIR-V
  • Libreria di compilation dello Shader di 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 su più dispositivi il prima possibile.

Per ulteriori informazioni, consulta la documentazione dell'API.

API Quick Settings Tile

Riquadri delle Impostazioni rapide nell'area notifiche

Figura 5. Riquadri Impostazioni rapide nell'area notifiche.

Le Impostazioni rapide sono un modo semplice e popolare per mostrare impostazioni e azioni chiave, direttamente dall'area notifiche. In Android 7.0, abbiamo ampliato 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 offerto agli utenti il controllo su quali riquadri delle Impostazioni rapide vengono visualizzati e dove vengono visualizzati: gli utenti possono aggiungere o spostare i riquadri semplicemente trascinandoli.

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

I riquadri delle Impostazioni rapide sono riservati ai controlli o alle azioni richiesti con urgenza o utilizzo 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 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 di numeri bloccati. L'app predefinita per 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.

Impostando il blocco dei numeri come funzionalità standard della piattaforma, Android consente alle app di supportare in modo coerente 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 durante le chiamate vengono bloccati anche negli SMS
  • I numeri bloccati possono rimanere memorizzati su reimpostazioni e dispositivi tramite la funzionalità Backup e ripristino
  • Più app possono utilizzare lo stesso elenco di numeri bloccati

Inoltre, l'integrazione dell'app dell'operatore tramite Android consente agli operatori di leggere l'elenco dei numeri bloccati sul dispositivo ed eseguire il blocco lato servizio per l'utente al fine di impedire che chiamate e messaggi indesiderati raggiungano l'utente tramite 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. A questo scopo, implementa il nuovo CallScreeningService, che consente all'app Telefono di eseguire una serie di azioni in base al valore Call.Details di una chiamata in arrivo, ad esempio:

  • Rifiutare la chiamata in arrivo
  • Non consentire la chiamata al registro chiamate
  • 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ù impostazioni internazionali in Impostazioni per supportare meglio i casi d'uso bilingue. Le app possono utilizzare una nuova API per ottenere le impostazioni internazionali selezionate dall'utente e quindi offrire esperienze utente più sofisticate per gli utenti multiregionali, ad esempio mostrare risultati di ricerca in più lingue e non proporre di tradurre pagine web in una lingua che l'utente già conosce.

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

Le app possono ottenere l'elenco delle impostazioni internazionali impostate dall'utente chiamando il numero LocaleList.GetDefault(). Per supportare il numero ampliato di impostazioni internazionali, Android 7.0 sta cambiando il modo in cui risolve le 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 Supporto multilingue.

Nuove emoji

Android 7.0 introduce emoji e funzionalità aggiuntive correlate alle emoji, tra cui emoji in tonalità della pelle e supporto per i selettori di variazioni. 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 delle varianti. I selettori delle varianti 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 in linea con il testo, dovrebbe utilizzare la variante in bianco e nero. Per determinare se un'emoji ha una variante, 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 per tastiera dovrebbero fornire indicazioni visive per le emoji con più tonalità della pelle e consentire agli utenti di selezionare la tonalità della pelle che preferiscono. Per determinare quali emoji di sistema presentano modificatori della tonalità della pelle, utilizza il metodo hasGlyph(String). Puoi determinare quali emoji utilizzano le tonalità di 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 è facile e principalmente comporta semplicemente il passaggio dallo 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, visita la pagina di supporto di ICU4J.

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 dei componenti WebView di sistema Android. 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 WebView autonomo 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 WebView autonomo come 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 del runtime in N. In questa versione sono previste regressioni nei tempi 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 sul tracker dei bug di Chromium.

JavaScript eseguito prima del caricamento pagina

A partire dalle app che hanno come target Android 7.0, il contesto JavaScript verrà 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 vogliono inserire JavaScript nel componente WebView dovrebbero eseguire lo script dopo l'inizio del caricamento della pagina.

Geolocalizzazione su origini non sicure

A partire dalle app destinate ad Android 7.0, l'API di geolocalizzazione sarà consentita solo su origini sicure (su 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 in modo da consentirci di correggerli prima del rilascio di una nuova versione di WebView.

API OpenGLTM ES 3.2

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

  • Tutte le estensioni del Android Extension Pack (AEP) tranne EXT_texture_sRGB_decode.
  • Framebuffer con virgola mobile per HDR e ombreggiatura differita.
  • BaseVertex disegna le chiamate per migliorare il raggruppamento e il flusso di dati.
  • Solido controllo dell'accesso al buffer per ridurre l'overhead 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 da un dispositivo in esecuzione, consulta la guida all'API OpenGL ES.

Registrazione su Android TV

Android 7.0 aggiunge la possibilità di registrare e riprodurre contenuti dai servizi di input di Android TV tramite le nuove API di registrazione. Basandosi sulle API di time-shifting esistenti, i servizi di input TV possono controllare quali dati dei 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 funzionalità 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 di profili che hanno come target l'SDK N possono specificare una verifica di sicurezza separata per le app in esecuzione nel profilo di lavoro. La verifica di lavoro viene visualizzata 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 del dispositivo.

I proprietari del profilo possono impostare criteri per i passcode distinti per la sfida lavorativa (ad esempio la durata del PIN o se è possibile usare 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 lavorativa 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 arrestato temporaneamente, il che disattiva le app del profilo di lavoro, la sincronizzazione in background e le 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. 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 del 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 la VPN sempre attiva da 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 dell'accessibilità

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

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

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

Per ulteriori informazioni, 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, i messaggi e le chiamate in arrivo registrati possono ora continuare a inviare notifiche all'utente normalmente. Ciò significa anche che i servizi di accessibilità possono essere disponibili anche subito 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 con il dispositivo per determinati dati di sistema e dati dell'app registrati esplicitamente. Per impostazione predefinita, viene utilizzato un archivio criptato con 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 siano disponibili i dati delle app registrati criptati dal dispositivo 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, consulta la sezione Avvio diretto.

Attestazione chiave

Android 7.0 introduce l'attestazione delle chiavi, un nuovo strumento di sicurezza che ti aiuta a garantire 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 un'ulteriore certezza che la tua app interagisca con le chiavi che risiedono nell'hardware sicuro, anche se il dispositivo che esegue l'app è rooted. Se nelle tue app utilizzi chiavi dell'archivio chiavi supportato dall'hardware, ti consigliamo di 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 dall'hardware di un dispositivo all'interno dell'ambiente di esecuzione attendibile (TEE, Trusted Execution Environment). Lo strumento ti 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 in esecuzione 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 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. A questo scopo, 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 di descrizione della chiave sia impostato sul livello di sicurezza TrustedEnvironment.

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

Configurazione della sicurezza di 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 della sicurezza di rete anziché le API programmatiche convenzionali soggette a errori (ad es. X509TrustManager).

Funzionalità supportate:

  • Ancoraggi attendibili personalizzati. Consente a un'applicazione di personalizzare le autorità di certificazione (CA) attendibili per le sue connessioni sicure. ad esempio considerare attendibili determinati certificati autofirmati o un insieme limitato di CA pubbliche.
  • Override di solo debug. Consente a uno sviluppatore di applicazioni di eseguire in modo sicuro il debug di connessioni sicure delle proprie applicazioni senza rischi aggiuntivi per la base installata.
  • Disattivazione del traffico con testo in chiaro. Permette a un'applicazione di proteggersi dall'uso involontario del traffico di testo non crittografato.
  • Blocco del certificato. 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 di 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 dagli utenti devono utilizzare la Configurazione della sicurezza di rete per specificare in che modo le CA degli utenti devono essere attendibili.

Schema di firma APK v2

Android 7.0 introduce lo schema di firma degli APK v2, un nuovo schema di firma dell'app che offre tempi di installazione delle app più rapidi e una 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 dell'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 l'app non si crea correttamente quando utilizzi lo schema di firma dell'APK v2, puoi disattivare il nuovo schema. A causa del 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 l'app usando lo schema di firma dell'APK v2, 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 con ambito

In Android 7.0, le app possono utilizzare nuove API per richiedere l'accesso a specifiche directory di archiviazione esterna, incluse le directory sui 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 per le foto possono usare queste API anziché usare READ_EXTERNAL_STORAGE, che concede l'accesso a tutte le directory di archiviazione, oppure Storage Access Framework, che consente all'utente di accedere 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 alla directory con ambito.

Aiuto scorciatoie da tastiera

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

Nota: il tasto Meta non è presente su tutte le tastiere. Su una tastiera Macintosh il tasto è Comando, sulla tastiera Windows il tasto Windows e sul Pixel C e sulle tastiere di ChromeOS il tasto Cerca.

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

API Custom Pointer

Android 7.0 introduce l'API Custom Pointer, che consente di personalizzare aspetto, visibilità e comportamento del puntatore. Questa funzionalità è particolarmente utile quando un utente utilizza mouse o touchpad per interagire con gli oggetti dell'interfaccia utente. Il puntatore predefinito utilizza un'icona standard. Questa API include anche 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 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 notevolmente per le app di lunga durata, perché il sistema limita i motori system-on-chip quando i componenti del dispositivo raggiungono i limiti di temperatura. Questa fluttuazione rappresenta un bersaglio mobile per gli sviluppatori di app che creano app di lunga durata e ad alte prestazioni.

Per far fronte a queste limitazioni, Android 7.0 include il supporto della modalità di prestazione sostenuta, che consente agli OEM di fornire suggerimenti sulle funzionalità relative alle prestazioni del dispositivo 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à 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. Sono stati apportati diversi miglioramenti alle prestazioni, tra cui l'accesso a un core della CPU esclusivo per le app VR. Nelle app puoi sfruttare il rilevamento intelligente e le notifiche stereo per la VR. Ma soprattutto, Android 7.0 offre grafica a bassissima latenza. Per informazioni complete sulla creazione di app VR per Android 7.0, visita la pagina relativa all'SDK Google VR per Android.

In Android 7.0, gli sviluppatori di servizi di stampa possono ora visualizzare ulteriori informazioni sulle singole stampanti e sui processi di stampa.

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

Inoltre, puoi chiamare il numero setInfoIntent() per indicare un'attività specifica per stampante in modo da mostrare ulteriori informazioni.

Puoi indicare l'avanzamento e lo stato dei processi di stampa nella notifica relativa al processo di stampa chiamando 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 per lo streaming per trasferire le informazioni sulla durata del frame per la finestra corrente dell'app. I dati restituiti sono equivalenti a quelli visualizzati da adb shell dumpsys gfxinfo framestats, ma non si limitano agli ultimi 120 frame.

Puoi utilizzare l'API Frame Metrics per misurare le prestazioni dell'interfaccia utente a livello di interazione in produzione, senza una connessione USB. Questa API consente la raccolta dei dati con una granularità molto maggiore rispetto a adb shell dumpsys gfxinfo. Questa maggiore granularità è possibile perché il sistema può raccogliere dati per determinate interazioni nell'app; non deve acquisire un riepilogo globale delle prestazioni dell'intera app o cancellare qualsiasi 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 contenente dati sui tempi segnalati dal sottosistema di rendering per 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 file dai propri account di archiviazione sul cloud, ad esempio Google Drive. Tuttavia, non era possibile rappresentare i file che non avevano una rappresentazione in bytecode diretta; 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 degli utenti, virtuali o di altro tipo.

Per maggiori informazioni sull'apertura dei file virtuali, consulta la pagina relativa all'apertura di file virtuali nella guida di Storage Access Frameworks.