App Size Optimization — σύνολο τεχνικών που αποσκοπούν στη μείωση του μεγέθους του αρχείου εγκατάστασης (APK, AAB, IPA) χωρίς απώλεια λειτουργικότητας. Σύμφωνα με τον Android Reduce APK Size Guide, κάθε megabyte μείωσης μεγέθους μπορεί να αυξήσει τη μετατροπή εγκαταστάσεων κατά 1–2% σε περιοχές με αργό διαδίκτυο. App Thinning — η βασική τεχνολογία της Apple που παραδίδει μόνο τους πόρους που χρειάζεται μια συγκεκριμένη συσκευή.
Βασικά σημεία
App Size Optimization — ο κλάδος ανάπτυξης εφαρμογών για κινητά που στοχεύει στην ελαχιστοποίηση του μεγέθους του πακέτου εγκατάστασης της εφαρμογής. Περιλαμβάνει αφαίρεση νεκρού κώδικα και πόρων, συμπίεση εικόνων, βελτιστοποίηση βιβλιοθηκών, κατακερματισμό μεταγλώττισης για διαφορετικές αρχιτεκτονικές και χρήση τεχνολογιών παράδοσης κατ' απαίτηση.
Το μέγεθος της εφαρμογής επηρεάζει άνισα διαφορετικά τμήματα χρηστών. Σε περιοχές με ανεπτυγμένη υποδομή κινητής τηλεφωνίας (ΗΠΑ, Ευρώπη, Ιαπωνία), η διαφορά μεταξύ 50 και 100 MB μπορεί να είναι ανεπαίσθητη. Σε αναπτυσσόμενες περιοχές (Ινδία, Ινδονησία, Βραζιλία), κάθε επιπλέον megabyte μειώνει τη μετατροπή εγκαταστάσεων λόγω ορίων χρέωσης και ταχύτητας κινητού διαδικτύου. Το Google Play περιορίζει το μέγεθος APK σε 200 MB, αλλά συνιστά τη διατήρηση του μεγέθους κάτω από 100 MB.
Για το iOS App Store, το μέγιστο μέγεθος λήψης μέσω κινητού δικτύου είναι 200 MB (μέχρι το 2023 ήταν 150 MB). Εάν το IPA υπερβαίνει αυτό το όριο, ο χρήστης μπορεί να εγκαταστήσει την εφαρμογή μόνο μέσω Wi-Fi. Η Apple υποστηρίζει επίσης το App Thinning, το οποίο περιλαμβάνει Slicing, Bitcode και On-Demand Resources — τεχνολογίες που μειώνουν αυτόματα το μέγεθος εγκατάστασης σε μια συγκεκριμένη συσκευή χωρίς τη συμμετοχή του προγραμματιστή.
Το μέγεθος της εφαρμογής επηρεάζει όχι μόνο τη μετατροπή εγκαταστάσεων, αλλά και τη διατήρηση χρηστών, τη συχνότητα ενημερώσεων και την ταχύτητα πρώτης εκκίνησης. Κάθε επιπλέον megabyte είναι ένα εμπόδιο μεταξύ του χρήστη και της χρήσης του προϊόντος σας.
Σύμφωνα με δεδομένα του Google I/O 2024, η μείωση του APK κατά 10 MB αυξάνει τη μετατροπή εγκαταστάσεων κατά μέσο όρο 3,5%. Για εφαρμογές μεγέθους 150+ MB, η μετατροπή μπορεί να είναι 20–30% χαμηλότερη από ό,τι για εφαρμογές της ίδιας κατηγορίας μεγέθους 50 MB. Το αποτέλεσμα είναι ιδιαίτερα εμφανές στο Google Play, όπου ο χρήστης βλέπει το μέγεθος πριν από την εγκατάσταση. Στο App Store, το μέγεθος εμφανίζεται στη σελίδα της εφαρμογής, και οι χρήστες με περιορισμένο πρόγραμμα χρέωσης αναβάλλουν την εγκατάσταση μέχρι το Wi-Fi, μετά από το οποίο συχνά ξεχνούν την εφαρμογή.
Μια μεγάλη εφαρμογή ενημερώνεται λιγότερο συχνά μέσω αέρα — οι χρήστες αναβάλλουν τη λήψη διορθώσεων μέχρι το Wi-Fi, χάνοντας κρίσιμες ενημερώσεις ασφαλείας. Το Google Play επιτρέπει τη χρήση Incremental Updates (διορθώσεις έως 10 MB), αλλά η πλήρης επανεγκατάσταση εξακολουθεί να κατεβάζει ολόκληρο το APK ή το AAB. Το Apple App Store χρησιμοποιεί Delta Updates, στέλνοντας μόνο τα τροποποιημένα αρχεία, αλλά ακόμα και το delta μπορεί να είναι σημαντικό κατά την αλλαγή πόρων.
Το μέγεθος επηρεάζει άμεσα τον χρόνο πρώτης εκκίνησης: η εφαρμογή πρέπει να αποσυμπιέσει τους πόρους, να μεταγλωττίσει τον κώδικα (Android) ή να υπογράψει την προσωρινή μνήμη (iOS). Μια εφαρμογή μεγέθους 200 MB μπορεί να εκκινείται 10–15 δευτερόλεπτα αργότερα από μια εφαρμογή 50 MB σε μια μέση συσκευή. Αυτό επιδεινώνει την Onboarding Experience — ο χρήστης μπορεί να κλείσει την εφαρμογή χωρίς να περιμένει τη φόρτωση.
| Μέγεθος | Χρόνος λήψης (3G) | Χρόνος πρώτης εκκίνησης |
|---|---|---|
| 30 MB | –20 δ | 3–5 δ |
| 100 MB | –70 δ | 5–8 δ |
| 200 MB | –140 δ | 10–15 δ |
Πόροι — εικόνες, γραμματοσειρές, ήχοι, βίντεο — αποτελούν το 60–80% του μεγέθους μιας τυπικής εφαρμογής για κινητά. Η βελτιστοποίηση πόρων δίνει το μεγαλύτερο κέρδος με ελάχιστη προσπάθεια. Οι κύριες κατευθύνσεις: συμπίεση, αφαίρεση διπλότυπων και αχρησιμοποίητων assets, επιλογή σωστών μορφών.
WebP — μορφή εικόνας από την Google, που παρέχει 25–35% καλύτερη συμπίεση από το PNG και 15–20% καλύτερη από το JPEG με την ίδια οπτική ποιότητα. Το Android υποστηρίζει WebP εγγενώς από το API 18. Για iOS, το WebP υποστηρίζεται μέσω της βιβλιοθήκης SDWebImage ή Kingfisher, και από το iOS 17 υπάρχει εγγενής υποστήριξη. AVIF — μια πιο σύγχρονη μορφή, που δίνει επιπλέον 10–15% εξοικονόμηση σε σχέση με το WebP, αλλά με πιο αργή αποκωδικοποίηση.
Αφαίρεση αχρησιμοποίητων πόρων — ο απλούστερος τρόπος μείωσης μεγέθους. Στο Android, χρησιμοποιήστε ανακατασκευή με το Android Studio: Analyze → Run Inspection → Unused Resources. Στο iOS — Build Settings → Remove Unused Resources. Συχνά στα έργα παραμένουν sprite από προηγούμενες εκδόσεις, παλιά εικονίδια, αχρησιμοποίητες εικόνες οθόνης εκκίνησης που φουσκώνουν το μέγεθος χωρίς κανένα λειτουργικό φορτίο.
| Μορφή | Συμπίεση σε σχέση με PNG | Υποστήριξη |
|---|---|---|
| PNG | — | Όλες οι πλατφόρμες |
| WebP | 25–35% | Android εγγενώς, iOS μέσω βιβλιοθηκών |
| AVIF | 35–45% | Android 12+, iOS 17+ |
| JPEG XR | 30–40% | Μόνο Windows |
Προσαρμοσμένες γραμματοσειρές μπορούν να καταλαμβάνουν 5–15 MB, ειδικά αν είναι συνδεδεμένη ολόκληρη η οικογένεια (όλα τα στυλ: Regular, Bold, Italic, BoldItalic). Χρησιμοποιήστε μόνο τα απαραίτητα στυλ και υποσύνολα χαρακτήρων μέσω subsetting — αφαίρεση γλύφων για γλώσσες που δεν υποστηρίζονται από την εφαρμογή. Υπηρεσίες όπως το Google Fonts και το Transfonter επιτρέπουν τη δημιουργία ενός ελάχιστου συνόλου χαρακτήρων. Για ήχους, χρησιμοποιήστε AAC/HE-AAC αντί για WAV και μη συμπιεσμένες μορφές — εξοικονόμηση έως 90% χωρίς απώλεια ποιότητας.
Κώδικας αποτεεί το 20–40% του μεγέθους της εφαρμογής, αλλά η βελτιστοποίησή του είναι δυσκολότερη από αυτήν των πόρων, επειδή απαιτεί ανάλυση εξαρτήσεων, συσκότιση και αφαίρεση νεκρού κώδικα χωρίς τον κίνδυνο να σπάσει η λειτουργικότητα.
ProGuard — εργαλείο για Android που εκτελεί συσκότιση, σμίκρυνση και βελτιστοποίηση κώδικα. R8 — ο διάδοχός του, ενσωματωμένος στο Android Gradle Plugin, λειτουργεί ταχύτερα και αποδοτικότερα. Το R8 αφαιρεί αχρησιμοποίητες κλάσεις και μεθόδους, συντομεύει ονόματα μεταβλητών και ξαναγράφει κώδικα για μείωση του αριθμού εντολών. Τυπική μείωση μεγέθους αρχείων DEX με R8 είναι 30–50%.
// build.gradle — διαμόρφωση R8 για σμίκρυνση
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt')
shrinkResources true
}
}
}
Βιβλιοθήκες — συχνή αιτία διογκωμένου μεγέθους. Μία βιβλιοθήκη μπορεί να φέρει μεταβατικές εξαρτήσεις που αυξάνουν το μέγεθος κατά 5–20 MB χωρίς άμεσο όφελος για την εφαρμογή. Χρησιμοποιήστε Gradle Version Catalog για Android και Swift Package Manager για iOS με ρητή αναφορά εξαρτήσεων. Αναλύστε το μέγεθος με το Build Analyzer στο Android Studio ή το Xcode Build Timeline. Αντικαταστήστε βαριές βιβλιοθήκες με ελαφρύτερες εναλλακτικές: για παράδειγμα, OkHttp (3 MB) αντί για Apache HTTP (15 MB).
Dead Code Stripping — αυτόματη αφαίρεση αχρησιμοποίητων μεθόδων και κλάσεων στο στάδιο σύνδεσης στο Xcode. Ενεργοποιείται μέσω Build Settings → Dead Code Stripping = YES. Bitcode — ενδιάμεση αναπαράσταση που η Apple μπορεί να αναμεταγλωττίσει για διαφορετικές αρχιτεκτονικές, αφαιρώντας αχρησιμοποίητες λειτουργίες. Ωστόσο, από το Xcode 14, το Bitcode έγινε προαιρετικό και η συμβολή του στη μείωση μεγέθους είναι 5–15% για έργα Objective-C και λιγότερο για Swift.
App Thinning — τεχνολογία της Apple που μειώνει αυτόματα το μέγεθος της εγκατεστημένης εφαρμογής παραδίδοντας μόνο τους πόρους που απαιτούνται για μια συγκεκριμένη συσκευή. Αποτελείται από τρία στοιχεία: Slicing, On-Demand Resources και Bitcode. Στο Android, το αντίστοιχο είναι το Android App Bundle (AAB) με Dynamic Delivery.
AAB — μορφή δημοσίευσης στο Google Play, όπου το κατάστημα δημιουργεί APK για κάθε συσκευή ξεχωριστά, συμπεριλαμβάνοντας μόνο πόρους για την αρχιτεκτονική της (armeabi-v7a, arm64-v8a), πυκνότητα οθόνης (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) και γλώσσες. Τυπική μείωση μεγέθους εγκατάστασης κατά τη μετάβαση από καθολικό APK σε AAB είναι 20–40%. Το Play Feature Delivery επιτρέπει τη λήψη λειτουργικών μονάδων κατ' απαίτηση, ενώ οι μονάδες Install-time περιλαμβάνονται στη βασική εγκατάσταση.
// build.gradle — διαμόρφωση AAB και Dynamic Features
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
On-Demand Resources (ODR) — μηχανισμός iOS όπου οι πόροι (επίπεδα παιχνιδιού, εικόνες υψηλής ανάλυσης, βίντεο) λαμβάνονται από τους διακομιστές της Apple μόνο όταν πραγματικά χρειάζονται από τον χρήστη. Το μέγεθος της αρχικής εγκατάστασης μπορεί να μειωθεί κατά 50–80%. Οι πόροι χωρίζονται σε τρεις κατηγορίες: Initial Install Tags (λαμβάνονται κατά την εγκατάσταση), Prefetched Tag Order (λαμβάνονται στο παρασκήνιο μετά την εγκατάσταση) και On-Demand (λαμβάνονται μόνο κατ' απαίτηση). Η Apple συνιστά τη χρήση ODR για περιεχόμενο που δεν χρειάζεται στην πρώτη οθόνη: επίπεδα παιχνιδιού, πρόσθετο περιεχόμενο, οδηγίες βίντεο.
SwiftUI υποστηρίζει ODR μέσω του χαρακτηριστικού Bundle.module, και το UIKit μέσω του NSBundleResourceRequest. Για παιχνίδια σε Unity και Unreal Engine, το ODR ενσωματώνεται σε επίπεδο εγγενούς περιβλήματος. Ο κύριος περιορισμός — οι πόροι ODR διαγράφονται από το σύστημα όταν δεν υπάρχει αρκετός χώρος, επομένως τα κρίσιμα για τη λειτουργία δεδομένα πρέπει να συμπεριλαμβάνονται στην κύρια μεταγλώττιση.
Συχνές ερωτήσεις
Λιγότερο από 50 MB — ιδανικό μέγεθος για μέγιστη μετατροπή εγκαταστάσεων. 50–100 MB — αποδεκτό για τις περισσότερες εφαρμογές. Πάνω από 100 MB — απαιτείται αιτιολόγηση μεγέθους (παιχνίδια, χάρτες εκτός σύνδεσης, επεξεργαστές περιεχομένου).
Πόροι δίνουν μεγαλύτερο κέρδος σε λιγότερο χρόνο. Ξεκινήστε με αφαίρεση αχρησιμοποίητων assets, μετατροπή PNG σε WebP και συμπίεση ήχων. Στη συνέχεια, προχωρήστε στη βελτιστοποίηση κώδικα μέσω R8 ή Dead Code Stripping.
Το Google Play δημιουργεί APK μόνο για τη συγκεκριμένη συσκευή: κώδικας arm64-v8a, πόροι xhdpi, απαιτούμενη γλώσσα. Το καθολικό APK περιέχει όλες τις παραλλαγές ταυτόχρονα, γεγονός που αυξάνει το μέγεθος κατά 1,5–2 φορές. Το AAB λύνει αυτό το πρόβλημα σε επίπεδο καταστήματος.
Έμμεσα. Το μεγάλο μέγεθος σημαίνει περισσότερο κώδικα για μεταγλώττιση JIT/AOT, περισσότερους πόρους για φόρτωση στη μνήμη και περισσότερο χρόνο για ανάλυση αρχείων manifest. Ωστόσο, η άμεση επίδραση στην απόδοση κατά τον χρόνο εκτέλεσης είναι ελάχιστη — το μέγεθος επηρεάζει την εγκατάσταση και την πρώτη εκκίνηση.
Install-time — μέρος της βασικής εγκατάστασης, διαθέσιμο αμέσως. On-Demand — λαμβάνεται στο πρώτο αίτημα, δεν περιλαμβάνεται στην αρχική εγκατάσταση. Χρησιμοποιήστε On-Demand για λειτουργίες που χρειάζονται λιγότερο από το 20% των χρηστών: διαγνωστικά, φροντιστήρια, φίλτρα AR.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης