Comutați la meniu

Sfaturi pentru dezvoltatorii Android pentru a reduce dimensiunea fișierului APK

Publicat: 2015-10-28
Iată o serie de recomandări pentru colegii mei dezvoltatori Android pentru reducerea amprentei statice. Le puteți alege pe cele care se potrivesc cel mai bine nevoilor dvs.

1) ProGuard

Angajați Freelancer pe Truelancer

Un instrument pentru reducerea codului, cum ar fi ProGuard, va reduce semnificativ dimensiunea fișierului APK. Instrumentul este disponibil la sourceforge. Rețineți că este foarte important să retestați toată aplicația după aplicarea ProGuard, deoarece poate schimba comportamentul aplicației uneori. Deoarece ProGuard înlocuiește simbolurile aplicației, pentru a face codul dificil de citit, este important să păstrați maparea simbolurilor, astfel încât să puteți traduce o urmă de stivă înapoi la simbolurile originale dacă trebuie să investigați o blocare în aplicația dvs.

2) Eliminarea informațiilor de depanare

Vă recomand să eliminați toate funcționalitățile legate de depanare din aplicație. În general, aplicația nu vede și nu folosește aceste date, iar sistemul de operare Android nu necesită ca acesta să ruleze aplicația. Prin urmare, informațiile de depanare risipesc doar spațiu și ar trebui eliminate.

Pentru a realiza acest lucru, toate funcționalitățile legate de depanare trebuie incluse în blocuri condiționate, ca mai jos:

 static final debug = fals;
 if (depanare) {
 v(TAG, „Depanare…”)
 }

Este important ca indicatorul de depanare să fie setat în timpul compilării (adică declarat ca final static) pentru ca compilatorul să poată elimina complet toată funcționalitatea de depanare. Crearea propriei metode de depanare ca cea prezentată mai jos nu este o idee bună, deoarece apelul la myDebugPrint() nu este închis de un bloc condiționat, ceea ce înseamnă că compilatorul trebuie să rețină informații despre myDebugPrint() în clasa apelantă.

 public void myDebugPrint()
dacă (Depanare)
v(TAG, „Depanare…”);
}
}
…
myDebugPrint()

3) Eliminarea simbolurilor de depanare din bibliotecile native Utilizarea simbolurilor de depanare are sens dacă aplicația dvs. este încă în dezvoltare și necesită încă depanare. Dar dacă simbolurile de depanare încă apar atunci când compilați o versiune de versiune și dacă doriți să le eliminați, atunci vă recomandăm ca simbolurile de depanare să fie eliminate din bibliotecile native (fișiere .so). Acest lucru se face folosind comanda arm-eabi-strip, din Android NDK.

4) Formate media recomandate Dacă aplicația dvs. se bazează în mare măsură pe imagini, audio sau video, o altă modalitate prin care puteți reduce dimensiunea fișierului APK este utilizarea anumitor formate media. Vă recomandăm să utilizați următoarele formate media pentru imagini, audio și video:

  • Video: Folosiți H264 AVC. Codați videoclipul la o rezoluție nu mai mare decât rezoluția ecranului dispozitivului țintă (dacă este cunoscută).
  • Audio : AAC Audio este recomandat pentru toate resursele audio. AAC realizează o compresie mai bună la o calitate dată, în comparație cu mp3 sau Ogg Vorbis. Formatele brute, cum ar fi WAV, nu trebuie niciodată folosite. Rațiunea comună pentru utilizarea formatului WAV este că decodarea fluxurilor audio comprimate înseamnă de obicei o latență mare la redare. Cu toate acestea, Android oferă API-ul Sound Pool care permite aplicațiilor să utilizeze fluxuri audio comprimate fără penalizarea unei latențe mari.
  • Imagini : PNG sau JPEG. Utilizați PNG-uri; deoarece este un format fără pierderi, este foarte potrivit pentru texturi și lucrări de artă, deoarece nu vor exista artefacte vizuale de la compresie. Dacă există constrângeri de spațiu, utilizați JPEG sau o combinație de PNG și JPEG. O imagine JPEG de înaltă calitate poate funcționa bine pentru imagini foto-realiste mari, pentru care schema de compresie JPEG este optimizată.
  • Optimizați dimensiunile PNG fără a pierde calitatea

Trebuie să citiți 5 rezoluții financiare pe care să le stabiliți în 2015

Dacă utilizați formatul PNG, imaginile PNG pot fi reduse în dimensiunea fișierului fără a pierde calitatea. Pentru a face acest lucru, utilizați un instrument precum OptiPNG sau PNGCrush. Ambele sunt excelente pentru a reduce dimensiunea fișierului PNG, asigurând în același timp calitatea imaginii. PNGcrush este un program open-source care iterează peste filtre PNG și parametrii zlib (Deflate), comprimă imaginea în mod repetat folosind fiecare configurație de parametru și alege configurația care produce cea mai mică ieșire comprimată (IDAT). Pe de altă parte, OptiPNG efectuează testele în întregime în memorie și scrie doar fișierul final de ieșire pe disc. În plus, oferă mai multe presetări de optimizare utilizatorului.

5) Eliminați resursele neutilizate Un alt grup potențial de risipitori de spațiu care trebuie luat în considerare pentru eliminarea din fișierul dvs. APK sunt resursele neutilizate din directorul dvs. de res, cum ar fi machetele, desenele și culorile neutilizate. Pentru a detecta resurse neutilizate din APK-ul dvs. care ar putea fi eliminate, utilizați instrumentul Android-unused-resources. Android Unused Resources este o aplicație Java care vă va scana proiectul pentru resurse neutilizate.

6) Evitați duplicarea Asigurați-vă că aplicația dvs. nu are funcționalități duplicate sau active duplicate este o modalitate evidentă de a evita să aveți fișiere inutile în APK. Este important să înțelegeți ce API-uri Android folosiți și funcționalitatea completă pe care fiecare le oferă. Este posibil ca un API Android să facă deja munca unui alt API. Activele duplicate (șiruri de caractere, hărți de biți etc) sunt, de asemenea, o risipă de spațiu și pot fi evitate cu ușurință. Într-o măsură mai mică, codul duplicat va crește, de asemenea, în mod inutil dimensiunea binarului livrat.

7) Reduceți numărul de metode. Dezvoltatorii Avid de Android și-au dorit mult să se confrunte cu o problemă care provoacă dureri de cap cu aplicațiile lor. Numărul de metode pe care le poate avea o aplicație este limitat. Ei bine, înainte era limitat. În cele din urmă, oamenii buni de la Google au oferit o soluție în octombrie anul trecut, dar a fost departe de a fi ideală. Deși foarte ușor de implementat, soluția multidex a complicat și prelungit semnificativ timpul de compilare. Fără să stea pe loc, începând cu Lollipop (Android 5.0), întreaga mașină virtuală Android a fost revoluționată pentru a oferi o soluție mult mai durabilă, de genul care chiar îmbunătățește timpul obișnuit de compilare. Cu toate acestea, deocamdată, nici soluția Lollipop nu este ideală. Le cere dezvoltatorilor să dezvolte numai împotriva Lollipop, ceea ce ar putea fi problematic, deoarece majoritatea aplicațiilor doresc să fie compatibile cu o gamă mai largă de public și s-ar putea teme să folosească funcții care nu sunt disponibile în versiunile anterioare de Android. Deci, în acest moment, soluția Lollipop este o soluție bună pentru viitor-Android, dar s-ar putea să nu aibă un impact prea mare în prezentul previzibil. Deci ce se poate face intre timp? Cu toții suntem de acord că nu ar trebui să renunți la funcții și capabilități, doar pentru a evita atingerea limitei de 65K. Dar nu există nicio îndoială că cea mai bună practică ar fi totuși reducerea numărului de metode de aplicare. Deci, cum puteți încerca în continuare să reduceți numărul de metode fără a pierde acea scânteie care face aplicația dvs. specială?

Trebuie să citiți Diversificarea carierei cu Freelancing: Beneficii asigurate

O scurtă prezentare generală: „De unde vin toate aceste metode?”

Limita de numărare a metodelor este de aproximativ 65.000 de metode (65.536 pentru a fi exact). Sună ca un număr uriaș. Dacă ești un dezvoltator Android începător, s-ar putea să te gândești „cum naiba pot atât de multe aplicații să ajungă la acest număr atât de repede?” Probabil ai avea oarecum dreptate. Nu este ușor să scrii atât de multe metode pe cont propriu. Dar dezvoltatorii de aplicații nu își scriu singuri întreaga aplicație. Dezvoltatorii de aplicații folosesc din ce în ce mai multe biblioteci terțe (SDK-uri – Kituri de dezvoltare software), care îi ajută să atingă anumite obiective și funcții pe care, altfel, ar trebui să le dezvolte complet pe cont propriu. De la reclame la îmbunătățiri ale GUI până la rețele sociale, raportare de blocare și multe altele, SDK-urile oferă o gamă largă de capabilități și API-uri care economisesc timp prețios de dezvoltare și vă ajută să difuzați mai rapid aplicația. Dar fiecare SDK se adaugă la numărul de metode, iar unele SDK-uri fac chiar mai mult decât ceea ce v-ați negociat. Nu este neapărat un lucru rău, desigur. Cu toate acestea, lovitura de grație a venit chiar de la Google. Setul lor de servicii Google Play este un SDK mare care conține peste 28.000 de metode. Cu limita fiind de 65K, acest număr nu este tocmai mic. Și mulți dezvoltatori de aplicații ar dori să folosească acest SDK, deoarece deschide ușa către regatul magic Google, o capacitate mult dorită care adaugă multă valoare aplicației cuiva. În această postare, nu voi explica doar cum să utilizați în mod selectiv pachetele de servicii Google Play, dar vă voi oferi și informații despre câte metode adaugă fiecare dintre aceste pachete în aplicația dvs. Așa că ține-ți locurile, va fi o călătorie accidentată.

Locul de joacă pentru serviciile Google Play

Deci, câte metode adaugă de fapt serviciile Google Play? Ei bine, ca și în orice lucru în viață, este mult mai complicat decât un număr de bază. Dar haideți să facem un pas câte unul. SDK-ul serviciilor Google Play conține de fapt 19 SDK-uri diferite. Cu Gradle, puteți alege selectiv pe care să le utilizați. Tot ce trebuie să faceți este să adăugați următoarea dependență în fișierul build.gradle al modulului aplicației:

 dependențe {
compilați „com.google.android.gms:play-services:7.5.0”
}

Cu 7.5.0 fiind cea mai recentă versiune GPS lansată în acest moment. Este etichetat ca revizuirea 25 în Managerul SDK Android. Pentru a alege anumite pachete, înlocuiți următoarea linie cu câte linii de dependență doriți, specificând anumite pachete. Să spunem, de exemplu, că vrei doar Google Plus, Google Games, Google Ads și Google Maps:

 dependențe {
compilați „com.google.android.gms:play-services-plus:7.5.0”
compilați „com.google.android.gms:play-services-games:7.5.0”
compilați „com.google.android.gms:play-services-ads:7.5.0”
compilați „com.google.android.gms:play-services-maps:7.5.0”
}

Nu prea greu, dar iată prima captură. Unul dintre gloriosii 19 SDK-uri se numește play-services-base. Dacă includeți orice pachet de servicii Google Play, acesta va fi adăugat automat și el. Câte metode conține pachetul de bază? Aproape 8.000 (numărul exact de mai jos).

Trebuie să citiți Era antreprenorilor independenți: Oamenii care au independenți la un nou nivel

Și iată a doua captură. Nu am inclus doar 3 pachete în exemplul de mai sus. Nici măcar nu am inclus doar 4, dacă numărați și pachetul de bază. De fapt, am inclus 5 pachete. De ce? Deoarece pachetul Google Games folosește pachetul Google Drive și, deci, și acesta a fost importat (în realitate, Google Ads include și un pachet numit manager de etichete, dar numar aici doar pachetele „selectabile”).

Așa că acum începem să înțelegem de ce este puțin mai greu să numărăm câte metode adaugă fiecare pachet al Serviciilor Google Play în aplicația noastră. Includerea unui pachet nu înseamnă neapărat excluderea celorlalți.

Așadar, iată detaliile - ce pachete puteți adăuga, câte metode adaugă și ce alte pachete aduc pentru a bloca petrecerea. Datele se referă la cea mai recentă versiune a serviciilor Google Play (7.5.0 / revizuirea 25):

Sfaturi pentru dezvoltatorii Android pentru a reduce dimensiunea fișierului APK 2
Număr total de metode: 28175

Numărul total de metode: 28.175. Unele dintre aceste numere, trebuie să recunoașteți, sunt cu adevărat atroce. Dacă tot ce ți-ai dorit a fost pachetul panoramă, nu poți obține doar nouă metode, trebuie să obții aproape 8.000. Nu e de mirare că atât de multe aplicații se apropie sau depășesc limita de 65K.

Unele dintre aceste numere pot părea un pic inconsecvente dacă încercați să le adunați. Asta pentru că, din nou, logica din spatele serviciilor Google Play este puțin mai complicată decât se vede. De exemplu, Google Analytics include o singură metodă de la Google Ads pentru a obține ID-ul de publicitate al contului.

Rețineți că atunci când calculați cât adaugă fiecare pachet în aplicația dvs., asigurați-vă că excludeți dublele (de exemplu, nu numărați pachetul de bază de mai multe ori).

Nu puteți adăuga totul în mod selectiv

Și iată ultima înțepătură. Există două pachete minuscule în serviciile Google Play care nu pot fi adăugate selectiv. Pachetul de căutare (care vă oferă acces la API-ul Google Now) include doar 22 de metode. Dacă doriți să îl utilizați, nu aveți de ales decât să adăugați toate cele peste 28.000 de metode, toate serviciile Google Play. Sperăm că acest lucru va fi remediat în versiunile ulterioare.

(Un alt pachet „inaccesibil” este pachetul appstate care include 111 metode, cu toate acestea, acum este depreciat în favoarea SavedGames , inclus în pachetul google-play-games).

Angajați Freelancer pe Truelancer