dimensiunea

În ultimele luni, am adus o serie de îmbunătățiri pentru aplicația SignEasy de la Android. Am făcut pași mari încercând să creăm o experiență mai bună pentru utilizatorii noștri și, după aproape un an de eforturi, am trecut de la un aspect așa (stânga, iunie 2015) la acest lucru (dreapta, iunie 2016)!

Aplicația renovată a fost construită în jurul principiilor de proiectare a materialelor (care este o poveste interesantă pe cont propriu). Nu numai că se simte mai repede, dar oferă și o experiență de semnare îmbunătățită. La fel ca toate lucrurile bune, totuși, această actualizare a avut un cost, cu o aplicație voluminoasă de până la aproape 35 MB. Inacceptabil! Am simțit durerea utilizatorilor noștri și am decis că este timpul să punem aplicația pe o dietă atât de necesară. Iată câteva dintre tehnicile pe care le-am folosit.

Bibliotecile din abundență

Aplicațiile tind să folosească o grămadă de biblioteci pentru a se menține în funcțiune și nu mă refer doar la acea bibliotecă terță parte pe care ați adăugat-o pentru animații. De asemenea, trebuie să includeți SDK-uri pentru compatibilitate inversă pentru oricare dintre API-urile Google sau chiar pentru a crea materialul aplicației. Fiecare dependență pe care o adăugați poate contribui semnificativ la dimensiunea APK-ului, mai ales dacă aplicația dvs. este în producție de mult timp. Un bun punct de plecare este să tăiați orice biblioteci inutile din aplicația dvs.

Bagaje inutile

Acesta este un instrument excelent pentru a vedea ce biblioteci folosește aplicația dvs., inclusiv un număr de metode pe care le are fiecare. Cu cât numărul este mai mare, cu atât contribuie în cele din urmă la APK-ul dvs. Eliminați toate bibliotecile neutilizate, în special cele voluminoase.

ProTip: dacă aplicația dvs. folosește Serviciile Google Play, asigurați-vă că nu includeți întreaga pachet în versiunea dvs. De la v6.5, puteți include selectiv bibliotecile de care aveți nevoie - nici mai mult, nici mai puțin. Este un mic truc îngrijitor care ne-a ajutat să reducem niște MB serioși.


Întotdeauna ProGuard

Asigurați-vă că aplicați ProGuard la APK. Este un instrument foarte eficient, care elimină toate clasele, metodele și câmpurile neutilizate din aplicația ambalată, inclusiv oricare din biblioteci.

Dacă utilizați AppCompat-v7 sau acceptați biblioteca-v4 în aplicația dvs. (ceea ce probabil faceți), asigurați-vă că fișierul ProGuard nu are niciuna dintre aceste linii.

Bibliotecile de asistență sunt mari singure și vă ajută dacă permiteți ProGuard să elimine toate clasele neutilizate.

ProTip: Dacă utilizați AppCompat SearchView în aplicația dvs., adăugarea celor două linii de mai sus poate duce la ruperea lucrurilor. Acest lucru se datorează faptului că oricare dintre elementele AppCompat care sunt utilizate în XML ca șir nu vor fi recunoscute de AAPT, iar clasa este eliminată de ProGuard. Pentru a evita acest lucru, adăugați această linie înapoi la configurația dvs. ProGuard.

(Acest lucru funcționează cu orice clasă care este utilizată în XML ca șir.)

Minimizare și micșorare

O tehnică simplă este de a-i spune lui Gradle să micșoreze resursele și să elimine resursele neutilizate pentru dvs. atunci când împachetați aplicația. În fișierul build.gradle, adăugați următoarele la tipul de compilare pe care doriți să îl afectați:

Gestionarea desenelor

Având în vedere gama largă de dispozitive Android de pe piață, dezvoltatorii adaugă de obicei active pentru 5 densități diferite (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), precum și active diferite dacă aveți o interfață de utilizare specifică tabletei, la fel ca noi. Toate aceste imagini ambalate într-un singur APK contribuie semnificativ la volumul mare.

Fii nemilos

Am primit odată un sfat extraordinar de la un dezvoltator Google Advocate: identificați dispozitivele pe care le folosesc majoritatea clienților dvs. și, dacă nu intră în cupele mdpi-hdpi, eliminați activele pentru aceste două densități. La început, sună puțin riscant, dar este una dintre cele mai eficiente modalități de a scăpa de o parte bună a acestor MB. Sigur, durează puțin mai mult ca materialul xhdpi să fie redat pe aceste dispozitive, dar este greu de observat.

În plus, așa cum am menționat mai devreme, aplicația SignEasy are unele active specifice factorului de formă al tabletei. Datorită dimensiunilor lor mai mari în comparație cu elementele telefonice, aceste imagini tind să aibă și dimensiuni mai mari. Am încercat să ne dăm seama în ce găleată de densitate au căzut cei mai mulți dintre utilizatorii noștri de tablete (acest lucru a ajutat foarte mult) și am fost surprinși să vedem că majoritatea dispozitivelor de tabletă au fie densitate mdpi, fie xhdpi. Eliminarea tuturor celorlalte materiale pentru tablete a afectat drastic dimensiunea APK-ului.

Adoptați desenele vectoriale ... serios

În calitate de dezvoltator Android, una dintre cele mai bune practici pe care o puteți adopta este forțarea dezvoltatorilor și proiectanților dvs. să înceapă să utilizeze SVG-uri pentru ca imaginile să fie incluse în proiectul dvs. ca v ector desenabile . Acest lucru vă permite să înlocuiți mai multe PNG-uri cu o singură grafică vectorială care își menține claritatea, indiferent de densitatea dispozitivului pe care este redat - magie pură. Deși a fost disponibilă pentru prima dată doar pentru Lollipop și versiunile superioare, biblioteca de suport 23.2 include suport pentru desenele vectoriale până la API 7. În plus, Android Studio 1.4 a introdus un mic instrument inteligent care vă ajută să importați grafică vectorială în proiect. Acest lucru vă va ajuta cu siguranță să mențineți dimensiunea APK-ului scăzut.

Totul nefolosit

Iată câteva tehnici care vă vor ajuta să eliminați resursele mai mici neutilizate. Deși acestea nu au un impact mare asupra dimensiunii APK-ului, fiecare KB contează în cele din urmă. În plus, vă ajută să păstrați baza de cod curată.

Android Lint

Acesta este un instrument foarte util încorporat chiar în Android Studio (dar ciudat de greu de găsit). Mergi la Analizați> Executați inspecția după nume . În dialogul Inspecție, tastați resurse neutilizate, selectați domeniul de aplicare (întregul proiect recomandat) și rulați. Lint analizează toate resursele (șiruri, desenabile, dimensiuni etc.) care nu sunt utilizate nicăieri în codul dvs. Puteți accesa fiecare sugestie și șterge resursa sau pur și simplu cereți lui Lint să șteargă totul pentru dvs. Este mai ușor să faceți aceasta din urmă și apoi să adăugați din nou ceva pe care l-ați șters din greșeală, mai ales dacă nu ați făcut niciodată acest lucru, deoarece Lint va sfârși probabil să sugereze un număr foarte mare de resurse neutilizate.

Alegeți-vă limbile

O tehnică interesantă care a fost discutată în Google I/O 2016 a fost specificarea limbilor pe care le localizați în scriptul dvs. Gradle. Aceasta elimină toate celelalte fișiere șir care ar fi putut fi adăugate de alte biblioteci în limbi pe care nici măcar nu le acceptați. Pentru aceasta, specificați limbile pe care le acceptați în fișierul build.gradle la nivel de aplicație:

Împărțirea fișierului APK

Sistemul Gradle vă permite să produceți mai multe APK-uri pentru o versiune în funcție de criteriul de împărțire. Deși acest lucru nu este încurajat de documentația Android, uneori cel mai eficient mod de tăiere a APK-ului este, er, tăierea acestuia. Puteți face acest lucru în diferite moduri:

ABI divizat

Acest lucru este util mai ales dacă proiectul dvs. include biblioteci scrise în cod nativ (fișiere .so) care acceptă diferite arhitecturi CPU. Puteți împărți APK-ul dvs. în funcție de arhitectură, astfel încât un utilizator care rulează un braț ABI să nu primească codul pentru x86 și așa mai departe. Pentru a face acest lucru, adăugați următoarele la fișierul build.gradle la nivel de aplicație:

Divizarea nivelului de densitate

Această abordare vă permite să produceți mai multe APK-uri care sunt împărțite în funcție de densitatea dispozitivului, astfel încât un utilizator cu un dispozitiv xhdpi să nu poarte active destinate xxxhdpi. Pentru aceasta, adăugați următoarele în fișierul build.gradle la nivel de aplicație:

Pentru o listă cuprinzătoare cu mai multe opțiuni de divizare, citiți aceasta .

De asemenea, vă recomand să urmăriți această discuție Google I/O 2016 și să citiți acest blog aferent pentru mai multe modalități de a reduce dimensiunea aplicației.

După aplicarea minuțioasă a majorității tehnicilor de mai sus, echipa SignEasy Android a redus cu succes dimensiunea aplicației noastre cu aproape 30%. Acestea fiind spuse, încă nu suntem complet mulțumiți și intenționăm să încercăm și mai multe modalități de a păstra ușor stocarea dispozitivului utilizatorilor noștri. Amintiți-vă, fiecare KB contează.

Pentru întrebări, gânduri și comentarii, găsiți-mă pe Twitter @ApoorvaTyagi.