Reducerea dimensiunii APK folosind R8 și ProGuard

  • Implementare R8 și ProGuard pentru eliminarea codului mort și ofuscarea claselor.
  • Utilizarea pachetelor de aplicații Android pentru a optimiza livrarea resurselor în funcție de dispozitivul utilizatorului.
  • Înlocuirea resurselor grele cu formate eficiente, cum ar fi WebP și Vector Drawables.
  • Configurarea modulelor dinamice pentru descărcarea funcționalităților la cerere.

Reducerea dimensiunii APK folosind R8 și ProGuard

Pe măsură ce aplicațiile noastre adaugă funcții și devin mai complexe, este destul de frecvent ca dimensiunea fișierului final să crească semnificativ. Aceasta este o problemă serioasă, deoarece, dacă o aplicație este prea mare, mulți utilizatori se gândesc de două ori înainte de a face clic pe butonul de instalare sau, chiar mai rău, abandonează descărcarea la jumătatea timpului. În plus, o aplicație mare consumă mai mult spațiu de stocare pe telefon și poate afecta în cele din urmă viteza de răspuns a sistemului.

Pentru a împiedica proiectul tău să devină un gigant digital, există mai multe strategii, de la curățarea codului până la optimizarea imaginilor. În acest articol, vom analiza în detaliu cum să folosești instrumente precum R8 și ProGuard , precum și magia App Bundles, pentru a face aplicația ta cât mai ușoară și rapidă posibil, asigurându-te că rulează impecabil chiar și pe dispozitive low-end.

Înțelegerea a ceea ce contează cu adevărat în aplicația ta

Înainte de a începe, trebuie să știm unde se află cea mai mare parte a datelor. Dimensiunea unei aplicații este de obicei împărțită în patru blocuri principale. În primul rând, există bytecode-ul Java sau Kotlin și bibliotecile sale, care reprezintă de obicei 30% până la 40%. Apoi, există resurse precum layout-uri și animații , cu o dimensiune similară. De asemenea, avem bibliotecile native (C/C++) compilate pentru diferite arhitecturi (15-25%) și, în final, resursele sau fișierele brute (5-15%).

Pentru a evita presupunerile, cel mai bine este să utilizați Analizatorul APK din Android Studio (accesând la Construiește > Analizează APK). Acest instrument vă permite să vedeți exact cât de mult cântăresc clasele DEX, folderul de resurse și bibliotecile native, permițându-vă să comparați versiunile actuale cu cele anterioare pentru a identifica ce modificări au cauzat creșterea dimensiunii fișierului. Pentru a aprofunda acest subiect, este util să înțelegeți ierarhia fișierelor în Android și modul în care sunt organizate fișierele.

Curățarea codului: Saltul de la ProGuard la R8

Reducerea codului este, fără îndoială, cea mai eficientă metodă de a reduce numărul de octeți. Aici intervin ProGuard și succesorul său modern, R8. ProGuard a fost standardul ani de zile, ocupându-se de eliminarea claselor, câmpurilor și metodelor neutilizate , optimizarea bytecode-ului și ofuscarea numelor pentru a le face mai scurte (și mai greu de citit pentru oricine încearcă să vă pirateze codul).

APK, AAB și APKM
Articol asociat:
Ghid avansat pentru diferențele dintre formatele APK, AAB și APKM pe Android: Tot ce trebuie să știi pentru a instala aplicații ca un profesionist

Astăzi, R8 este compilatorul implicit și face tot ce făcea ProGuard, dar mult mai bine și mai rapid. R8 implementează o modificare mai agresivă a arborilor , îmbină clasele cu funcții similare și optimizează enumerările prin convertirea lor în numere întregi. În plus, permite utilizarea funcțiilor Java 8 moderne în versiunile mai vechi de Android prin desugarizare.

Configurație tehnică în build.gradle

Pentru a activa aceste optimizări în versiunea lansată, trebuie să configurați fișierul de compilare setând minifyActivat ca adevărat și conectarea fișierelor de reguli. Este esențial să se utilizeze proguard-android-optimize.txt pentru a profita din plin de optimizări. Un exemplu de configurare de bază ar include menținerea claselor de aplicații sau cele notate cu @Keep pentru a împiedica R8 să le șteargă accidental.

Gestionarea regulilor pentru bibliotecile externe

Uneori, R8 este prea eficient și șterge codul utilizat prin reflecție, provocând erori precum ClassNotFoundExceptionDe aceea librăriilor le plac Retrofit, OkHttp sau Gson necesită reguli specifice.De exemplu, cu Gson este vital să păstrați numele câmpurilor în modelele de date, astfel încât deserializarea JSON să nu eșueze. Dacă întâmpinați erori după ofuscare, fișierul mapping.txt Este cel mai bun aliat al tău pentru traducerea urmelor stivei și pentru a ști unde a apărut eroarea.

Este posibil să creezi un APK fără să fii programator?
Articol asociat:
Diferențe între APKM, APKS și XAPK: Ghid complet pentru formatele de instalare Android

Optimizare inteligentă a resurselor

Resursele sunt adesea locul unde se irosește cel mai mult spațiu. O tehnică simplă, dar puternică, este activarea shrinkResources în fișierul build.gradle. Aceasta elimină fișierele care nu au nicio referință în cod, deși este important de știut că, dacă apelați o resursă dinamic folosind getIdentifierVa trebui să îl declari într-un fișier keep.xml ca să nu dispară.

Imagini și grafică: Mai puțin înseamnă mai mult

Formatul PNG este responsabil pentru mulți megaocteți inutili. Recomandarea actuală este migrarea tuturor în formatul WebP , care oferă o compresie mult superioară, menținând în același timp calitatea. Puteți efectua această conversie direct în Android Studio făcând clic dreapta pe imagine. Pentru pictograme și forme simple, fișierele Vector Drawables sunt ideale ; un singur fișier XML înlocuiește cinci versiuni cu densități diferite, simplificând întreținerea și reducând dimensiunea fișierului.

Reducerea limbilor și a densităților

Multe biblioteci externe vin cu traduceri în 50 de limbi pe care aplicația dvs. probabil nu le acceptă. Pentru a corecta acest lucru, utilizați proprietatea resConfigs în defaultConfigspecificând doar limbile pe care le utilizați efectiv (de exemplu, "es", "en"În mod similar, puteți limita densitățile ecranelor incluse dacă știți că publicul dvs. țintă folosește dispozitive moderne, eliminând resursele ldpi sau mdpi pe care nimeni nu le mai folosește.

Extrageți APK-ul din aplicații
Articol asociat:
Ghid complet pentru extragerea fișierelor APK din orice aplicație Android: opțiuni, securitate și tutoriale

Strategii avansate de distribuție

Dacă vrei să reduci definitiv dimensiunea fișierelor APK, ar trebui să renunți la utilizarea fișierelor APK universale și să treci la Android App Bundles (.aab) . În loc să trimită un fișier uriaș cu tot ce este posibil, Google Play generează un fișier APK optimizat pentru fiecare dispozitiv. În acest fel, un utilizator cu un telefon ARM64 și un ecran xxhdpi descarcă doar ceea ce are nevoie hardware-ul său , reducând dimensiunea descărcării cu până la 40%.

Module de funcții dinamice și aplicații instantanee

Nu este necesar ca tot codul să fie disponibil de la început. Cu modulele dinamice de funcții , puteți separa părți ale aplicației (cum ar fi un editor foto avansat sau modul offline), astfel încât acestea să fie descărcate doar atunci când utilizatorul accesează funcția respectivă. Pe de altă parte, aplicațiile instantanee permit utilizatorilor să încerce aplicația fără a o instala, prin încărcarea unui modul de bază extrem de ușor prin URL sau buton Google Play.

Auditul dependențelor și detaliile finale

Uneori, problema nu este codul tău, ci ceea ce aduci din exterior. Bibliotecile precum Guava sau Jackson pot fi foarte mari; ia în considerare înlocuirea lor cu alternative mai ușoare, cum ar fi kotlinx.serialization sau Gson . De asemenea, este recomandabil să folosești fonturi descărcabile de la Google Fonts în loc să incluzi fișiere TTF mari în resursele tale, ceea ce îți poate economisi câțiva megaocteți dacă folosești mai multe variante ale unui font.

Pentru a finaliza ciclul de optimizare, rețineți că Android Go este o piață în creștere. Dacă doriți ca aplicația dvs. să iasă în evidență pe dispozitive cu mai puțin de 1 GB de RAM, încercați să mențineți dimensiunea acesteia sub 40 MB. Utilizarea Android Lint pentru a detecta resursele orfane și menținerea unei rutine constante de curățare va permite aplicației dvs. să fie eficientă, să se instaleze rapid și să ofere o experiență de utilizare fără probleme, indiferent de puterea dispozitivului.

Actualizări de securitate Android
Articol asociat:
Cum să accelerezi și să optimizezi Android la maximum: ghid complet, sfaturi și recomandări esențiale

Adăugați ca sursă preferată în Google