Un modo utile per valutare l'eccellenza dell'app è esaminare i flussi di lavoro nella tua app e valutare la fluidità e la sicurezza dell'esperienza dell'app.
Questo elenco di controllo definisce una serie di criteri di qualità di base e test associati per aiutarti a valutare la qualità della tua app. Alcuni di questi criteri potrebbero essere facili da trascurare e i test ti aiutano a ricordarti di includerli nei tuoi piani di test.
La checklist evidenzia la qualità minima che tutte le app devono soddisfare. I tuoi test andranno probabilmente ben oltre quanto descritto qui.
Ogni elemento della lista di controllo della qualità ha un ID univoco che potrebbe essere utile quando comunichi con il tuo team. Puoi anche visualizzare la versione precedente di queste linee guida.
Esperienza visiva
La tua app deve fornire un design visivo e sequenze di interazione standard di Android, ove opportuno, per un'esperienza utente coerente e intuitiva.
| Area | ID | Test | Descrizione |
|---|---|---|---|
| Navigazione | VX-N1 | CR-3 | L'app supporta la navigazione con il pulsante Indietro standard e non utilizza prompt personalizzati sullo schermo per il "pulsante Indietro". |
| VX-N2 | CR-3 | L'app supporta la navigazione tramite gesti per tornare indietro / andare alla schermata Home. | |
| VX-N3 | CR-1 CR-3 CR-5 |
L'app conserva e ripristina correttamente lo stato dell'utente o dell'app. L'app mantiene il proprio stato o lo stato dell'utente quando non è più in primo piano e non impedisce la perdita accidentale di dati a causa della navigazione a ritroso e di altre modifiche dello stato. Quando torna in primo piano, l'app deve ripristinare lo stato salvato e qualsiasi transazione con stato significativo in attesa. Ad esempio: modifiche a campi modificabili, progressi di gioco, menu, video e altre sezioni dell'app o del gioco.
|
|
| Notifiche | VX-S1 | CR-9 | Le notifiche seguono le linee guida di progettazione. In particolare:
|
| VX-S2 | CR-9 | Per app di messaggistica, app social e conversazioni:
| |
| UI e grafica | VX-U1 | CR-5 | L'app supporta gli orientamenti orizzontale e verticale e gli stati del dispositivo piegato e aperto. Gli orientamenti e gli stati di chiusura espongono essenzialmente le stesse funzionalità e azioni e preservano la parità funzionale. |
| VX-U2 | CR-5 | L'app riempie la finestra dell'app in entrambi gli orientamenti e non è in formato letterbox a causa di modifiche alla configurazione, tra cui la chiusura e l'apertura del dispositivo. È accettabile un letterbox leggero per compensare piccole variazioni nella geometria dello schermo. |
|
| VX-U3 | CR-5 | L'app gestisce correttamente le transizioni rapide tra le orientazioni del display e la chiusura e l'apertura del dispositivo senza problemi di rendering del display e senza perdere lo stato. | |
| Qualità visiva | VX-V1 | CR-all | L'app mostra grafica, testo, immagini e altri elementi UI senza distorsioni, sfocature o pixelizzazioni evidenti.
|
| VX-V2 | CR-all | L'app visualizza testo e blocchi di testo in modo accettabile per ciascuna delle lingue supportate.
|
|
| VX-V3 | CR-all | I contenuti dell'app e tutti i contenuti web a cui fa riferimento l'app supportano il tema scuro. | |
| Accessibilità | VX-A1 | CR-all | I touch target devono avere una dimensione di almeno 48 dp. Ulteriori informazioni. |
| VX-A2 | CR-all | Il testo e i contenuti in primo piano dell'app devono mantenere un rapporto di contrasto cromatico sufficientemente elevato con lo sfondo:
Scopri di più su colore e contrasto. |
|
| VX-A3 | CR-all | Descrivi ogni elemento UI,
tranne TextView, utilizzando contentDescription. |
Funzionalità
La tua app deve implementare il comportamento funzionale previsto.
| Area | ID | Test | Descrizione |
|---|---|---|---|
| Audio | FN-A1 | CR-1 CR-8 |
L'audio riprende quando l'app torna in primo piano o indica all'utente che la riproduzione è in pausa. |
| FN-A2 | CR-1 CR-2 CR-8 |
Se la riproduzione audio è una funzionalità principale, l'app deve supportare la riproduzione in background. | |
| FN-A3 | CR-0 | Quando l'utente avvia la riproduzione audio, l'app deve eseguire una delle seguenti operazioni entro un secondo:
|
|
| FN-A4 | CR-0 | L'app deve richiedere la messa a fuoco dell'audio quando inizia la riproduzione dell'audio e abbandonarla quando la riproduzione si interrompe. | |
| FN-A5 | CR-0 | L'app deve gestire le richieste di messa a fuoco audio di altre app. Ad esempio, un'app potrebbe ridurre il volume di riproduzione quando un'altra app riproduce un discorso. | |
| Contenuti multimediali | FN-M1 | CR-0 CR-6 CR-8 |
Se l'app riproduce audio in background, deve creare una notifica con stile MediaStyle. |
| FN-M2 | CR-0 | Se l'app riproduce video, deve supportare la riproduzione in picture in picture. | |
| FN-M3 | CR-0 | Se l'app codifica i video, deve farlo utilizzando lo standard di compressione video HEVC. | |
| Condivisione | FN-S1 | CR-0 | L'app deve utilizzare il foglio di condivisione di Android quando condivide contenuti. Può suggerire target non disponibili per le soluzioni personalizzate. |
| Servizio in background | FN-B1 | CR-6 | L'app evita di eseguire servizi inutilmente lunghi in background. Per garantire il corretto funzionamento del dispositivo dell'utente, il sistema applica varie limitazioni ai servizi in background. Questi non sono considerati buoni utilizzi dei servizi in background:
Scopri come scegliere la soluzione giusta per il tuo lavoro. |
Prestazioni e stabilità
La tua app deve fornire le prestazioni, la stabilità, la compatibilità e la reattività attese dagli utenti.
| Area | ID | Test | Descrizione |
|---|---|---|---|
| Stabilità | PS-S1 | CR-all SD-1 |
L'app non va in arresto anomalo o blocca il thread dell'interfaccia utente causando errori ANR (Android Not Responding). Utilizza il report pre-lancio di Google Play per identificare potenziali problemi di stabilità. Dopo il deployment, presta attenzione alla pagina Android vitals in Google Play Console. |
| Prestazioni | PS-P1 | CR-all SD-1 |
L'app si carica rapidamente o fornisce un feedback sullo schermo all'utente (un indicatore di avanzamento o un segnale simile) se l'app impiega più di due secondi per caricarsi. |
| PS-P2 | CR-all SD-1 |
Le app devono eseguire il rendering dei frame ogni 16 ms per raggiungere i 60 frame al secondo. Gli sviluppatori possono utilizzare l'opzione Rendering HWUI profilo nei test. Se si verificano problemi, sono disponibili strumenti per diagnosticare il rendering lento. | |
| PS-P3 | PM-1 | Con StrictMode abilitato (vedi Test StrictMode di seguito), non sono visibili flash rossi (avvisi di prestazioni di StrictMode) durante il test dell'app. I flash rossi indicano comportamenti errati relativi a spazio di archiviazione, accesso alla rete o perdite di memoria. | |
| SDK | PS-T1 | CR-0 | L'app viene eseguita sull'ultima versione pubblica della piattaforma Android senza arrestarsi in modo anomalo o influire gravemente sulla funzionalità principale. |
| PS-T2 | SP-1 | L'app ha come target l'SDK Android più recente necessario per rispettare i requisiti di Google Play impostando il valore targetSdk. |
|
| PS-T3 | SP-1 | L'app è creata con l'SDK Android più recente impostando il valore compileSdk. |
|
| PS-T4 | SP-2 SP-3 |
Tutti gli SDK di Google o di terze parti utilizzati sono aggiornati. Eventuali miglioramenti a questi SDK, come stabilità, compatibilità o sicurezza, devono essere disponibili per gli utenti in modo tempestivo.
Per gli SDK Google, valuta la possibilità di utilizzare gli SDK basati su Google Play Services, se disponibili. Questi SDK sono compatibili con le versioni precedenti, ricevono aggiornamenti automatici, riducono le dimensioni del pacchetto dell'app e utilizzano in modo efficiente le risorse sul dispositivo. Lo sviluppatore è responsabile dell'intero codebase dell'app, inclusi gli SDK di terze parti utilizzati. |
|
| PS-T5 | SP-3 | L'app non utilizza interfacce non SDK. | |
| PS-T6 | SP-2 | Nell'app di produzione non sono incluse librerie di debug. Ciò può causare problemi di prestazioni e sicurezza. | |
| Batteria | PS-B1 | BA-1 | L'app supporta correttamente le funzionalità di gestione dell'alimentazione introdotte in Android 6.0 (Doze e App Standby). Nel caso in cui la funzionalità di base venga interrotta dalla gestione dell'alimentazione, solo le app qualificate possono richiedere un'esenzione. Consulta la sezione Supporto per altri casi d'uso in Doze e App Standby.
Durante lo sviluppo, gli sviluppatori possono testare il comportamento di standby e Doze delle app utilizzando questi comandi ADB. In termini di utilizzo della batteria, gli sviluppatori possono utilizzare Android Studio Power Profiler o lo strumento Battery Historian, in combinazione con il lavoro in background pianificato, per diagnosticare un utilizzo imprevisto della batteria. |
Privacy e sicurezza
La tua app deve gestire i dati utente e le informazioni personali in modo sicuro, con il livello di autorizzazione appropriato.
Oltre a questo elenco di controllo, le applicazioni pubblicate sul Google Play Store devono rispettare anche le norme relative ai dati utente per proteggere la privacy degli utenti.
| Area | ID | Test | Descrizione |
|---|---|---|---|
| Autorizzazioni | SC-P1 | SC-4 | L'app richiede solo il numero minimo assoluto di autorizzazioni necessarie per supportare il caso d'uso in questione. Per alcune autorizzazioni, come la posizione, utilizza la posizione approssimativa anziché quella esatta, se possibile. |
| SC-P2 |
L'app richiede l'autorizzazione ad accedere a dati sensibili (ad esempio SMS, Registro chiamate o posizione) o a servizi a pagamento (ad esempio Dialer o SMS) solo se direttamente correlati ai casi d'uso principali delle app. Le implicazioni relative a queste autorizzazioni devono essere comunicate all'utente in modo ben visibile. A seconda di come utilizzi le autorizzazioni, potrebbe esserci un modo alternativo per soddisfare il caso d'uso della tua app senza fare affidamento sull'accesso a informazioni sensibili. Ad esempio, anziché richiedere autorizzazioni relative ai contatti di un utente, potrebbe essere più appropriato richiedere l'accesso utilizzando un intent implicito. |
||
| SC-P3 | CR-0 | L'app richiede le autorizzazioni di runtime nel contesto, quando viene richiesta la funzionalità, anziché in anticipo durante l'avvio dell'app. | |
| SC-P4 | CR-0 | L'app spiega chiaramente perché sono necessarie determinate autorizzazioni o segue il flusso consigliato per spiegare perché ha bisogno di un'autorizzazione. |
|
| SC-P5 | CR-0 | L'app deve degradare gradualmente quando gli utenti negano o revocano un'autorizzazione. L'app non deve impedire all'utente di accedervi del tutto. | |
| Dati e file | SC-DF1 | SC-1 | Tutti i dati sensibili sono archiviati nella memoria interna dell'app. |
| SC-DF2 | SC-10 | Nessun dato utente personale o sensibile viene registrato nel log di sistema o in un log specifico dell'app. | |
| SC-DF3 | L'app non utilizza ID hardware non reimpostabili, come l'IMEI, a scopo di identificazione. | ||
| Identità | SC-ID1 | CR-0 | L'app fornisce suggerimenti per la compilazione automatica delle credenziali dell'account e di altre informazioni sensibili, come i dati della carta di credito, l'indirizzo fisico e il numero di telefono. |
| SC-ID2 | CR-0 | Integra Gestore delle credenziali per Android per un'esperienza di accesso fluida che unifica il supporto per le passkey, l'identità federata e le password tradizionali. | |
| SC-ID3 | CR-0 | L'app supporta l'autenticazione biometrica per proteggere le transazioni finanziarie o le informazioni sensibili, come i documenti importanti dell'utente. | |
| Componenti app | SC-AC1 | SC-5 |
L'app imposta l'attributo Vengono esportati solo i componenti dell'applicazione che condividono dati con altre app o che devono essere richiamati da altre app. |
| SC-AC2 | CR-0 SC-4 |
Tutti gli intent e le trasmissioni seguono le best practice:
|
|
| SC-AC3 | SC-3 | Tutti i componenti che condividono contenuti tra le tue app utilizzano android:protectionLevel="signature" per le autorizzazioni personalizzate. Sono inclusi attività, servizi, ricevitori di trasmissioni e, in particolare, fornitori di contenuti.
Le app non devono fare affidamento sull'accesso a un elenco di pacchetti installati. L'accesso è stato limitato a partire da Android 11. |
|
| Reti | SC-N1 | SC-9 | Tutto il traffico di rete viene inviato tramite SSL. |
| SC-N2 | SC-6 | L'applicazione dichiara una configurazione di sicurezza di rete. | |
| SC-N3 | Se l'applicazione utilizza Google Play Services, il fornitore di sicurezza viene inizializzato all'avvio dell'applicazione. | ||
| WebView | SC-W1 | SC-6 | Non utilizzare setAllowUniversalAccessFromFileURLs() per accedere ai contenuti locali. Utilizza invece WebViewAssetLoader. |
| SC-W2 | SC-7 | I componenti WebView non devono utilizzare addJavascriptInterface() con contenuti non attendibili.
Su Android 6.0 e versioni successive, utilizza invece i canali di messaggi HTML. |
|
| Esecuzione | SC-E1 | L'app non carica dinamicamente codice dall'esterno dell'APK dell'app. Gli sviluppatori devono utilizzare gli Android App Bundle, che includono Play Feature Delivery e Play Asset Delivery.
A partire da agosto 2021, l'utilizzo degli Android App Bundle è obbligatorio per tutte le nuove app nel Google Play Store. |
|
| Crittografia | SC-C1 | L'app utilizza algoritmi crittografici efficaci forniti dalla piattaforma e un generatore di numeri casuali. Inoltre, l'app non implementa algoritmi personalizzati. |
Google Play
Assicurati che le tue app possano essere pubblicate su Google Play.
| Area | ID | Test | Descrizione |
|---|---|---|---|
| Norme | GP-P1 | GP-all | L'app rispetta rigorosamente i termini delle Norme relative ai contenuti per gli sviluppatori di Google Play e non offre contenuti inappropriati, non utilizza la proprietà intellettuale o il brand di altri e così via. |
| GP-P2 | GP-1 | Il livello di maturità dell'app è impostato in modo appropriato, in base alle linee guida per la classificazione dei contenuti. | |
| Pagina dei dettagli dell'app | GP-D1 | GP-1 GP-2 |
La grafica in primo piano dell'app segue le linee guida descritte in questo articolo del Centro assistenza. Assicurati che:
|
| GP-D2 | GP-1 | Gli screenshot e i video dell'app non mostrano né fanno riferimento a dispositivi non Android. | |
| GP-D3 | GP-1 | Gli screenshot o i video dell'app non rappresentano in modo ingannevole i contenuti e l'esperienza della tua app. | |
| Assistenza utenti | GP-X1 | GP-1 | I bug comuni segnalati dagli utenti nella scheda Recensioni della pagina Google Play vengono risolti se sono riproducibili e si verificano su molti dispositivi diversi. Se si verifica un bug solo su alcuni dispositivi, devi comunque risolverlo se questi dispositivi sono particolarmente popolari o nuovi. |
Configurazione di un ambiente di test
Ai fini della configurazione di un ambiente di test per questo elenco di controllo, ti consigliamo quanto segue:
- Concentrati sui test dell'emulatore: l'emulatore Android è un ottimo modo per testare la tua app con diverse versioni di Android e risoluzioni dello schermo. Devi configurare dispositivi emulati (AVD) per rappresentare le combinazioni di fattori di forma e hardware/software più comuni per la tua base utenti di destinazione. Oltre a testare gli smartphone, ti consigliamo di testare anche altri fattori di forma utilizzando i seguenti emulatori come minimo:
- Dispositivi pieghevoli: 7,6 pollici con display esterno (questo è elencato in Smartphone in AVD Manager).
- Tablet - Pixel C 9,94" (2560 px x 1800 px).
- Per il test delle notifiche delle app mobile, accoppia un dispositivo mobile / emulatore con l'emulatore Wear OS - Wear OS Round 1.84".
- Dispositivi hardware: l'ambiente di test deve includere un numero ridotto di dispositivi hardware reali che rappresentino i principali fattori di forma e le combinazioni hardware/software attualmente disponibili per i consumatori. Non è necessario eseguire test su tutti i dispositivi sul mercato. Concentrati invece su un numero ridotto di dispositivi rappresentativi, anche uno o due per fattore di forma.
- Laboratori di test dei dispositivi: puoi anche utilizzare servizi di terze parti, come Firebase Test Lab, per testare la tua app su una gamma più ampia di dispositivi.
- Esegui test con l'ultima versione di Android: oltre a testare le versioni rappresentative di Android per la tua base di utenti target, devi sempre eseguire test con l'ultima versione di Android (attualmente Android 14). In questo modo, le ultime modifiche del comportamento non influiranno negativamente sull'esperienza dell'utente.
Per una guida più completa sui test, inclusi test delle unità, test di integrazione e test dell'interfaccia utente, consulta le nozioni di base sui test di Android.
Procedure di test
Queste procedure di test ti aiutano a scoprire vari tipi di problemi di qualità nella tua app. Puoi combinare i test o integrare gruppi di test nei tuoi piani di test. Consulta le sezioni precedenti per i riferimenti che associano i criteri a queste procedure di test.
| Tipo | Test | Descrizione |
|---|---|---|
| Core Suite | CR-0 | Naviga in tutte le parti dell'app: tutte le schermate, le finestre di dialogo, le impostazioni e tutti i flussi utente.
|
| CR-1 | Da ogni schermata dell'app, premi il tasto Home del dispositivo o scorri verso l'alto nella navigazione tramite gesti, quindi riavvia l'app dalla schermata Tutte le app. | |
| CR-2 | Da ogni schermata dell'app, passa a un'altra app in esecuzione, quindi torna all'app in fase di test utilizzando il selettore delle app recenti. | |
| CR-3 | Da ogni schermata dell'app (e dalle finestre di dialogo), premi il pulsante Indietro o utilizza il gesto di scorrimento indietro. | |
| CR-5 | Da ogni schermata dell'app, ruota il dispositivo tra l'orientamento orizzontale e verticale e tra lo stato chiuso e aperto almeno tre volte. | |
| CR-6 | Passa a un'altra app per inviare l'app di test in background. Vai a Impostazioni e controlla se l'app di test ha servizi in esecuzione in background. In Android 4.0 e versioni successive, vai alla schermata App e trova l'app nella scheda "In esecuzione". | |
| CR-7 | Premi il tasto di accensione per mettere il dispositivo in modalità di sospensione, quindi premilo di nuovo per riattivare lo schermo. | |
| CR-8 | Configura un blocco schermo sul dispositivo. Premi il tasto di accensione per mettere il dispositivo in sospensione (e bloccarlo). Quindi, premi di nuovo il tasto di accensione per riattivare lo schermo e sbloccare il dispositivo. | |
| CR-9 | Attiva e osserva nel riquadro delle notifiche tutti i tipi di notifiche che l'app può visualizzare. Espandi le notifiche, se applicabile (Android 4.1 e versioni successive), e tocca tutte le azioni disponibili. | |
| CR-10 | Consulta il supporto per altri casi d'uso in modalità di sospensione e Standby delle app. | |
| Installare sulla scheda SD | SD-1 | Ripeti l'operazione per Core Suite con l'app installata su una scheda SD del dispositivo (se l'app supporta questo metodo di installazione).
Per spostare l'app sulla scheda SD, puoi utilizzare Impostazioni > Informazioni app > Sposta su scheda SD. |
| Prestazioni e stabilità | SP-1 | Esamina il file manifest Android e la configurazione di build per assicurarti che l'applicazione sia creata in base all'SDK più recente disponibile (targetSdk e compileSdk).
|
| SP-2 | Controlla il file build.gradle per individuare eventuali dipendenze obsolete. |
|
| SP-3 | Utilizza lo strumento lint di Android Studio per rilevare l'utilizzo di interfacce non SDK. Esistono anche altri metodi di test alternativi. | |
| Performance Monitoring | PM-1 | Ripeti Core Suite con la profilazione StrictMode abilitata.
Presta molta attenzione alla garbage collection e al suo impatto sull'esperienza utente. |
| Batteria | BA-1 | Ripeti Core Suite nei cicli di sospensione e standby delle app.
Presta molta attenzione a sveglie, timer, notifiche, sincronizzazioni e così via. Per requisiti e linee guida, consulta la sezione Test con sospensione e standby delle app. |
| Sicurezza | SC-1 | Esamina tutti i dati archiviati nella memoria esterna. |
| SC-2 | Esamina il modo in cui vengono gestiti ed elaborati i dati caricati da un archivio esterno. | |
| SC-3 | Esamina tutti i fornitori di contenuti definiti nel file manifest di Android. Assicurati che ogni fornitore abbia un protectionLevel appropriato.
|
|
| SC-4 | Esamina tutte le autorizzazioni richieste dalla tua app nel file manifest, in fase di runtime e nella schermata delle impostazioni dell'app (Impostazioni > Informazioni app) sul dispositivo. | |
| SC-5 | Esamina tutti i componenti dell'applicazione definiti nel file manifest di Android per lo stato di esportazione appropriato. La proprietà esportata deve essere impostata in modo esplicito per tutti i componenti. | |
| SC-6 | Esamina la configurazione della sicurezza di rete dell'app, assicurandoti che nessun controllo lint sulla configurazione non vada a buon fine. | |
| SC-7 | Per ogni WebView, vai a una pagina che richiede JavaScript. | |
| SC-8 | In ogni WebView, prova a navigare su siti e contenuti che non vengono caricati direttamente dalla tua app. | |
| SC-9 | Dichiara una configurazione di sicurezza di rete che disattiva il traffico di testo non criptato, quindi testa l'app. | |
| SC-10 | Esegui l'applicazione ed esercita tutte le funzionalità di base, osservando il log del dispositivo. Non devono essere registrate informazioni private dell'utente. | |
| Google Play | GP-1 | Accedi a Google Play Console per esaminare il tuo profilo sviluppatore, la descrizione dell'app, gli screenshot, la grafica in primo piano, la classificazione dei contenuti e il feedback degli utenti. |
| GP-2 | Scarica la grafica in evidenza e gli screenshot e ridimensionali in modo che corrispondano alle dimensioni di visualizzazione sui dispositivi e sui fattori di forma che prendi di mira. | |
| GP-3 | Esamina tutti gli asset grafici, i contenuti multimediali, il testo, le librerie di codice e gli altri contenuti inclusi nel download dell'app o del file di espansione. |
Test con StrictMode
Per i test delle prestazioni, ti consigliamo di attivare StrictMode nella tua app e di utilizzarlo per rilevare le operazioni che potrebbero influire sulle prestazioni, sugli accessi alla rete, sulle letture/scritture di file e così via. Cerca operazioni potenzialmente problematiche sia sul thread principale sia su
altri thread.
Puoi configurare un criterio di monitoraggio per thread utilizzando
StrictMode.ThreadPolicy.Builder
e abilitare tutto il monitoraggio supportato in
ThreadPolicy utilizzando
detectAll().
Assicurati di attivare la notifica visiva delle violazioni delle norme per
ThreadPolicy utilizzando
penaltyFlashScreen().