Κατανόηση του αποθηκευτικού χώρου Android: Τι άλλαξε και γιατί έχει σημασία

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

Εάν έχετε προσπαθήσει ποτέ να διαχειριστείτε αρχεία σε μια συσκευή Android, πιθανότατα παρατηρήσατε ότι τα πράγματα λειτουργούν διαφορετικά ανάλογα με την έκδοση του Android που χρησιμοποιείτε. Ξεκινώντας με το Android 10, η Google εισήγαγε μια θεμελιώδη αλλαγή στον τρόπο με τον οποίο οι εφαρμογές αλληλεπιδρούν με το σύστημα αρχείων. Αυτή η αλλαγή, γνωστή ως Αποθήκευση εύρους, επαναπροσδιόρισε τους κανόνες σχετικά με την ανάγνωση και την εγγραφή αρχείων σε κοινόχρηστο χώρο αποθήκευσης. Για τους χρήστες που φορτώνουν εφαρμογές, διαχειρίζονται αρχεία OBB ή εργάζονται με διαχειριστές αρχείων, η κατανόηση του εύρους αποθήκευσης είναι απαραίτητη.

Σε αυτό το άρθρο, θα διερευνήσουμε τι είναι ο χώρος αποθήκευσης εύρους, γιατί τον εφάρμοσε η Google, πώς επηρεάζει τους καθημερινούς χρήστες και προγραμματιστές και τι σημαίνει για οποιονδήποτε εγκαθιστά αρχεία APK ή XAPK εκτός του Play Store.

Το πρόβλημα με το παλιό μοντέλο αποθήκευσης

Πριν από το Android 10, κάθε εφαρμογή που ζητούσε την άδεια READ_EXTERNAL_STORAGE ή WRITE_EXTERNAL_STORAGE μπορούσε να έχει πρόσβαση σχεδόν σε οποιοδήποτε αρχείο στον κοινόχρηστο χώρο αποθήκευσης της συσκευής. Αυτό περιλάμβανε φωτογραφίες, έγγραφα, λήψεις, ακόμη και αρχεία που δημιουργήθηκαν από άλλες εφαρμογές. Αν και αυτό έκανε τη διαχείριση αρχείων βολική, δημιουργούσε σοβαρές ανησυχίες για το απόρρητο και την ασφάλεια.

Σκεφτείτε μια απλή εφαρμογή φακού. Σύμφωνα με το παλιό μοντέλο, εάν του παραχωρούσατε άδεια αποθήκευσης, θα μπορούσε να διαβάσει σιωπηλά τις φωτογραφίες σας, να σαρώσει τα ληφθέντα έγγραφά σας ή ακόμα και να τροποποιήσει αρχεία που ανήκουν σε άλλες εφαρμογές. Δεν υπήρχε κοκκώδης έλεγχος. Είτε παραχωρήσατε σε μια εφαρμογή πλήρη πρόσβαση σε ολόκληρο τον αποθηκευτικό χώρο σας είτε τον αρνηθήκατε εντελώς.

Αυτή η ευρεία πρόσβαση οδήγησε σε προβλήματα του πραγματικού κόσμου. Ορισμένες εφαρμογές συγκέντρωσαν δεδομένα χρήστη σαρώνοντας τον χώρο αποθήκευσης για ευαίσθητα αρχεία. Άλλοι άφησαν πίσω τους ορφανά αρχεία που γέμισαν τη συσκευή πολύ μετά την απεγκατάσταση της εφαρμογής. Η Google χρειαζόταν μια λύση που να εξισορροπεί τη χρηστικότητα με το απόρρητο και η απάντησή της ήταν η εύρος αποθήκευσης.

Τι κάνει στην πραγματικότητα το Scoped Storage

Η αποθήκευση εύρους αλλάζει θεμελιωδώς τη σχέση μεταξύ των εφαρμογών και του συστήματος αρχείων. Σύμφωνα με αυτό το μοντέλο, κάθε εφαρμογή έχει το δικό της ιδιωτικό sandbox σε εξωτερικό χώρο αποθήκευσης, που συνήθως βρίσκεται στο /Android/data/[package.name]/. Οι εφαρμογές μπορούν ελεύθερα να διαβάζουν και να γράφουν μέσα στο δικό τους sandbox χωρίς να χρειάζονται καθόλου δικαιώματα.

Ωστόσο, η πρόσβαση σε αρχεία εκτός αυτού του sandbox απαιτεί τη μετάβαση μέσω ελεγχόμενων API. Δείτε πώς λειτουργεί το νέο μοντέλο:

Αποθηκευτικός χώρος ειδικά για την εφαρμογή

Κάθε εφαρμογή έχει έναν αποκλειστικό κατάλογο στον οποίο μόνο αυτή μπορεί να έχει πρόσβαση. Όταν απεγκατασταθεί η εφαρμογή, αυτός ο κατάλογος καθαρίζεται αυτόματα. Καμία άλλη εφαρμογή δεν μπορεί να διαβάσει ή να γράψει σε αυτήν την τοποθεσία χωρίς πρόσβαση root. Αυτό εξαλείφει το πρόβλημα των ορφανών αρχείων και αποτρέπει την κατασκοπεία δεδομένων μεταξύ εφαρμογών.

Συλλογές πολυμέσων

Για κοινόχρηστα μέσα όπως φωτογραφίες, βίντεο και αρχεία ήχου, το Android παρέχει το MediaStore API. Οι εφαρμογές μπορούν να συνεισφέρουν πολυμέσα σε κοινόχρηστες συλλογές και να διαβάζουν μέσα που δημιουργούνται από άλλες εφαρμογές, αλλά μόνο μέσω αυτής της δομημένης διεπαφής. Μια εφαρμογή μπορεί να δει τα δικά της πολυμέσα χωρίς άδεια, αλλά η πρόσβαση στα μέσα άλλων εφαρμογών απαιτεί τις άδειες READ_MEDIA_IMAGES, READ_MEDIA_VIDEO ή READ_MEDIA_AUDIO που εισάγονται στο Android 13.

Πλαίσιο πρόσβασης αποθήκευσης

Για έγγραφα και άλλα αρχεία που δεν είναι πολυμέσων, οι εφαρμογές πρέπει να χρησιμοποιούν το Storage Access Framework (SAF). Αυτό παρουσιάζει έναν επιλογέα αρχείων συστήματος στον χρήστη, ο οποίος επιλέγει ρητά σε ποια αρχεία ή καταλόγους μπορεί να έχει πρόσβαση η εφαρμογή. Η εφαρμογή δεν έχει ποτέ πλήρη πρόσβαση σε ολόκληρο το σύστημα αρχείων.

Η άδεια MANAGE_EXTERNAL_STORAGE

Για εφαρμογές που χρειάζονται πραγματικά ευρεία πρόσβαση αρχείων, όπως διαχειριστές αρχείων, εργαλεία δημιουργίας αντιγράφων ασφαλείας και λογισμικό προστασίας από ιούς, το Android παρέχει την άδεια MANAGE_EXTERNAL_STORAGE. Ωστόσο, αυτή η άδεια απαιτεί ειδική έγκριση από την Google για εφαρμογές που διανέμονται μέσω του Play Store και οι χρήστες πρέπει να την εκχωρήσουν με μη αυτόματο τρόπο μέσω των ρυθμίσεων συστήματος και όχι μέσω ενός απλού διαλόγου.

Το Χρονολόγιο διάθεσης

Η Google δεν επέβαλλε αποθηκευτικό χώρο εντός της νύχτας. Η μετάβαση έγινε σταδιακά:

  • Εισήχθη ο αποθηκευτικός χώρος Android 10 (API 29):, αλλά οι εφαρμογές μπορούσαν να εξαιρεθούν χρησιμοποιώντας το requestLegacyExternalStorage="true" στο μανιφέστο τους. Αυτό έδωσε στους προγραμματιστές χρόνο να προσαρμοστούν.
  • Android 11 (API 30): Η σημαία παλαιού τύπου αγνοήθηκε για εφαρμογές που στοχεύουν API 30 ή νεότερο. Ο χώρος αποθήκευσης εύρους έγινε υποχρεωτικός για νέες και ενημερωμένες εφαρμογές στο Play Store.
  • Android 12 και μεταγενέστερα: Πραγματοποιήθηκαν περαιτέρω βελτιώσεις, συμπεριλαμβανομένων των αδειών πολυμέσων και βελτιωμένης απόδοσης SAF.
  • Android 13 (API 33): Η ευρεία άδεια READ_EXTERNAL_STORAGE καταργήθηκε υπέρ συγκεκριμένων αδειών πολυμέσων.
  • Android 14 (API 34): Εισήχθη μερική πρόσβαση σε φωτογραφίες και βίντεο, επιτρέποντας στους χρήστες να παραχωρούν πρόσβαση σε συγκεκριμένα αρχεία και όχι σε ολόκληρες βιβλιοθήκες πολυμέσων.

Πώς ο χώρος αποθήκευσης εύρους επηρεάζει την πλευρική φόρτωση

Για τους χρήστες που εγκαθιστούν εφαρμογές εκτός του Play Store, ο χώρος αποθήκευσης εύρους εισάγει ορισμένες πρακτικές προκλήσεις που αξίζει να κατανοηθούν.

Λήψη και πρόσβαση σε αρχεία APK

Όταν κάνετε λήψη ενός αρχείου APK μέσω ενός προγράμματος περιήγησης, συνήθως προσγειώνεται στο φάκελο "Λήψεις". Στην περιοχή αποθήκευσης, η εφαρμογή προγράμματος περιήγησης κατέχει αυτό το αρχείο. Εάν θέλετε να το εγκαταστήσετε χρησιμοποιώντας μια διαφορετική εφαρμογή, όπως έναν διαχειριστή αρχείων, αυτός ο διαχειριστής αρχείων χρειάζεται κατάλληλη πρόσβαση. Οι περισσότεροι σύγχρονοι διαχειριστές αρχείων το χειρίζονται σωστά μέσω του SAF, αλλά οι παλαιότεροι μπορεί να δυσκολεύονται.

Το πρόγραμμα εγκατάστασης πακέτου συστήματος εξακολουθεί να έχει πρόσβαση στα αρχεία που επιλέγετε ρητά μέσω του εργαλείου επιλογής αρχείων, επομένως η βασική ροή λήψης και εγκατάστασης ενός APK εξακολουθεί να λειτουργεί. Ωστόσο, οι αυτοματοποιημένες ροές εργασιών εγκατάστασης που βασίζονται στην άμεση πρόσβαση στη διαδρομή αρχείου ενδέχεται να διακοπούν.

Αρχεία OBB και δεδομένα παιχνιδιού

Αυτό είναι όπου η αποθήκευση εύρους δημιουργεί τη μεγαλύτερη τριβή για τα sideloaders. Πολλά μεγάλα παιχνίδια χρησιμοποιούν αρχεία OBB (Opaque Binary Blob) που είναι αποθηκευμένα στο /Android/obb/[package.name]/. Σύμφωνα με το παλιό μοντέλο, θα μπορούσατε απλώς να αντιγράψετε αρχεία OBB στον σωστό κατάλογο χρησιμοποιώντας οποιονδήποτε διαχειριστή αρχείων.

Με την αποθήκευση εύρους, ο κατάλογος /Android/obb/ είναι περιορισμένος. Σε Android 11 και μεταγενέστερες εκδόσεις, οι κανονικές εφαρμογές δεν μπορούν να γράψουν στον κατάλογο OBB άλλης εφαρμογής. Αυτό σημαίνει ότι εάν κάνετε λήψη ενός αρχείου XAPK που περιέχει δεδομένα OBB, το πρόγραμμα εγκατάστασης χρειάζεται ειδικό χειρισμό για να τοποθετήσει σωστά αυτά τα αρχεία.

Εργαλεία όπως το Εξαγωγέας OBB μπορούν να σας βοηθήσουν να εξαγάγετε αρχεία OBB από πακέτα XAPK, αλλά η τοποθέτησή τους στον σωστό κατάλογο σε νεότερες εκδόσεις Android ενδέχεται να απαιτεί τη χρήση διαχειριστή αρχείων με άδεια MANAGE_EXTERNAL_STORAGE ή τη χρήση εντολών ADB από υπολογιστή.

Θέματα εγκατάστασης XAPK

Τα αρχεία XAPK ομαδοποιούν ένα APK μαζί με δεδομένα OBB και μερικές φορές χωρίζουν τις διαμορφώσεις APK. Η εγκατάσταση αυτών σε συσκευές με Android 11 ή νεότερη έκδοση απαιτεί ένα πρόγραμμα εγκατάστασης που κατανοεί τους περιορισμούς αποθήκευσης εύρους. Το πρόγραμμα εγκατάστασης πρέπει είτε να διατηρεί την άδεια MANAGE_EXTERNAL_STORAGE είτε να χρησιμοποιήσει τα κατάλληλα API για να τοποθετήσει τα αρχεία OBB στη σωστή θέση.

Αυτός είναι ένας λόγος για τον οποίο η μετατροπή αρχείων XAPK σε τυπική μορφή APK μπορεί να είναι χρήσιμη. Ένα αυτόνομο APK δεν απαιτεί τοποθέτηση αρχείου OBB, απλοποιώντας τη διαδικασία εγκατάστασης σε νεότερες εκδόσεις Android. Μπορείτε να χρησιμοποιήσετε το Μετατροπέας XAPK σε APK για να εξαγάγετε το βασικό APK από ένα πακέτο XAPK.

Τι πρέπει να γνωρίζουν οι προγραμματιστές

Εάν αναπτύσσετε εφαρμογές Android, ο χώρος αποθήκευσης εύρους απαιτεί επανεξέταση του τρόπου χειρισμού των αρχείων:

  • Χρησιμοποιήστε καταλόγους για συγκεκριμένες εφαρμογές για τυχόν αρχεία που χρειάζεται μόνο η εφαρμογή σας. Αυτά δεν απαιτούν δικαιώματα και καθαρίζονται αυτόματα κατά την απεγκατάσταση.
  • Χρησιμοποιήστε το MediaStore για φωτογραφίες, βίντεο και ήχο που θα πρέπει να είναι ορατά σε άλλες εφαρμογές και να επιβιώνουν κατά την απεγκατάσταση.
  • Χρησιμοποιήστε SAF όταν η εφαρμογή σας πρέπει να λειτουργεί με έγγραφα ή καταλόγους που έχουν επιλεγεί από τον χρήστη.
  • Αποφύγετε τις διαδρομές αρχείων με σκληρό κώδικα. Διαδρομές όπως το /sdcard/MyApp/ δεν είναι πλέον αξιόπιστες. Χρησιμοποιήστε το Context.getExternalFilesDir().
  • Η συμπεριφορά Δοκιμή σε πολλαπλά επίπεδα API. διαφέρει σημαντικά μεταξύ των Android 10, 11, 13 και 14.

Στρατηγικές Μετανάστευσης

Εάν η εφαρμογή σας αποθήκευε προηγουμένως αρχεία σε κοινόχρηστο χώρο αποθήκευσης, χρειάζεστε ένα σχέδιο μετεγκατάστασης. Η προτεινόμενη προσέγγιση είναι να αντιγράψετε τα υπάρχοντα αρχεία σε χώρο αποθήκευσης για συγκεκριμένη εφαρμογή κατά την πρώτη εκκίνηση μετά την ενημέρωση και, στη συνέχεια, να διαγράψετε τα παλιά αντίγραφα. Χρησιμοποιήστε το Environment.getExternalStorageDirectory() με τη σημαία παλαιού τύπου κατά τη μεταβατική περίοδο για να διαβάσετε παλιά αρχεία και, στη συνέχεια, μετακινήστε τα στη νέα θέση.

Συνήθεις παρανοήσεις

"Ο χώρος αποθήκευσης εύρους σημαίνει ότι οι εφαρμογές δεν μπορούν να έχουν πρόσβαση σε κανένα αρχείο"

Αυτό είναι ψευδές. Οι εφαρμογές μπορούν ακόμα να έχουν πρόσβαση στα δικά τους αρχεία ελεύθερα, να συνεισφέρουν σε κοινόχρηστες συλλογές πολυμέσων και να ζητούν πρόσβαση σε συγκεκριμένα αρχεία μέσω του εργαλείου επιλογής συστήματος. Αυτό που άλλαξε είναι ότι οι εφαρμογές δεν μπορούν πλέον να περιηγούνται αθόρυβα σε ολόκληρο το σύστημα αρχείων.

"Οι διαχειριστές αρχείων είναι κατεστραμμένοι σε νέες εκδόσεις Android"

Οι διαχειριστές αρχείων που ζητούν MANAGE_EXTERNAL_STORAGE εξακολουθούν να λειτουργούν. Ο χρήστης πρέπει απλώς να χορηγήσει αυτήν την ειδική άδεια μέσω των ρυθμίσεων. Οι πιο δημοφιλείς διαχειριστές αρχείων έχουν ήδη προσαρμοστεί σε αυτήν την απαίτηση.

"Η αποθήκευση εύρους επηρεάζει μόνο την κάρτα SD"

Ο χώρος αποθήκευσης εύρους ισχύει για όλο τον κοινόχρηστο χώρο αποθήκευσης, συμπεριλαμβανομένου του εσωτερικού κοινόχρηστου χώρου αποθήκευσης. Ο όρος "εξωτερικός χώρος αποθήκευσης" στο Android αναφέρεται σε κοινόχρηστο χώρο αποθήκευσης που είναι προσβάσιμος σε πολλές εφαρμογές, όχι απαραίτητα σε μια φυσική κάρτα SD.

Πρακτικές συμβουλές για χρήστες

Εάν φορτώνετε τακτικά εφαρμογές ή διαχειρίζεστε αρχεία στη συσκευή σας Android, ακολουθούν ορισμένες πρακτικές συστάσεις:

  1. Χρησιμοποιήστε έναν σύγχρονο διαχειριστή αρχείων που υποστηρίζει MANAGE_EXTERNAL_STORAGE. Εφαρμογές όπως το Solid Explorer, το MiXplorer και το Total Commander έχουν προσαρμοστεί καλά στην αποθήκευση εύρους.
  2. Παραχωρήστε άδειες προσεκτικά. Όταν ένας διαχειριστής αρχείων ζητά "Πρόσβαση σε όλα τα αρχεία", κατανοήστε ότι αυτό είναι το δικαίωμα MANAGE_EXTERNAL_STORAGE και είναι απαραίτητο για πλήρη λειτουργικότητα.
  3. Χρησιμοποιήστε το ADB για επίμονες λειτουργίες αρχείων. Εάν δεν μπορείτε να τοποθετήσετε αρχεία OBB μέσω ενός διαχειριστή αρχείων, η σύνδεση της συσκευής σας σε έναν υπολογιστή και η χρήση του adb push παρακάμπτει πλήρως τους περιορισμούς αποθήκευσης εύρους.
  4. Μετατρέψτε σύνθετα πακέτα σε απλούστερες μορφές. Εάν ένα αρχείο XAPK σας δημιουργεί προβλήματα σε μια νεότερη συσκευή, η εξαγωγή μόνο του στοιχείου APK μπορεί να είναι η διαδρομή με τη μικρότερη αντίσταση.
  5. Διατηρήστε τις εφαρμογές εγκατάστασης ενημερωμένες. Οι παλαιότερες εκδόσεις των προγραμμάτων εγκατάστασης XAPK ενδέχεται να μην χειρίζονται σωστά την αποθήκευση εύρους.

Το μέλλον του αποθηκευτικού χώρου Android

Η Google συνεχίζει να βελτιώνει το μοντέλο αποθήκευσης με κάθε έκδοση Android. Το Android 14 εισήγαγε τη μερική πρόσβαση στα μέσα, επιτρέποντας στους χρήστες να μοιράζονται συγκεκριμένες φωτογραφίες με μια εφαρμογή και όχι με ολόκληρη τη βιβλιοθήκη τους. Το Android 15 αναμένεται να φέρει περαιτέρω βελτιώσεις στην απόδοση και τη χρηστικότητα του Storage Access Framework.

Η τάση είναι σαφής: το Android κινείται προς ένα μοντέλο όπου οι χρήστες έχουν λεπτό έλεγχο του τι μπορεί να δει και να τροποποιήσει κάθε εφαρμογή. Αν και αυτό δημιουργεί κάποια τριβή για τους ισχυρούς χρήστες και τους sideloaders, βελτιώνει σημαντικά το απόρρητο και την ασφάλεια για την ευρύτερη βάση χρηστών.

Εργασία με χώρο αποθήκευσης εμβέλειας χωρίς παραβίαση δεδομένων εφαρμογής

Ο χώρος αποθήκευσης εμβέλειας αντιπροσωπεύει μια από τις πιο σημαντικές αλλαγές στην αρχιτεκτονική του Android τα τελευταία χρόνια. Περιορίζοντας τις εφαρμογές στα δικά τους sandbox και απαιτώντας τη ρητή συναίνεση του χρήστη για ευρύτερη πρόσβαση, η Google έχει βελτιώσει δραματικά τη στάση απορρήτου της πλατφόρμας. Για χρήστες που φορτώνουν εφαρμογές και διαχειρίζονται αρχεία με μη αυτόματο τρόπο, η κατανόηση αυτών των περιορισμών σάς βοηθά να αντιμετωπίσετε τα περιστασιακά σημεία τριβής. Και για τους προγραμματιστές, η προσαρμογή σε χώρο αποθήκευσης εύρους δεν είναι προαιρετική, αλλά μάλλον μια θεμελιώδης απαίτηση για τη σύγχρονη ανάπτυξη Android.

Η εγκατάσταση APK, η τοποθέτηση αρχείων OBB και η απλή διαχείριση του αποθηκευτικού χώρου καθημερινά λειτουργούν στο ίδιο σύστημα: αποθήκευση εύρους. Μόλις καταλάβετε πώς λειτουργεί, εσείς θα έχετε τον έλεγχο της συσκευής σας, αντί να βρίσκεστε στο έλεος των εφαρμογών που ενδέχεται να κάνουν κατάχρηση της ευρείας πρόσβασης στα αρχεία.

Κατασκευάστηκε και τεκμηριώθηκε από τον Mst Shaefale Κύριος προγραμματιστής και αρχιτέκτονας πακέτων Android • Επαληθεύτηκε σε Android 12–15

Το Mst Shaefale διατηρεί τη συγχώνευση XAPK/APKS από την πλευρά του πελάτη, τον αναλυτή δυαδικού μανιφέστου και τα εργαλεία υπογραφής APK v1+v2 στο xapktoapk.com. Εντοπίζετε μια παρωχημένη εντολή ή αλλαγή λειτουργικού συστήματος; Στείλτε ένα συντακτικό σημείωμα.