Τον Αύγουστο του 2021, η Google πήρε μια απόφαση που άλλαξε ριζικά τον τρόπο διανομής των εφαρμογών Android: όλες οι νέες εφαρμογές που υποβάλλονται στο Google Play Store πρέπει να χρησιμοποιούν τη μορφή Πακέτο εφαρμογών Android (AAB) αντί για το παραδοσιακό APK. Αυτή η αλλαγή επηρέασε τους προγραμματιστές, τους χρήστες και ολόκληρο το οικοσύστημα διανομής εφαρμογών από τρίτους. Τι ακριβώς είναι όμως το App Bundle, πώς λειτουργεί και γιατί πρέπει να σας ενδιαφέρει;
Αυτός ο οδηγός καλύπτει τα πάντα, από τα τεχνικά εσωτερικά της μορφής AAB έως τις πρακτικές συνέπειες για τους χρήστες που θέλουν να μοιραστούν εφαρμογές με φίλους ή να τις εγκαταστήσουν σε συσκευές χωρίς πρόσβαση στο Play Store.
Τι είναι ένα πακέτο εφαρμογών Android;
Το Android App Bundle είναι μια μορφή δημοσίευσης που περιέχει όλο τον μεταγλωττισμένο κώδικα και τους πόρους μιας εφαρμογής, αλλά αναβάλλει τη δημιουργία του τελικού APK με δυνατότητα εγκατάστασης στο Google Play. Σκεφτείτε το ως ένα κύριο πρότυπο από το οποίο οι διακομιστές της Google δημιουργούν εν κινήσει βελτιστοποιημένα πακέτα για συγκεκριμένες συσκευές.
Σε αντίθεση με ένα APK, το οποίο είναι ένα πακέτο έτοιμο προς εγκατάσταση, ένα αρχείο AAB δεν μπορεί να εγκατασταθεί απευθείας σε μια συσκευή. Είναι ένα τεχνούργημα κατασκευής που μεταφορτώνεται στο Play Store, όπου η υποδομή της Google το επεξεργάζεται και δημιουργεί προσαρμοσμένα APK για κάθε διαμόρφωση συσκευής.
Η επέκταση αρχείου είναι .aab και εσωτερικά χρησιμοποιεί μια μορφή προσωρινής μνήμης πρωτοκόλλου σε συνδυασμό με μια δομή που μοιάζει με ZIP. Περιέχει τον bytecode DEX της εφαρμογής, πόρους, στοιχεία, εγγενείς βιβλιοθήκες και ένα ειδικό αρχείο μεταδεδομένων δέσμης που λέει στο Google Play πώς να διαχωρίσει το περιεχόμενο.
Γιατί η Google επέβαλε τα πακέτα AAB
Το κύριο κίνητρο πίσω από τα πακέτα εφαρμογών είναι το μείωση των μεγεθών λήψης εφαρμογών. Μια τυπική εφαρμογή Android πρέπει να υποστηρίζει πολλαπλές πυκνότητες οθόνης (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), πολλές αρχιτεκτονικές CPU (armeabi-v7a, arm64-v8a, x86, x86_64) και πολλές γλώσσες. Στο παραδοσιακό μοντέλο APK, όλοι αυτοί οι πόροι ομαδοποιούνται σε ένα μόνο αρχείο, παρόλο που οποιαδήποτε δεδομένη συσκευή χρειάζεται μόνο ένα κλάσμα από αυτούς.
Σκεφτείτε ένα παιχνίδι που περιλαμβάνει εγγενείς βιβλιοθήκες για τέσσερις αρχιτεκτονικές CPU και υφές για πέντε πυκνότητες οθόνης. Το γενικό APK μπορεί να είναι 200 MB, αλλά μια έκδοση για συγκεκριμένη συσκευή που περιέχει μόνο τη σχετική αρχιτεκτονική και πυκνότητα θα μπορούσε να είναι 80 MB. Αυτό είναι μια μείωση 60% στο μέγεθος λήψης.
Η Google αναφέρει ότι οι εφαρμογές που χρησιμοποιούν Πακέτα εφαρμογών είναι κατά μέσο όρο 15% μικρότερες από τα καθολικά ισοδύναμα APK τους. Για μεγάλες εφαρμογές και παιχνίδια, η εξοικονόμηση μπορεί να είναι πολύ πιο δραματική. Μικρότερες λήψεις σημαίνουν ταχύτερες εγκαταστάσεις, μικρότερη κατανάλωση εύρους ζώνης και λιγότερες εγκαταλειμμένες εγκαταστάσεις λόγω ανησυχιών σχετικά με το μέγεθος.
Πώς λειτουργούν εσωτερικά τα πακέτα εφαρμογών
Η Δομή Δέσμης
Ένα αρχείο AAB είναι οργανωμένο σε ενότητες, με κάθε ενότητα να περιέχει τον δικό της κώδικα, πόρους και στοιχεία. Η πιο κοινή δομή περιλαμβάνει:
- Βασική ενότητα: Περιέχει τον βασικό κώδικα εφαρμογής και τους πόρους που χρειάζεται κάθε συσκευή. Αυτό είναι πάντα εγκατεστημένο.
- Διαχωρίσεις διαμόρφωσης: Ξεχωριστές ενότητες για γλωσσικούς πόρους, πόρους πυκνότητας οθόνης και εγγενείς βιβλιοθήκες ABI (αρχιτεκτονική CPU).
- Ενότητες δυναμικών χαρακτηριστικών: Προαιρετικές μονάδες που μπορούν να ληφθούν κατ' απαίτηση μετά την αρχική εγκατάσταση.
- Πακέτα περιουσιακών στοιχείων: Μεγάλα στοιχεία όπως επίπεδα παιχνιδιών ή μέσα που μπορούν να παραδοθούν κατά την εγκατάσταση, κατόπιν ζήτησης ή στο παρασκήνιο.
Διαχωρίστε τη γενιά APK
Όταν ένας χρήστης κατεβάζει μια εφαρμογή από το Play Store, οι διακομιστές της Google εξετάζουν τη διαμόρφωση της συσκευής και δημιουργούν ένα σύνολο διαχωρισμένων APK προσαρμοσμένων στη συγκεκριμένη συσκευή. Μια τυπική εγκατάσταση μπορεί να περιλαμβάνει:
- base.apk, Ο βασικός κώδικας εφαρμογής και οι βασικοί πόροι
- split_config.arm64_v8a.apk, Εγγενείς βιβλιοθήκες για την CPU της συσκευής
- split_config.xxhdpi.apk, Πόροι για την πυκνότητα οθόνης της συσκευής
- split_config.en.apk, Πόροι γλώσσας για τις τοπικές ρυθμίσεις του χρήστη
Αυτά τα διαχωρισμένα APK εγκαθίστανται μαζί ως μια ενιαία λογική εφαρμογή. Ο διαχειριστής πακέτων Android τα αντιμετωπίζει ως μία εφαρμογή, αλλά είναι φυσικά ξεχωριστά αρχεία στη συσκευή. Αυτός είναι ο μηχανισμός που επιτρέπει την εξοικονόμηση μεγέθους.
Δυναμική Παράδοση
Ένα από τα πιο ισχυρά χαρακτηριστικά των App Bundles είναι η δυναμική παράδοση. Οι προγραμματιστές μπορούν να επισημάνουν ορισμένες λειτουργίες ως με δυνατότητα λήψης κατά παραγγελία. Για παράδειγμα, μια εφαρμογή επεξεργασίας φωτογραφιών μπορεί να περιλαμβάνει προηγμένα φίλτρα ως λειτουργική μονάδα δυναμικών χαρακτηριστικών. Οι χρήστες που δεν χρησιμοποιούν ποτέ αυτά τα φίλτρα δεν τα κατεβάζουν ποτέ, εξοικονομώντας χώρο αποθήκευσης.
Οι μονάδες δυναμικών χαρακτηριστικών κατεβαίνουν και εγκαθίστανται μέσω της βιβλιοθήκης Play Core κατά το χρόνο εκτέλεσης. Η εφαρμογή μπορεί να ελέγξει εάν μια λειτουργική μονάδα είναι εγκατεστημένη και να ζητήσει τη λήψη της όταν χρειάζεται, έτσι ώστε ο χρήστης να βιώσει τη νέα λειτουργία ως μικρή λήψη εντός εφαρμογής και όχι ως πλήρη επανεγκατάσταση.
AAB εναντίον APK: Βασικές διαφορές
Η κατανόηση των διαφορών μεταξύ αυτών των μορφών βοηθά να διευκρινιστεί πότε είναι κατάλληλη η κάθε μία:
- Τα αρχεία APK Εγκατάσταση: μπορούν να εγκατασταθούν απευθείας σε οποιαδήποτε συσκευή Android. Τα αρχεία AAB δεν μπορούν να εγκατασταθούν απευθείας και πρέπει πρώτα να υποβληθούν σε επεξεργασία.
- Μέγεθος: Ένα καθολικό APK περιέχει πόρους για όλες τις διαμορφώσεις. Ένα AAB επιτρέπει την παράδοση για συγκεκριμένη συσκευή, με αποτέλεσμα μικρότερες λήψεις.
- Υπογραφή: Με τα APK, ο προγραμματιστής υπογράφει το τελικό πακέτο με δυνατότητα εγκατάστασης. Με τα AAB, ο προγραμματιστής υπογράφει το πακέτο και η Google υπογράφει ξανά τα APK που δημιουργούνται χρησιμοποιώντας την Υπογραφή εφαρμογής Play.
- Τα Διανομή: APK μπορούν να διανεμηθούν μέσω οποιουδήποτε καναλιού. Τα AAB έχουν σχεδιαστεί κυρίως για το Play Store, αν και εργαλεία όπως το bundletool μπορούν να δημιουργήσουν APK από αυτά τοπικά.
- Δυνατότητα κοινής χρήσης: Μπορείτε εύκολα να μοιραστείτε ένα αρχείο APK με άλλο άτομο. Η κοινή χρήση μιας εφαρμογής εγκατεστημένης από ένα AAB απαιτεί τη συλλογή όλων των διαχωρισμένων APK, κάτι που είναι πιο περίπλοκο.
Η διαμάχη για την υπογραφή
Μία από τις πιο συζητημένες πτυχές της εντολής της AAB είναι το Παίξτε App Signing. Όταν ένας προγραμματιστής ανεβάζει ένα AAB, η Google κρατά το κλειδί υπογραφής που χρησιμοποιείται για την υπογραφή των τελικών APK που παραδίδονται στους χρήστες. Αυτό σημαίνει ότι η Google έχει τεχνικά τη δυνατότητα να τροποποιήσει το περιεχόμενο APK πριν το υπογράψει και το παραδώσει.
Η Google υποστηρίζει ότι αυτό είναι απαραίτητο επειδή πρέπει να υπογράψουν τα διαχωρισμένα APK που δημιουργούν. Οι προγραμματιστές διατηρούν ένα κλειδί μεταφόρτωσης για τον έλεγχο ταυτότητας των μεταφορτώσεων τους, αλλά το πραγματικό κλειδί υπογραφής εφαρμογής διαχειρίζεται η υποδομή της Google.
Για τους περισσότερους προγραμματιστές, αυτός είναι ένας εύλογος συμβιβασμός. Η Google παρέχει υπηρεσίες δημιουργίας αντιγράφων ασφαλείας και ανάκτησης κλειδιών και εξαλείφεται ο κίνδυνος απώλειας κλειδιού (που θα αποτρέψει οριστικά τις ενημερώσεις εφαρμογών). Ωστόσο, οι προγραμματιστές που εστιάζουν στο απόρρητο και οι υποστηρικτές του ανοιχτού κώδικα έχουν εκφράσει ανησυχίες σχετικά με αυτή τη συγκέντρωση εμπιστοσύνης.
Τι σημαίνει αυτό για χρήστες που μοιράζονται εφαρμογές
Η μετάβαση στα Πακέτα εφαρμογών έχει σημαντικές επιπτώσεις για τους χρήστες που θέλουν να μοιράζονται εφαρμογές εκτός του Play Store:
Εξαγωγή εγκατεστημένων εφαρμογών
Όταν εξάγετε μια εφαρμογή που είναι εγκατεστημένη από ένα AAB, δεν λαμβάνετε ούτε ένα αρχείο APK. Αντίθετα, λαμβάνετε μια συλλογή από χωρισμένα APK. Αυτοί οι διαχωρισμοί αφορούν συγκεκριμένες συσκευές, πράγμα που σημαίνει ότι μια εφαρμογή που εξάγεται από ένα τηλέφωνο με επεξεργαστή ARM64 και οθόνη xxhdpi δεν θα λειτουργεί σε μια συσκευή με διαφορετική διαμόρφωση.
Μορφές XAPK και APKS
Για την αντιμετώπιση της πρόκλησης της κοινής χρήσης διαχωρισμένων APK, δημιουργήθηκαν μορφές κοντέινερ όπως το XAPK και το APKS. Αυτές οι μορφές ομαδοποιούν όλα τα χωρισμένα APK σε ένα ενιαίο αρχείο με δυνατότητα λήψης. Όταν αντιμετωπίζετε ένα αρχείο XAPK, πιθανότατα περιέχει μια εφαρμογή που αρχικά διανεμήθηκε ως App Bundle.
Το Μετατροπέας XAPK σε APK μπορεί να σας βοηθήσει να εξαγάγετε το βασικό APK από αυτές τις μορφές κοντέινερ. Ωστόσο, λάβετε υπόψη ότι το βασικό APK από μόνο του ενδέχεται να μην περιέχει όλους τους πόρους που απαιτούνται για τη σωστή λειτουργία της εφαρμογής σε κάθε συσκευή, καθώς η πυκνότητα και οι συγκεκριμένοι πόροι για το ABI ενδέχεται να βρίσκονται στα διαχωρισμένα APK.
Χρήση bundletool
Η Google παρέχει ένα εργαλείο ανοιχτού κώδικα που ονομάζεται bundletool που μπορεί να δημιουργήσει τοπικά APK από ένα αρχείο AAB. Οι προγραμματιστές μπορούν να το χρησιμοποιήσουν για να δημιουργήσουν καθολικά APK για δοκιμή ή εναλλακτική διανομή. Η εντολή μοιάζει με:
bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal
Αυτό δημιουργεί ένα καθολικό APK που περιέχει όλους τους πόρους για όλες τις διαμορφώσεις. Θα είναι μεγαλύτερο από μια έκδοση για συγκεκριμένη συσκευή, αλλά θα λειτουργεί σε οποιαδήποτε συσκευή. Αυτή είναι η προσέγγιση που χρησιμοποιείται από το Μετατροπέας AAB σε APK μας.
Αντίκτυπος στα εναλλακτικά καταστήματα εφαρμογών
Η εντολή AAB επηρεάζει κυρίως το Google Play Store. Τα εναλλακτικά καταστήματα εφαρμογών και τα κανάλια απευθείας διανομής μπορούν να δέχονται αρχεία APK. Οι προγραμματιστές που θέλουν να διανέμουν εκτός του Play μπορούν να συνεχίσουν τη δημιουργία καθολικών APK παράλληλα με τις μεταφορτώσεις AAB τους.
Ωστόσο, ορισμένοι προγραμματιστές δημιουργούν μόνο AAB και βασίζονται αποκλειστικά στο Play για διανομή. Αυτό σημαίνει ότι οι εφαρμογές από αυτούς τους προγραμματιστές είναι πιο δύσκολο να αποκτηθούν εκτός του οικοσυστήματος του Play Store. Τα αποθετήρια εφαρμογών τρίτου μέρους έχουν προσαρμοστεί είτε φιλοξενώντας τις διαχωρισμένες συλλογές APK (ως αρχεία XAPK ή APKS) είτε χρησιμοποιώντας το bundletool για τη δημιουργία καθολικών APK.
Ενότητες δυναμικών χαρακτηριστικών στην πράξη
Οι μονάδες δυναμικών χαρακτηριστικών αντιπροσωπεύουν μια από τις πιο ενδιαφέρουσες δυνατότητες της μορφής App Bundle. Ακολουθούν ορισμένες περιπτώσεις χρήσης πραγματικού κόσμου:
- Χαρακτηριστικά κάμερας: Μια εφαρμογή μπορεί να περιλαμβάνει φίλτρα AR ως δυναμική μονάδα, η λήψη της οποίας γίνεται μόνο όταν ο χρήστης αποκτήσει για πρώτη φορά πρόσβαση στη λειτουργία της κάμερας.
- Πακέτα γλωσσών: Τα δεδομένα μετάφρασης για λιγότερο κοινές γλώσσες μπορούν να παραδοθούν κατ' απαίτηση αντί να ομαδοποιηθούν με κάθε εγκατάσταση.
- Τα παιχνίδια Επίπεδα παιχνιδιού: μπορούν να προσφέρουν πρόσθετο περιεχόμενο καθώς οι παίκτες προχωρούν, διατηρώντας την αρχική λήψη μικρή.
- Επαγγελματικά εργαλεία: Οι προηγμένες λειτουργίες σε εφαρμογές παραγωγικότητας μπορούν να παραδοθούν μόνο σε χρήστες που τις χρειάζονται.
Για τους χρήστες, αυτό σημαίνει ότι το εγκατεστημένο μέγεθος μιας εφαρμογής μπορεί να αυξηθεί με την πάροδο του χρόνου καθώς γίνεται λήψη δυναμικών λειτουργικών μονάδων. Σημαίνει επίσης ότι η κοινή χρήση μιας τέτοιας εφαρμογής απαιτεί τη συμπερίληψη όλων των ληφθέντων λειτουργικών μονάδων, γεγονός που περιπλέκει περαιτέρω τη διαδικασία εξαγωγής.
Βέλτιστες πρακτικές για προγραμματιστές
Εάν αναπτύσσετε εφαρμογές Android, ακολουθούν προτάσεις για αποτελεσματική εργασία με τα App Bundle:
- Πάντα δοκιμάζετε με bundletool τοπικά πριν από τη μεταφόρτωση στο Play. Δημιουργήστε APK για συγκεκριμένες συσκευές και επαληθεύστε ότι λειτουργούν σωστά.
- Χρησιμοποιήστε το εσωτερικό κομμάτι δοκιμών του Play Console για να επαληθεύσετε ότι τα διαχωρισμένα APK εγκαθίστανται και λειτουργούν σωστά σε πραγματικές συσκευές.
- Εξετάστε το ενδεχόμενο παροχής ενός καθολικού APK για εναλλακτικά κανάλια διανομής εάν η βάση χρηστών σας εκτείνεται πέρα από το Play Store.
- Λάβετε υπόψη τα όρια της μονάδας δυναμικών χαρακτηριστικών. Οι δυνατότητες που χρησιμοποιούνται συχνά θα πρέπει να βρίσκονται στη βασική μονάδα, όχι στις δυναμικές μονάδες.
- Δοκιμή σε συσκευές με διαφορετικές διαμορφώσεις για να διασφαλίσετε ότι οι διαχωρισμοί διαμόρφωσης δημιουργούνται σωστά και ότι δεν λείπουν πόροι.
- Διατηρήστε το κλειδί μεταφόρτωσης ασφαλές. Ενώ η Google διαχειρίζεται το κλειδί υπογραφής εφαρμογής, το κλειδί μεταφόρτωσης επαληθεύει την ταυτότητά σας ως προγραμματιστή.
Το μέλλον της διανομής εφαρμογών
Η μορφή του App Bundle συνεχίζει να εξελίσσεται. Η Google έχει εισαγάγει λειτουργίες όπως το Play Asset Delivery για μεγάλα στοιχεία παιχνιδιών, το SDK Runtime για διαφημιστικά SDK και βελτιωμένη υποστήριξη για τις διαμορφώσεις Wear OS και Android TV. Η τάση είναι προς πιο αναλυτική, κατ' απαίτηση παράδοση στοιχείων εφαρμογής.
Για τους χρήστες, αυτό σημαίνει ότι η έννοια ενός ενιαίου, αυτόνομου αρχείου εφαρμογής γίνεται λιγότερο κοινή για τις εφαρμογές του Play Store. Η κατανόηση μορφών όπως το XAPK, το APKS και τα διαθέσιμα εργαλεία για εργασία μαζί τους γίνεται όλο και πιο σημαντική για οποιονδήποτε διαχειρίζεται εφαρμογές εκτός της τυπικής ροής του Play Store.
Πότε να διατηρήσετε ένα AAB έναντι Πότε να δημιουργήσετε ένα καθολικό APK
Το Πακέτο εφαρμογών Android αντιπροσωπεύει μια θεμελιώδη αλλαγή στον τρόπο συσκευασίας και παράδοσης των εφαρμογών. Ενώ αποφέρει πραγματικά οφέλη όσον αφορά το μέγεθος λήψης και την αποτελεσματικότητα παράδοσης, εισάγει επίσης πολυπλοκότητα για τους χρήστες που μοιράζονται εφαρμογές ή τις εγκαθιστούν από εναλλακτικές πηγές. Η κατανόηση του τρόπου λειτουργίας των AAB, του τρόπου δημιουργίας διαχωρισμένων APK και των εργαλείων που είναι διαθέσιμα για μετατροπή μεταξύ των μορφών, σας δίνει αυτό που χρειάζεστε για να επιλέξετε τη σωστή μορφή και να κάνετε μετατροπή μεταξύ τους με σιγουριά.
Οι προγραμματιστές προσεγγίζουν το AAB για να βελτιστοποιήσουν τον τρόπο παράδοσης μιας εφαρμογής. Οι περισσότεροι καθημερινοί χρήστες το συναντούν μόνο όταν προσπαθούν να εγκαταστήσουν κάτι σε μια συσκευή χωρίς πρόσβαση στο Play Store. Είτε έτσι είτε αλλιώς, αυτό που αξίζει να θυμάστε είναι απλό: το AAB είναι μια μορφή δημοσίευσης, όχι μια μορφή εγκατάστασης, και υπάρχουν εργαλεία που γεφυρώνουν το χάσμα μεταξύ των δύο.