Un modo utile per valutare l'eccellenza delle app è esaminare i flussi di lavoro nella tua app e valutarne la fluidità e la sicurezza.
Questo elenco di controllo definisce un insieme di criteri di qualità essenziali e test associati per aiutarti a valutare la qualità della tua app. Alcuni di questi criteri potrebbero essere difficili da perdere e i test ti ricordano di includerli nei tuoi piani di test.
L'elenco di controllo evidenzia la qualità minima che tutte le app devono soddisfare. È probabile che i test andranno ben oltre quanto descritto qui.
Ogni voce nell'elenco di controllo della qualità ha un ID univoco che potrebbe esserti utile per comunicare con il tuo team. Puoi anche visualizzare la versione precedente di queste linee guida.
Esperienza visiva
La tua app deve fornire pattern visivi e di progettazione Android standard, ove opportuno, per un'esperienza utente coerente e intuitiva.
Area | ID | Test | Descrizione |
---|---|---|---|
Navigazione | VX-N1 | RP 3 | L'app supporta il browser Pulsante Indietro standard e non utilizza messaggi "Pulsante Indietro" personalizzati sullo schermo. |
VX-N2 | RP 3 | L'app supporta la navigazione tramite gesti per tornare indietro o 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 conserva lo stato dell'utente o dell'app quando esce dal primo piano e impedisce la perdita accidentale di dati a causa della navigazione all'indietro e di altre modifiche dello stato. Quando torni in primo piano, l'app deve ripristinare lo stato conservato ed eventuali transazioni stateful significative in attesa. Alcuni esempi sono: modifiche a campi modificabili, avanzamento del gioco, menu, video e altre sezioni dell'app o del gioco.
|
|
Notifiche | VX-S1 | RP 9 | Le notifiche sono conformi alle linee guida di Material Design. In particolare:
|
VX-S2 | RP 9 | Per le app di messaggistica, le app social e le conversazioni:
| |
UI e grafica | VX-U1 | RP 5 | L'app supporta gli orientamenti sia orizzontale sia verticale (se possibile) e piegatura/apertura.
Gli orientamenti espongono in gran parte le stesse caratteristiche e azioni e preservano la parità funzionale. Lievi cambiamenti a livello di contenuti o di visualizzazioni sono accettabili. |
VX-U2 | RP 5 | L'app utilizza l'intero schermo con entrambi gli orientamenti e non usa la modalità letterbox per tenere conto dell'orientamento, inclusi quelli di piegatura e di espansione.
Il letterbox è minore per compensare le piccole variazioni di geometria dello schermo. |
|
VX-U | RP 5 | L'app gestisce correttamente le transizioni rapide tra gli orientamenti del display e il posizionamento/piegatura del dispositivo senza problemi di rendering o di perdita dello stato. | |
Qualità visiva | VX-V1 | RP | L'app mostra elementi grafici, testo, immagini e altri elementi dell'interfaccia utente senza distorsioni, sfocature o pixeling notevoli.
|
VX-V2 | RP | L'app visualizza blocchi di testo e di testo in modo accettabile per tutte le lingue supportate.
|
|
VX-V3 | RP | I contenuti dell'app e tutti i contenuti web a cui l'app fa riferimento, supportano il tema scuro. | |
Accessibilità | VX-A1 | RP | Le dimensioni dei touch target devono essere pari ad almeno 48 dp. Scopri di più. |
VX-A2 | RP | Il testo dell'app e il contenuto in primo piano devono mantenere un rapporto di contrasto dei colori sufficientemente elevato con lo sfondo:
Scopri di più su colore e contrasto. |
|
VX-A3 | RP | Descrivi ogni elemento della UI, ad eccezione di 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 concentrazione dell'audio quando inizia la riproduzione dell'audio e abbandonare la messa a fuoco audio quando la riproduzione viene interrotta. | |
FN A5 | CR-0 | L'app deve gestire le richieste di altre app di messa a fuoco audio. Ad esempio, un'app potrebbe ridurre il volume di riproduzione quando un'altra app riproduce la voce. | |
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 Picture in picture. | |
FN-M3 | CR-0 | Se l'app codifica 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 durante la condivisione di contenuti. Può suggerire target non disponibili per le soluzioni personalizzate. |
Servizio in background | FN+B1 | RP-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 sui servizi in background. Questi non sono considerati come un buon utilizzo dei servizi in background:
Scopri come scegliere la soluzione giusta per il tuo lavoro. |
Prestazioni e stabilità
L'app deve fornire le prestazioni, la stabilità, la compatibilità e la reattività previste dagli utenti.
Area | ID | Test | Descrizione |
---|---|---|---|
Stabilità | PS-S1 | CR-all SD-1 |
L'app non arresto anomalo o blocca il thread dell'interfaccia utente che causa errori ANR (Android non risponde). Utilizza il report pre-lancio di Google Play per identificare potenziali problemi di stabilità. Dopo il deployment, presta attenzione alla pagina Android vitals nella console per gli sviluppatori di Google Play. |
Prestazioni | PS1 | CR-all SD-1 |
Se l'app richiede più di due secondi, viene caricata rapidamente o fornisce all'utente un feedback sullo schermo (indicatore di avanzamento o segnale simile). |
PS2 | CR-all SD-1 |
Le app dovrebbero eseguire il rendering dei frame ogni 16 ms per raggiungere 60 frame al secondo. Gli sviluppatori possono utilizzare l'opzione Rendering HWUI del profilo durante i test. Se si verificano problemi, sono disponibili strumenti per diagnosticare il rendering lento. | |
PS-P3 | PM 1 | Con StrictMode attivato (vedi StrictMode Test, di seguito), non lampeggiano in rosso (avvisi di rendimento da StrictMode) durante il test dell'app. Gli eventuali lampeggi rossi indicano comportamenti dannosi relativi allo spazio di archiviazione, all'accesso di rete o alla fuga di memoria. | |
SDK | PS1-T1 | CR-0 | L'app esegue la versione pubblica più recente della piattaforma Android senza arresti anomali o con un impatto grave sulla funzionalità di base. |
PS2-T2 | SP-1 | L'app sceglie come target l'SDK Android più recente necessario per allinearsi ai requisiti di Google Play impostando il valore targetSdk . |
|
PS3-T3 | SP-1 | L'app è realizzata con l'SDK Android più recente impostando il valore compileSdk . |
|
PS4-T4 | SP-2 SP-3 |
Qualsiasi SDK di Google o di terze parti utilizzato è aggiornato. Eventuali miglioramenti di questi SDK, come stabilità, compatibilità o sicurezza, dovrebbero essere disponibili agli utenti in modo tempestivo.
Per gli SDK Google, potresti usare SDK basati su Google Play Services, se disponibili. Questi SDK sono compatibili con le versioni precedenti, ricevono aggiornamenti automatici, riducono le dimensioni dei pacchetti dell'app e sfruttano in modo efficiente le risorse sul dispositivo. Lo sviluppatore è responsabile dell'intera codebase dell'app, inclusi eventuali SDK di terze parti utilizzati. |
|
PS-T5 | SP-3 | L'app non utilizza interfacce non SDK. | |
PS-T6 | SP 2 | Nessuna libreria di debug è inclusa nell'app in produzione. Questo può causare problemi di prestazioni e di sicurezza. | |
Batteria | PS-B1 | BA1 | L'app supporta correttamente le funzionalità di gestione dell'alimentazione introdotte in Android 6.0 (Doze e App Standby). Se la funzionalità di base viene interrotta dalla gestione dell'alimentazione, solo le app idonee possono richiedere un'esenzione. Consulta la sezione Assistenza per altri casi d'uso in Sospensione e Standby delle app.
Durante lo sviluppo, gli sviluppatori possono testare il comportamento di standby e sospensione delle app utilizzando questi comandi ADB. In termini di utilizzo della batteria, gli sviluppatori possono usare lo strumento Profilo energia Android Studio o lo strumento Storico batteria in combinazione con i lavori in background pianificati per diagnosticare l'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 | SC1-1 | SC-4 | L'app richiede solo il numero minimo assoluto di autorizzazioni di cui ha bisogno per supportare il suo caso d'uso. Per alcune autorizzazioni, ad esempio la posizione, puoi usare la posizione approssimativa anziché una posizione precisa, se possibile. |
SC-P2 |
L'app richiede l'autorizzazione ad accedere a dati sensibili (ad esempio SMS, registro chiamate o località) o servizi a pagamento (ad esempio Telefono o SMS) soltanto se direttamente correlato ai casi d'uso principali delle app. Le implicazioni relative a queste autorizzazioni devono essere divulgate in modo ben visibile all'utente. 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 alle 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, ovvero quando viene richiesta la funzionalità, anziché in anticipo durante l'avvio dell'app. | |
SC-P4 | CR-0 | L'app indica chiaramente perché sono necessarie determinate autorizzazioni o segui la procedura consigliata per spiegare perché è necessaria un'autorizzazione. |
|
SC-P5 | CR-0 | L'app deve degradare con cura quando gli utenti negano o revocano un'autorizzazione. L'app non deve impedire completamente all'utente di accedervi. | |
Dati e file | SC-DF1 | SC-1 | Tutti i dati sensibili sono archiviati nella memoria interna dell'app. |
SC-DF | SC-10 | Nessun dato utente personale o sensibile viene registrato nel log di sistema o in quello specifico dell'app. | |
SC-DF | 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 altre informazioni sensibili, come i dati della carta di credito, l'indirizzo fisico e il numero di telefono. |
SC-ID2 | CR-0 | Integra One Tap per Android per un'esperienza di accesso ottimale. | |
SC-ID3 | CR-0 | L'app supporta l'autenticazione biometrica per proteggere le transazioni finanziarie o informazioni sensibili, come i documenti importanti degli utenti. | |
Componenti app | SC-AC1 | SC 5 |
L'app imposta Vengono esportati solo i componenti di applicazioni 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 | Per le autorizzazioni personalizzate, tutti i componenti che condividono contenuti tra le tue app usano android:protectionLevel="signature" . Sono incluse le attività, i servizi, i ricevitori di trasmissione e soprattutto i fornitori di contenuti.
Le app non devono affidarsi all'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 per la sicurezza della rete. | |
SC-N3 | Se l'applicazione utilizza Google Play Services, il provider di sicurezza viene inizializzato all'avvio dell'applicazione. | ||
WebView | SC-W1 | SC-6 | Non utilizzare setAllowUniversalAccessFromFileURLs() per accedere a 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 il codice dall'esterno dell'APK dell'app. Gli sviluppatori dovrebbero usare 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 del Google Play Store. |
|
Crittografia | SC-C1 | L'app utilizza potenti algoritmi di crittografia 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 | GP10 | 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 utenti e così via. |
GP-P2 | GP-1 | Il livello di maturità dell'app è impostato correttamente in base alle Linee guida per la classificazione dei contenuti. | |
Pagina dei dettagli dell'app | GP-D1 | GP-1 GP-2 |
L'immagine in primo piano dell'app segue le linee guida descritte in questo articolo del Centro assistenza. Accertati 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 i contenuti e l'esperienza dell'app in modo fuorviante. | |
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 il bug si verifica solo su pochi dispositivi, dovresti comunque risolvere il problema se i 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, consigliamo quanto segue:
- Ideale per eseguire test sugli emulatori. L'emulatore Android è un ottimo modo per testare la tua app con versioni di Android e risoluzioni dello schermo diverse. Dovresti configurare dispositivi emulati per rappresentare le combinazioni più comuni di fattori di forma e hardware/software per la tua base utenti target. Oltre ai test per i telefoni, ti consigliamo anche di testare almeno i seguenti fattori di forma utilizzando i seguenti emulatori:
- Pieghevoli - Pieghevole da 7,6" con display esterno (elencato sotto i telefoni in AVD Manager).
- Tablet - Pixel C 9,94" (2560 x 1800 px).
- Per eseguire test sulle app per dispositivi mobili, accoppia un dispositivo mobile / emulatore con l'emulatore di Wear OS - Wear OS rotondo da 1,84".
- Dispositivi hardware. L'ambiente di test deve includere un numero limitato di dispositivi hardware reali che rappresentano i fattori chiave di forma e le combinazioni hardware/software attualmente disponibili per i consumatori. Non è necessario eseguire test su tutti i dispositivi sul mercato, bensì è consigliabile concentrarsi su un numero limitato di dispositivi rappresentativi, anche utilizzando uno o due dispositivi per fattore di forma.
- Lab 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 il test con l'ultima versione di Android: oltre a testare le versioni di Android rappresentative della tua base utenti target, ti consigliamo di eseguire sempre il test rispetto all'ultima versione di Android (attualmente Android 11). Ciò garantisce che le ultime modifiche del comportamento non influiscano negativamente sull'esperienza dell'utente.
Per indicazioni più complete sui test, tra cui test delle unità, test di integrazione e test dell'interfaccia utente, consulta i concetti fondamentali di Android sui test.
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 insieme nei tuoi piani di test. Consulta le sezioni precedenti per i riferimenti che associano i criteri a queste procedure di test.
Tipo | Test | Descrizione |
---|---|---|
Suite principale | CR-0 | Passa a tutte le parti dell'app: schermate, finestre di dialogo, 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 di app Recenti. | |
CR-3 | In ogni schermata dell'app (e finestre di dialogo), premi il pulsante Indietro o usa il gesto di scorrimento indietro. | |
CR-5 | Dalla schermata di ogni app, ruota il dispositivo in orizzontale, verticale e piegato / piegato almeno tre volte. | |
CR-6 | Passa a un'altra app per inviare l'app di test in background. Vai a Impostazioni e controlla se nell'app di test sono presenti 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 avviare la modalità di sospensione del dispositivo, quindi premi di nuovo il tasto di accensione per riattivare lo schermo. | |
CR-8 | Imposta un blocco schermo sul dispositivo. Premi il tasto di accensione per attivare la sospensione (il dispositivo viene bloccato). Quindi, premi di nuovo il tasto di accensione per riattivare lo schermo e sbloccare il dispositivo. | |
CR-9 | Attiva e osserva nel riquadro a scomparsa delle notifiche tutti i tipi di notifiche che possono essere visualizzati dall'app. Espandi le notifiche, ove applicabile (Android 4.1 e versioni successive) e tocca tutte le azioni disponibili. | |
CR-10 | Esamina l'assistenza per altri casi d'uso in modalità sospensione e standby delle app. | |
Installa su scheda SD | SD-1 | Ripeti la funzionalità Core Suite con l'app installata sulla 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 sulla scheda SD. |
Prestazioni e stabilità | SP-1 | Esamina il file manifest di Android e la configurazione della build per assicurarti che l'applicazione sia basata sull'ultimo SDK disponibile (targetSdk e compileSdk ).
|
SP-2 | Verifica l'eventuale presenza di dipendenze obsolete nel file build.gradle . |
|
SP-3 | Utilizza lo strumento Lint di Android Studio per rilevare l'utilizzo dell'interfaccia senza SDK. Esistono anche altri metodi di test alternativi. | |
Monitoraggio del rendimento | PM-1 | Ripeti Core Suite con la profilazione StrictMode abilitata.
Presta attenzione alla garbage collection e al suo impatto sull'esperienza utente. |
Batteria | BA-1 | Ripeti la Suite principale durante i cicli di sospensione e standby delle app.
Fai attenzione a sveglie, timer, notifiche, sincronizzazioni e così via. Consulta la pagina Test con Doze e App Standby per conoscere i requisiti e le linee guida. |
Sicurezza | SC-1 | Esamina tutti i dati archiviati in un'unità di archiviazione esterna. |
SC 2 | Verifica come vengono gestiti ed elaborati i dati caricati dall'unità di archiviazione esterna. | |
SC-3 | Esamina tutti i fornitori di contenuti definiti nel file manifest di Android. Assicurati che ogni fornitore abbia un protectionLevel appropriato.
|
|
SC 4 | Rivedi tutte le autorizzazioni richieste dall'app, nel file manifest, in fase di esecuzione e nella schermata delle impostazioni dell'app (Impostazioni > Informazioni app) sul dispositivo. | |
SC 5 | Esamina tutti i componenti delle applicazioni 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 | Controlla la configurazione di Sicurezza della rete dell'app, per assicurarti che nessun controllo lint non vada a buon fine. | |
SC-7 | Per ogni WebView, vai a una pagina che richiede JavaScript. | |
SC 8 | In ogni WebView, prova a visitare siti e contenuti che non vengono caricati direttamente dalla tua app. | |
SC 9 | Dichiara una configurazione di sicurezza di rete che disattiva il testo chiaro, 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 degli utenti. | |
Google Play | GP-1 | Accedi alla Console per gli sviluppatori di Google Play per esaminare il tuo profilo sviluppatore, la descrizione dell'app, gli screenshot, l'immagine in primo piano, la classificazione dei contenuti e il feedback degli utenti. |
GP2 | Scarica l'immagine e gli screenshot delle funzionalità e faine lo scale down per adattarli alle dimensioni di visualizzazione sui dispositivi e ai fattori di forma scelti come target. | |
GP3 | Esamina tutte le risorse grafiche, 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 utilizzarla per individuare operazioni che potrebbero influire su prestazioni, accessi di rete,
letture/scritture di file e così via. Cerca le operazioni potenzialmente problematiche sia sul thread principale che 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 di violazioni delle norme per
ThreadPolicy
utilizzando
penaltyFlashScreen()
.