Suggerimenti per lo sviluppo di un'app Android: le mie lezioni apprese

Pubblicato: 2022-03-11

Ciao! Sono Ivan e sono uno sviluppatore di app Android da un po' di tempo ormai. O almeno così sembra. Ai tempi (stiamo parlando del 2009), Android era solo un bambino e da allora ho visto crescere l'omino verde . Temo che qualche tempo fa Android sia riuscito a superarmi.

Al giorno d'oggi, Android non è solo su decine di migliaia di telefoni e tablet diversi. È al tuo polso, nel tuo soggiorno, in macchina, e non appena inizieremo ad assegnare indirizzi IP a oggetti inanimati, sarà praticamente ovunque intorno a noi. Un sacco di terreno da coprire anche per uno sviluppatore Android esperto!

Inoltre ci sono oltre un milione di app solo su Google Play, senza contare Amazon AppStore o mercati a cui generalmente non siamo interessati, come la Cina. Non dimentichiamo le innumerevoli società di sviluppo di app mobili che generano miliardi di entrate ogni anno.

Quindi, come può uno sviluppatore indipendente creare un'app di successo in questo enorme mercato con grandi attori? Non ne ho idea, non ho creato un'app di successo! Ma ne ho fatto uno carino e vorrei condividere la mia storia con te.

Lezione 1: Unisci i punti

Il successo (di solito) non avviene dall'oggi al domani e questa non è la mia prima app. Ne ho alcuni che vanno da successi inaspettati durante il fine settimana come il Calendario Ortodosso Macedone , con oltre 30.000 utenti in una lingua che non più di 4 milioni di persone possono capire, a fallimenti di maggior successo come TweetsPie , un'app con un'ampia copertura mediatica e un terribile base di utenti di poco più di 600 utenti attivi. Molte lezioni lì!

Mentre queste app mi hanno aiutato a capire un po' meglio la mente della "creatura sfuggente chiamata Utente", quello che mi ha ispirato è stato un progetto di due ore. Originariamente sviluppata per fare di me un milionario, una volta che 1.428.571 utenti hanno acquistato l'app poiché Google prende 30 centesimi da ogni dollaro, l'app Dollar è stata creata per testare il mio account commerciante.

Non sapevo che anni dopo riceverò un'e-mail da una mamma felice che affermava che era il miglior dollaro che avesse mai speso da quando suo figlio sorrideva ogni volta che la mia app lo abbracciava.

Lo sviluppo di app Android per principianti può essere semplice e divertente se ridimensionato in modo efficace.

Ed è così che è nata un'idea! Perché non usare il bisogno umano fondamentale per un abbraccio e renderlo carino? Rendilo per un pubblico specifico, interattivo, stimolante, divertente da usare e ancora più divertente da condividere.

Lezione 2: Comprendere l'Android Market

Tutte le cose che ho menzionato sopra sono state aggiunte a un'app per sfondi animati. Le basi non sono così difficili da indovinare. Android ha una quota di mercato maggiore rispetto a iOS, ma gli utenti iOS acquistano di più. Le app di messaggistica sono molto popolari, ma i giochi freemium superano i guadagni. Cina, India, Brasile e Russia sono mercati emergenti, ma mancano di abitudini di spesa. Puoi leggere l'App Annie Index per ulteriori approfondimenti.

Quindi, come si inserisce un'app per sfondi animati in questo? Prima di tutto, elimina la maggior parte delle piattaforme poiché uno sfondo animato è una cosa Android. In secondo luogo, questa funzione è stata aggiunta in Android 2.1, quindi ha una vasta comunità e alcuni bellissimi esempi. In particolare Paperland e Muzei open source di Roman Nurik, probabilmente il miglior punto di riferimento per lo sviluppo di Android.

Sebbene ci siano molti sfondi live là fuori, la maggior parte di essi rientra nella categoria scenico/meteo e pochissimi rientrano nella categoria del sovraccarico di carineria . Questo è qualcosa che volevamo cambiare e offrire qualcosa che ti dia un sorriso ogni volta che sblocchi il telefono, anche se lo hai sbloccato per un motivo completamente diverso. Ti abbiamo regalato un dolce fagotto di gioia per abbracciarti prima di andare a letto la sera, o quando spegni la sveglia al mattino. E ancora meglio, rendilo personale e personalizzabile.

Senza ulteriori indugi, e prima di entrare nei dettagli tecnici, vi presento con orgoglio: Ooshies - The Live Wallpaper

Ooshies è il nome della mia app per Android. Potrebbe non aver avuto successo, ma mi ha aiutato a imparare le lezioni necessarie per scrivere questa guida per sviluppatori Android principianti.

È dotato di:

  • app gratuita per sfondi animati che ti dà abbracci
  • 12 ooshies unici tra cui scegliere
  • contenuti gratuiti, sbloccabili e acquistabili
  • attuali aggiornamenti meteo
  • accesso social e sincronizzazione dei dati
  • auguri di stagione
  • tante sorprese
  • un gatto ninja
  • abbiamo parlato degli abbracci?

Le app Android di successo a volte ti fanno sorridere.

Lezione 3: Prova a realizzarlo

Ooshies sembrava un'idea per app Android piuttosto semplice. Dipingi uno sfondo, sovrapponi delle nuvole e delle stelle, metti sopra un orso con un palloncino e sei a posto. Ma no, è Android! Ciò che sembra facile è spesso piuttosto difficile e tendiamo a ripetere gli stessi errori comuni più e più volte. Ecco una rapida carrellata delle sfide che ho dovuto affrontare:

  1. Accelerazione hardware: perché disegnare usando la CPU quando la GPU è molto più brava? Bene, si scopre che il disegno di bitmap su una tela non può essere accelerato dall'hardware. Almeno non per il momento.

  2. OpenGL - se vogliamo l'accelerazione hardware dobbiamo usare OpenGL ES o ancora meglio un framework che faccia la maggior parte del lavoro per noi.

  3. Caricamento bitmap: un noto problema di consumo di memoria. Abbiamo bisogno di allocare 1 byte [0-255] di memoria, per ogni canale in #ARGB, per visualizzare un singolo pixel. Inoltre le immagini che utilizziamo spesso hanno risoluzioni maggiori rispetto al display del dispositivo. Caricarli tutti risulterà rapidamente in OutOfMemroyException.

  4. Lanciatori domestici: lo sfondo animato sarà ospitato nel processo di avvio domestico e diversi lanciatori tendono a fornire richiami diversi al servizio di sfondi animati (in particolare Nova e TouchWiz).

  5. Durata della batteria: se non eseguiti correttamente, gli sfondi live e i widget possono consumare molta batteria. Con tutto il ronzio sulla terribile durata della batteria di Lollipop (Android 5.0), la prima app ad andare sarà lo sfondo animato.

Quindi, sovrapporre una bitmap, dipingerla su una tela e poi cambiare fotogramma al tocco per abbracciare, non sembra un grosso problema, anche se è fatto sulla CPU, giusto? Esatto, non è un problema. Ma chi vuole uno sfondo live statico? Batte lo scopo. Lo sfondo dovrebbe rispondere ai tuoi tocchi, dovrebbe muoversi mentre scorri le schermate iniziali, dovrebbe eseguire atti casuali di gentilezza e farti sentire felice.

E c'è un trucco di sviluppo Android per questo. C'è un termine chiamato effetto di parallasse per aggiungere profondità in uno spazio bidimensionale. Immagina di guidare un'auto. La casa più vicina a te si muove più velocemente della montagna in lontananza. Lo stesso effetto può essere ottenuto spostando gli oggetti a velocità diverse su una tela. Sebbene siano tutti sullo stesso piano, il tuo cervello percepisce gli oggetti che si muovono più velocemente come più vicini a te. Proprio come l'aggiunta di ombre discendenti, l'effetto di parallasse aggiunge un asse z.

Ed è qui che si scatena l'inferno! Sulla maggior parte dei dispositivi che spostano l'Ooshie, la sovrapposizione del tempo e lo sfondo, a velocità diverse, producono un calo significativo del frame rate. Ecco come viene disegnato un singolo frame:

 canvas.drawBitmap(background, 0 - offsetX / 4, 0, null); canvas.drawBitmap(weatherOverlay, 0 - offsetX / 2, 0, null); if (!validDoubleTap) { canvas.drawBitmap(ooshieNormal, positionX - offsetX, positionY, null); } else { canvas.drawBitmap(ooshieTapped, positionX - offsetX, positionY, null); }

L' offset è una percentuale della distanza percorsa dall'utente. È una richiamata fornita dal motore di sfondo:

 @Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset){ super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); // athe current offset should be a fraction of the screen offset to achieve parallax if (!isPreview()) { float newXOffset = xOffset * 0.15f; wallpaperDrawHelper.setOffsetX(newXOffset); if (isVisible() && hasActiveSurface) { wallpaperDrawHelper.drawFrame(false); } } }

Devo notare che tutto ciò non sarebbe necessario se sapessi come lavorare con OpenGL! È nella mia lista TODO , poiché qualsiasi cosa più complessa di quella che abbiamo ora richiederà un'accelerazione hardware. Ma, per il momento, devo lavorare di più, non in modo più intelligente (sono aperto a suggerimenti nei commenti). Quindi ecco cosa abbiamo fatto:

Lezione 4: Lavora con quello che hai

Come grandi sostenitori minSdk=15 , abbiamo eliminato fin dall'inizio tutti i dispositivi 2.x. Lo sforzo per mantenere la compatibilità con le versioni precedenti è maggiore delle possibili entrate derivanti dagli utenti che non sono in grado/non vogliono aggiornare i propri telefoni. Quindi, nella maggior parte dei casi, saremo in grado di ottenere un'esperienza fluida con un'opzione aggiuntiva per disabilitare il parallasse, se lo si desidera.

Per questa guida allo sviluppo di Android, volevo dare la possibilità di disabilitare il parallasse.

Un'altra grande ottimizzazione è il modo in cui gestiamo le bitmap. Un effetto di parallasse molto simile può essere ottenuto disegnando due bitmap invece di tre:

  1. Sovrapposizione Ooshie - bitmap Ooshie tagliata e accuratamente ridimensionata (può essere accessoriata)

  2. Sovrapposizione combinata: una bitmap combinata di sfondo e meteo che si muove con una frazione della velocità di Ooshie

Questo trucco di sviluppo Android consente di risparmiare memoria e accelerare il tempo di disegno, per un leggero degrado dell'effetto di parallasse.

Durante lo scorrimento delle schermate iniziali, i fotogrammi verranno disegnati abbastanza spesso (idealmente più di 30 volte al secondo). È fondamentale non disegnarli quando la schermata iniziale non è visibile (alcune schermate di blocco, alcune app drawer, apertura/cambio di app ecc.) per ridurre al minimo l'utilizzo della CPU.

Tutto ciò è strettamente legato agli aggiornamenti meteorologici. Inizialmente c'era un'attività ripetuta, che veniva eseguita ogni ora o due, per sincronizzare il tempo, ma era davvero eccessivo. Se l'utente non riesce a vedere lo sfondo, le informazioni meteo sono irrilevanti. Quindi ora, gli aggiornamenti meteo si verificano solo quando lo sfondo è visibile.

 long lastUpdate = prefStore.getLong(SharedPrefStore.Pref.WEATHER_TIMESTAMP); if (System.currentTimeMillis() - lastUpdate > Consts.WEATHER_UPDATE_INTERVAL){ // update the weather if obsolete Intent intent = new Intent(getApplicationContext(), WeatherUpdateService.class); startService(intent); }

Quindi, in pratica, ecco l'elenco di controllo per un disegno bitmap software fluido ottimizzato per la memoria:

  1. Combina le bitmap una volta
  2. Disegna meno bitmap
  3. Ridisegna solo su richiesta
  4. Evita le attività in background
  5. Offri agli utenti un certo controllo sul processo

Lezione 5: Prova. Test. Test

Non posso sottolineare quanto sia importante! Mai, ripeto MAI , rilascia la tua app prima di testarla! E, non intendo dire che dovresti fare il test. Hai scritto il codice, sai come funziona e influisci sul risultato conoscendo le aspettative. Non sto parlando di JUnit testing (sebbene consigliato), ma di implementazioni graduali, ad esempio alpha e beta testing.

Se ti piace lo sviluppo di software Android, i termini sono semplici, ma ecco una rapida carrellata:

  1. Alpha tester: un piccolo gruppo di persone composto dai tuoi compagni di squadra e da persone del settore, preferibilmente sviluppatori Android. È probabile che abbiano dispositivi di fascia alta e giocheranno con le opzioni degli sviluppatori. Ti invieranno tracce di stack, segnalazioni di bug e ti daranno anche alcuni suggerimenti e trucchi per l'ottimizzazione del codice/interfaccia utente. Perfetto per le prime versioni con funzionalità parziali/mancanti.

  2. Beta tester: un pubblico molto più ampio con vari dati demografici. Le versioni stabili dovrebbero essere pubblicate qui. Anche se il tuo livello da ninja è troppo alto, non puoi mai prevedere, per non parlare di tutte le possibili distribuzioni Android e il modo in cui le persone usano i loro telefoni.

Una volta superato l'alfa, ho pensato che avessimo finito. Ma, ragazzo, mi sbagliavo?! Si è scoperto che non tutti gli utenti Android hanno dispositivi Nexus con il software più recente! Chi lo saprebbe? :)

Ecco alcuni problemi di sviluppo Android basati su questa rivelazione:

  1. Diversi lanciatori hanno diverse schermate iniziali predefinite, di solito la prima o quella centrale e, per quanto ne so, non c'è modo di sapere la sua posizione.

  2. È difficile centrare l'Ooshie senza conoscere la posizione predefinita della schermata iniziale, quindi il dispositivo di scorrimento delle impostazioni per regolare l'offset della parallasse.

  3. Un utente medio non sa cosa significhi l' offset di parallasse : nella pagina delle impostazioni dovrebbe essere utilizzata una terminologia molto più semplice.

  4. Un utente casuale suggerirà la tua prossima funzionalità.

Quindi vorrei ringraziare tutti i nostri beta tester per il duro lavoro svolto. Spero che ottenere tutte le ultime funzionalità prima di chiunque altro sia una ricompensa decente per la loro dedizione. Se lo desideri, puoi anche far parte della nostra community beta di Google+.

Il beta test è un passaggio fondamentale da tenere a mente per i principianti Android quando iniziano a programmare le loro app Android di successo.

Lezione 6: Lascia che i dati parlino

Realizzare un'app Android che si distingua oggi è un po' più difficile che creare un'app calcolatrice, quando nel 2009 non ce n'erano. Realizzare l'app perfetta è difficile. Soprattutto perché la perfezione è negli occhi di chi guarda. Ciò che è buono per me, non significa necessariamente che sia buono per te. Ecco perché è importante far crescere l'app. La nostra tabella di marcia per le nuove funzionalità mostra che abbiamo abbastanza lavoro per l'intero 2015. Tra le altre cose includeremo presto:

  1. Suoni
  2. Sfondi stagionali
  3. Personalizzazioni (colore di sfondo, pacchetti meteo, skin ooshie, ecc.)
  4. Ooshies specifici per regione (es. babushka)
  5. Un sacco di nuove sciocchezze e modi per sbloccarle

Ora, potremmo aver mantenuto l'app in versione beta fino a quando tutto non sarà terminato, ma in questo modo stiamo buttando via dati preziosi. Non tutti i beta tester dedicheranno una parte della loro giornata a inviarti il ​​feedback. È qui che puoi trarre vantaggio dall'utilizzo di strumenti per ottenere il feedback. Puoi utilizzare Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA, ecc. per raccogliere dati sull'utilizzo.

Ad esempio, analizzando i dati abbiamo notato che gli utenti non fanno molto clic sul pulsante delle impostazioni, quindi lo abbiamo reso più evidente e abbiamo aggiunto un rapido tutorial per modificare le impostazioni.

Sebbene si tratti di un processo in background, può essere utilizzato per migliorare ulteriormente l'esperienza dell'utente. Perché non mostrare all'utente quante volte:

  1. ha ricevuto un abbraccio
  2. quanti giorni di pioggia sono stati rallegrati da un sorriso
  3. quanti tocchi sono stati necessari per sbloccare un Ooshie con un minigioco
  4. quanti amici hanno installato l'app grazie a te

Ogni guida allo sviluppo di Android dovrebbe sottolineare l'importanza di Google Analytics nell'ottimizzazione della tua app!

Questo è importante perché fornisce conseguenze per le loro azioni. Non commettere lo stesso errore che fa il nostro sistema educativo, rendendo gli utenti consumatori di contenuti passivi. Rendili responsabili. Offri loro la possibilità di controllare i propri dispositivi e creare la propria esperienza personale. Se riesci a impacchettare tutto questo in un pacchetto carino che ruba un sorriso al primo splash, non è troppo inverosimile chiedere all'utente favori di spam per lo sblocco dei contenuti.

Alla fine, devi far evolvere lo sviluppo della tua app Android sulla base di questi dati come guida. Sebbene sia destinata principalmente a mamme/bambini, questa app potrebbe diventare popolare in altri gruppi demografici. Potrebbe non rientrare nella nostra visione originale, ma le esigenze degli utenti devono essere soddisfatte. Altrimenti troveranno qualcuno che può.

Conclusione

Torniamo al mio fallimento di maggior successo TweetsPie. Nonostante un paio di premi e l'enorme copertura mediatica, l'app non è riuscita a trattenere i suoi utenti (i motivi per cui vanno oltre lo scopo di questo articolo).

Il successo non è sempre evidente. Grazie a tutta l'esperienza ho imparato molto. Ho tenuto almeno una dozzina di conferenze su Come (non) fallire come startup su vari eventi e hackathon, e sono riuscito a ottenere un paio di clienti da Toptal.

Ancora più importante, cerco di non ripetere gli stessi errori di sviluppo Android con Ooshies seguendo i suggerimenti e i trucchi di questa guida.

Per concludere questa lunga guida, ciò che definiamo un successo è, in una fase successiva, strettamente legato a ciò che ci eravamo posti come obiettivo all'inizio. La misura del successo più comune è, ovviamente, fare molti soldi. Non importa se la tua app ce la fa o meno, devi provare a realizzarla e, credimi, alla fine diventerai una persona migliore (si spera che riesca ad imparare OpenGL). Farai nuove amicizie, pochi nemici e, se sei abbastanza fortunato/intelligente, renderai felici molti utenti.

Puoi controllare il nostro sito Web o scaricare Ooshies per provarlo.