Sfaturi pentru dezvoltarea unei aplicații Android: Lecțiile mele învățate

Publicat: 2022-03-11

Bună! Sunt Ivan și sunt dezvoltator de aplicații Android de ceva vreme. Sau așa pare. Pe vremuri (vorbim despre 2009), Android era doar un copil și de atunci l-am văzut pe Micul Omul Verde crescând. Mă tem că acum ceva timp, Android a reușit să mă depășească.

În zilele noastre, Android nu este doar pe zeci de mii de telefoane și tablete diferite. Este la încheietura mâinii, în camera de zi, în mașină și, de îndată ce începem să atribuim adrese IP obiectelor neînsuflețite, va fi aproape peste tot în jurul nostru. O mulțime de teren de acoperit chiar și pentru un dezvoltator Android experimentat!

De asemenea, există peste un milion de aplicații doar pe Google Play, fără a lua în calcul Amazon AppStore sau piețele care nu ne interesează în general, cum ar fi China. Să nu uităm de nenumărate companii de dezvoltare de aplicații mobile care generează miliarde de venituri în fiecare an.

Deci, cum poate un dezvoltator independent să creeze o aplicație de succes pe această piață uriașă cu jucători mari? Habar nu am, nu am făcut o aplicație de succes! Dar, am făcut unul drăguț și aș vrea să vă împărtășesc povestea mea.

Lecția 1: Conectați punctele

Succesul (de obicei) nu se întâmplă peste noapte și aceasta nu este prima mea aplicație. Am unele care variază de la succese neașteptate de dezvoltare în timpul săptămânii, cum ar fi Calendarul ortodox macedonean , cu peste 30.000 de utilizatori într-o limbă pe care nu o pot înțelege mai mult de 4 milioane de oameni, până la eșecuri mai reușite, cum ar fi TweetsPie , o aplicație cu acoperire mediatică intensă și un teribilă bază de utilizatori de puțin peste 600 de utilizatori activi. Multe lecții acolo!

În timp ce aceste aplicații m-au ajutat să înțeleg puțin mai bine mintea „creaturii evazive numită Utilizatorul”, cea care m-a inspirat a fost un proiect de două ore. Dezvoltată inițial pentru a mă face milionar, odată ce 1.428.571 de utilizatori au achiziționat aplicația, deoarece Google ia 30 de cenți din fiecare dolar, aplicația Dollar a fost creată pentru a-mi testa contul de comerciant.

Nu știam că ani mai târziu voi primi un e-mail de la o mamă fericită care spune că a fost cel mai bun dolar pe care l-a cheltuit vreodată de când băiatul ei zâmbea de fiecare dată când aplicația mea l-a îmbrățișat.

Dezvoltarea de aplicații Android pentru începători poate fi simplă și distractivă atunci când este scalată eficient.

Și așa s-a născut o idee! De ce să nu folosiți nevoia umană fundamentală pentru o îmbrățișare și să o faceți drăguță? Faceți-l pentru un anumit public, interactiv, provocator, distractiv de folosit și chiar mai distractiv de împărtășit.

Lecția 2: Înțelegeți Android Market

Toate lucrurile pe care le-am menționat mai sus s-au adăugat la o aplicație de fundal animat. Elementele de bază nu sunt atât de greu de ghicit. Android are o cotă de piață mai mare decât iOS, dar utilizatorii iOS cumpără mai mult. Aplicațiile de mesagerie sunt extrem de populare, dar jocurile freemium depășesc câștigurile. China, India, Brazilia și Rusia sunt piețe emergente, dar nu au obiceiuri de cheltuieli. Puteți citi App Annie Index pentru mai multe informații.

Deci, cum se potrivește o aplicație de fundal animat în asta? În primul rând, elimină majoritatea platformelor, deoarece un tapet live este un lucru Android. În al doilea rând, această caracteristică a fost adăugată în Android 2.1, așa că are o comunitate mare și destul de multe exemple frumoase. Cel mai remarcabil Paperland și Muzei open source a lui Roman Nurik, probabil cel mai bun punct de referință pentru dezvoltarea Android.

Deși există o mulțime de imagini de fundal live, cele mai multe dintre ele se încadrează în categoria peisajului / vremea și foarte puține se încadrează în categoria supraîncărcării de drăgălășenie . Este ceva ce am vrut să schimbăm și să oferim ceva care să vă ofere un zâmbet de fiecare dată când vă deblocați telefonul, chiar dacă l-ați deblocat dintr-un motiv complet diferit. Ți-am oferit un mic pachet drăguț de bucurie să te îmbrățișeze înainte de a te culca noaptea sau când îți stingi alarma dimineața. Și chiar mai bine, fă-l personal și personalizabil.

Fără alte prelungiri și înainte de a intra în detalii tehnice, vă prezint cu mândrie: Ooshies - The Live Wallpaper

Ooshies este numele aplicației mele pentru Android. Poate că nu a avut succes, dar m-a ajutat să învăț lecțiile necesare pentru a scrie acest ghid pentru dezvoltatorii Android începători.

Este dotat:

  • aplicație gratuită de fundal animat care vă oferă îmbrățișări
  • 12 ooshi-uri unice din care să alegeți
  • conținut gratuit, deblocat și achiziționabil
  • actualizări meteo actuale
  • autentificare socială și sincronizare a datelor
  • salutări de sezon
  • multe surprize
  • o pisică ninja
  • am mentionat imbratisari?

Aplicațiile Android de succes uneori doar te fac să zâmbești.

Lecția 3: Încearcă să faci asta

Ooshies părea o idee de aplicație Android destul de simplă. Pictează un fundal, suprapune niște nori și stele, pune deasupra un urs cu un balon și ești gata. Dar nu, este Android! Ceea ce pare ușor este adesea destul de dificil și avem tendința de a repeta aceleași greșeli obișnuite iar și iar. Iată o scurtă descriere a provocărilor cu care m-am confruntat:

  1. Accelerare hardware - de ce să desenați folosind procesorul când GPU-ul este mult mai bun la asta? Ei bine, se pare că desenarea bitmap-urilor pe o pânză nu poate fi accelerată hardware. Cel puțin nu deocamdată.

  2. OpenGL - dacă vrem accelerare hardware trebuie să folosim OpenGL ES sau chiar mai bine un cadru care face cea mai mare parte a muncii pentru noi.

  3. Încărcarea bitmap - o problemă bine cunoscută a consumului de memorie. Trebuie să alocăm 1 octet [0-255] de memorie, pentru fiecare canal din #ARGB, pentru a afișa un singur pixel. De asemenea, imaginile pe care le folosim au adesea rezoluții mai mari decât afișajul dispozitivului. Încărcarea lor pe toate va duce rapid la OutOfMemroyException.

  4. Lansatoare de acasă - imaginea de fundal live va fi găzduită în procesul de lansare de acasă, iar lansatoarele diferite tind să ofere apeluri diferite serviciului de fundal animat (mai ales Nova și TouchWiz).

  5. Durata de viață a bateriei - dacă nu este făcută corect, imaginile de fundal live și widget-urile pot consuma multă baterie. Cu tot zgomotul despre Lollipop (Android 5.0), durata de viață teribilă a bateriei, prima aplicație care va fi folosită va fi tapetul live.

Deci, suprapunerea unui bitmap, pictarea lui pe o pânză și apoi comutarea cadrelor la atingere pentru a oferi o îmbrățișare, nu pare mare lucru, chiar și atunci când se face pe procesor, nu? Așa e, nu este o problemă. Dar cine vrea un tapet live static? Bate scopul. Tapetul ar trebui să răspundă la atingerile tale, ar trebui să se miște pe măsură ce derulezi ecranele de pornire, ar trebui să facă acte aleatorii de bunătate și să te facă să te simți fericit.

Și există un truc de dezvoltare Android pentru asta. Există un termen numit efect de paralaxă pentru adăugarea de adâncime într-un spațiu bidimensional. Imaginează-ți că conduci o mașină. Casa mai aproape de tine se mișcă mai repede decât muntele din depărtare. Același efect poate fi obținut prin mutarea obiectelor cu viteză diferită pe o pânză. Deși, toate sunt în același plan, creierul tău percepe obiectele care se mișcă mai rapid ca fiind mai aproape de tine. La fel ca și adăugarea de umbre, efectul de paralaxă adaugă o axa z.

Și aici se declanșează iadul! Pe majoritatea dispozitivelor care mișcă Ooshie, suprapunerea meteo și fundalul, la viteze diferite, produc o scădere semnificativă a ratei cadrelor. Iată cum este desenat un singur cadru:

 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); }

offset este un procent din distanța pe care utilizatorul a derulat. Este un apel invers pe care motorul de imagini de fundal îl oferă:

 @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); } } }

Trebuie să remarc că toate acestea ar fi inutile dacă aș ști cum să lucrez cu OpenGL! Este pe lista mea de TODO , deoarece orice lucru mai complex decât ceea ce avem acum va necesita o accelerare hardware. Dar, deocamdată, trebuie să muncesc mai mult, nu mai inteligent (sunt deschis la sugestii în comentarii). Deci, iată ce am făcut:

Lecția 4: Lucrează cu ceea ce ai

Ca mari susținători ai inițiativei minSdk=15 , am eliminat din start toate dispozitivele 2.x. Efortul de a menține compatibilitatea cu versiunea anterioară este mai mare decât venitul posibil de la utilizatorii care nu pot/nu doresc să-și actualizeze telefoanele. Deci, în majoritatea cazurilor, vom putea obține o experiență fără probleme cu o opțiune adăugată pentru a dezactiva paralaxa, dacă se dorește.

Conform acestui ghid de dezvoltare Android, am vrut să ofer opțiunea de a dezactiva paralaxa.

O altă mare optimizare este modul în care gestionăm bitmaps-urile. Un efect de paralaxă foarte similar poate fi obținut prin desenarea a două hărți de biți în loc de trei:

  1. Suprapunere Ooshie - bitmap Ooshie decupat și scalat cu grijă (poate fi accesorizat)

  2. Suprapunere combinată - un fundal combinat și un bitmap meteo care se mișcă cu o fracțiune din viteza Ooshie

Acest truc de dezvoltare Android economisește memorie și accelerează timpul de desen, pentru o ușoară degradare a efectului de paralaxă.

La derularea ecranelor de start, cadrele vor fi desenate destul de des (ideal de mai mult de 30 de ori pe secundă). Este esențial să nu le desenați atunci când ecranul de pornire nu este vizibil (unele ecrane de blocare, unele sertare de aplicații, deschiderea / comutarea aplicațiilor etc.) pentru a minimiza utilizarea procesorului.

Toate acestea sunt strâns legate de actualizările meteo. Inițial a existat o sarcină care se repetă, executată la fiecare oră sau două, pentru a sincroniza vremea, dar a fost într-adevăr o exagerare. Dacă utilizatorul nu poate vedea imaginea de fundal, informațiile despre vreme sunt irelevante. Așa că acum, actualizările meteo au loc numai atunci când tapetul este vizibil.

 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); }

Deci, practic, iată lista de verificare pentru un desen de bitmap software optimizat pentru memorie:

  1. Combinați hărțile de bit o dată
  2. Desenați mai puține hărți de biți
  3. Redesenați numai la cerere
  4. Evitați sarcinile de fundal
  5. Oferiți utilizatorilor un anumit control asupra procesului

Lecția 5: Test. Test. Test

Nu pot sublinia cât de important este acest lucru! Niciodată, repet NICIODATĂ , eliberați aplicația înainte de a o testa! Și, nu vreau să spun că TU ar trebui să faci testarea. Ai scris codul, știi cum funcționează și influențezi rezultatul cunoscând așteptările. Nu vorbesc despre testarea JUnit (deși recomandată), ci despre lansări în etape, adică testarea alfa și beta.

Dacă vă interesează dezvoltarea de software pentru Android, termenii sunt simpli, dar iată o scurtă descriere:

  1. Testeri Alpha - un grup mic de oameni format din colegii dvs. de echipă și oameni din industrie, de preferință dezvoltatori Android. Sunt șanse ca aceștia să aibă dispozitive de ultimă generație și să se joace cu opțiunile dezvoltatorilor. Vă vor trimite urme de stivă, rapoarte de erori și chiar vă vor oferi câteva sfaturi și trucuri de optimizare a codului/UI. Perfect pentru lansările timpurii cu funcții parțiale/lipsă.

  2. Testeri beta - un public mult mai larg, cu diverse categorii demografice. Lansările stabile ar trebui publicate aici. Chiar dacă nivelul tău de ninja este al naibii de mare, nu poți niciodată să prezici, cu atât mai puțin să ții cont, pentru toate distribuțiile Android posibile și modurile în care oamenii își folosesc telefoanele.

Odată ce am trecut de alfa, am crezut că am terminat. Dar, băiete, am greșit?! S-a dovedit că nu toți utilizatorii de Android au dispozitive Nexus cu cel mai recent software! Cine ar ști? :)

Iată câteva probleme de dezvoltare Android bazate pe această revelație:

  1. Diferite lansatoare au ecrane de start implicite diferite - de obicei primul sau cel din mijloc și, din câte știu, nu există nicio modalitate de a-i cunoaște poziția.

  2. Este greu să centrați Ooshie fără a cunoaște poziția implicită a ecranului de pornire - astfel, glisorul de setări pentru ajustarea offset-ului paralaxei.

  3. Un utilizator obișnuit nu știe ce înseamnă paralax offset - ar trebui folosită terminologie mult mai simplă pe pagina de setări.

  4. Un utilizator aleatoriu vă va sugera următoarea caracteristică.

Așa că aș dori să le mulțumesc tuturor testerilor noștri beta pentru munca grea pe care au făcut-o. Sper că obținerea celor mai recente funcții înaintea oricui este o recompensă decentă pentru dedicarea lor. Dacă doriți, puteți face parte și din comunitatea noastră Google+ Beta.

Testarea beta este un pas esențial pentru începătorii Android de care trebuie să-l țină cont atunci când încep să-și programeze aplicațiile Android de succes.

Lecția 6: Lasă datele să vorbească

Crearea unei aplicații Android care să iasă în evidență astăzi este puțin mai dificilă decât realizarea unei aplicații pentru calculator, când nu exista niciuna în 2009. A crea aplicația perfectă este greu. În principal pentru că perfecțiunea este în ochiul privitorului. Ceea ce este bun pentru mine, nu înseamnă neapărat că este bine pentru tine. De aceea este important să lăsați aplicația să crească. Lista noastră de verificare pentru noile funcții arată că avem suficientă muncă pentru tot anul 2015. Printre altele, vom include în curând:

  1. Sunete
  2. Fundaluri sezoniere
  3. Personalizări (culoarea fundalului, pachetele meteo, skin-uri ooshie etc.)
  4. Ooshie specifice regiunii (de ex. babushkas)
  5. O mulțime de ooshi-uri noi și modalități de a le debloca

Acum, s-ar putea să fi păstrat aplicația în versiune beta până când totul este gata, dar în acest fel aruncăm date valoroase. Nu toți testerii beta își vor dedica o parte din zi pentru a vă trimite feedback. Aici puteți beneficia de utilizarea instrumentelor pentru a obține feedback. Puteți utiliza Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA etc. pentru a colecta date de utilizare.

De exemplu, analizând datele, am observat că utilizatorii nu fac clic foarte mult pe butonul de setări, așa că am făcut-o mai evidentă și am adăugat un tutorial rapid pentru ajustarea setărilor.

Deși acesta este un proces de fundal, acesta poate fi utilizat pentru a îmbunătăți în continuare experiența utilizatorului. De ce nu arătați utilizatorului de câte ori:

  1. el/ea a primit o îmbrățișare
  2. câte zile ploioase au fost înseninate de un zâmbet
  3. de câte atingeri au fost necesare pentru a debloca un Ooshie cu un mini-joc
  4. câți prieteni au instalat aplicația din cauza ta

Fiecare ghid de dezvoltare Android ar trebui să prezinte importanța Google Analytics în optimizarea aplicației dvs.!

Acest lucru este important deoarece oferă consecințe pentru acțiunile lor. Nu faceți aceeași greșeală pe care o face sistemul nostru educațional, făcând utilizatorii consumatori pasivi de conținut. Pune-i la conducere. Oferă-le opțiunea de a-și controla propriile dispozitive și de a-și crea propria experiență personală. Dacă reușiți să împachetați toate acestea într-un pachet drăguț care fură un zâmbet la prima stropire, atunci nu este deloc exagerat să cereți utilizatorului favoruri spam pentru deblocarea conținutului.

În cele din urmă, trebuie să evoluezi dezvoltarea aplicației Android pe baza acestor date ca ghid. Deși destinată în primul rând mamelor/copiilor, această aplicație poate deveni populară în alte categorii demografice. Este posibil să nu se încadreze în viziunea noastră inițială, dar nevoile utilizatorilor trebuie îndeplinite. Altfel vor găsi pe cineva care poate.

Concluzie

Să revenim la cel mai reușit eșec al meu TweetsPie. În ciuda a câtorva premii și a acoperirii media uriașe, aplicația nu a reușit să-și păstreze utilizatorii (motivele pentru care depășesc domeniul de aplicare al acestui articol).

Succesul nu este întotdeauna evident. Datorită întregii experiențe, am învățat multe. Am ținut, cel puțin, o duzină de prelegeri despre Cum (nu) să eșuez ca startup la diverse evenimente și hackathoane și am reușit să obțin câțiva clienți la Toptal.

Și mai important, încerc să nu repet aceleași greșeli de dezvoltare Android cu Ooshies, urmând sfaturile și trucurile din acest ghid.

Pentru a încheia acest ghid lung, ceea ce definim drept un succes este, la etapa ulterioară, strâns legat de ceea ce ne-am stabilit ca obiectiv la început. Cea mai comună măsură a succesului este, desigur, să câștigi mulți bani. Indiferent dacă aplicația dvs. o face sau nu, trebuie să încercați să faceți acest lucru și credeți-mă, la sfârșit, veți deveni o persoană mai bună (sper că una care reușește să învețe OpenGL). Îți vei face prieteni noi, puțini inamici și, dacă ești suficient de norocos/inteligent, vei face fericiți mulți utilizatori.

Puteți verifica site-ul nostru web sau puteți descărca Ooshies pentru a încerca.