Το Scoped Storage στο Android Q αναγκάζει τους προγραμματιστές να χρησιμοποιούν SAF, κάτι που είναι χάλια

click fraud protection

Οι αλλαγές στο Scoped Storage στο Android Q είναι ένας πονοκέφαλος που πρέπει να αντιμετωπίσετε, επειδή το Πλαίσιο Πρόσβασης στον Αποθηκευτικό χώρο έχει μερικά ελαττώματα αυτήν τη στιγμή.

Το Android Q αλλάζει ριζικά τον τρόπο με τον οποίο λειτουργεί ο χώρος αποθήκευσης στο τηλέφωνό σας. Σε κάθε έκδοση μέχρι το Pie, ο αποθηκευτικός χώρος του Android λειτουργούσε όπως ένας επιτραπέζιος υπολογιστής: μπορείτε να χρησιμοποιήσετε οποιαδήποτε εφαρμογή θέλετε για να διαβάσετε ή να γράψετε οποιοδήποτε αρχείο (αν παραχωρήσετε σε μια εφαρμογή άδεια να το κάνει). Με το Q, η Google εισάγει (και απαιτεί) "Αποθήκευση εύρους», που κάνει το Android να λειτουργεί περισσότερο σαν iPhone, όπου ο χώρος αποθήκευσης είναι απομονωμένος σε κάθε εφαρμογή. Μια εφαρμογή μπορεί να έχει πρόσβαση μόνο στα δικά της αρχεία και αν απεγκατασταθεί, διαγράφονται όλα τα αρχεία της.

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

Εφαρμογές που χρειάζονται γενική πρόσβαση στο σύστημα αρχείων, π.χ. μια σουίτα γραφείου, πρόγραμμα επεξεργασίας εικόνας ή διαχείριση αρχείων, θα πρέπει τώρα να χρησιμοποιήσει ένα API Android που ονομάζεται "Πλαίσιο πρόσβασης αποθήκευσης" (SAF), για όλες τις λειτουργίες αρχείων. Το SAF είναι διαθέσιμο από το Android 5.0 Lollipop, αλλά οι προγραμματιστές τείνουν να μην το χρησιμοποιούν εκτός εάν απαιτείται, καθώς έχει δύσκολη και κακή τεκμηριωμένο API, κακή εμπειρία χρήστη, κακή απόδοση και χαμηλή αξιοπιστία (κυρίως με τη μορφή υλοποίησης για συγκεκριμένο προμηθευτή συσκευών θέματα). Ως αποτέλεσμα της δυσκολίας μετάβασης στο SAF, η Google αποφάσισε να επιτρέψει εφαρμογές που δεν υποδεικνύουν ακόμη Η υποστήριξη Android Q λειτουργεί όπως παλιά, αλλά αυτό θα αλλάξει όταν το Play Store απαιτεί από όλες τις εφαρμογές να υποστηρίζουν το Q του χρόνου.

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

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

Η απόδοση αρχείου εισόδου/εξόδου κερδίζει κάπως το SAF, αλλά το πιο σημαντικό πρόβλημα βρίσκεται στο αρχείο λειτουργίες καταλόγου, όπου είναι ~25 έως 50 φορές πιο αργή από τη συμβατική πρόσβαση σε αρχεία Πίτα. Στην περίπτωση των διαχειριστών αρχείων, αυτό σημαίνει ότι θα χρειαστούν τάξεις μεγέθους περισσότερος χρόνος για να πραγματοποιηθούν αναζητήσεις και υπολογισμοί χρήσης αποθήκευσης. Μια αναφορά σφαλμάτων με μια εφαρμογή επίδειξης είναι διαθέσιμο εδώ.

Δείγμα δοκιμής του SAFTest που δείχνει τη διαφορά απόδοσης μεταξύ του συμβατικού αρχείου I/O API με SAF.

Ένα ακόμη μεγαλύτερο πρόβλημα απόδοσης είναι ότι ορισμένες εφαρμογές θα πρέπει να αντιγράψουν αρχεία στην τοπική περιοχή "αποθήκευσης εύρους" πριν μπορέσουν να εργαστούν μαζί τους. Αυτό μπορεί να είναι προβληματικό όταν τέτοια αρχεία έχουν μέγεθος πολλών gigabyte, π.χ. στην περίπτωση αρχείων βίντεο ή συμπιεσμένων αρχείων. Πολλές εφαρμογές Android εκμεταλλεύονται τον εκπληκτικό αριθμό βιβλιοθηκών Java ανοιχτού κώδικα στην κοινότητα προγραμματιστών και αυτές οι βιβλιοθήκες συνήθως απαιτούν άμεση πρόσβαση στο σύστημα αρχείων για να λειτουργήσουν. Δεν είναι ειδικά για Android και θα απαιτούσαν επανεγγραφή για να λειτουργήσουν με το SAF. Ακόμη χειρότερα, πολλές από τις εσωτερικές βιβλιοθήκες του Android δεν θα λειτουργούν με αυτό, όπως ο διαχειριστής πακέτων ή το zip API. Για παράδειγμα, ένας διαχειριστής αρχείων δεν θα μπορεί καν να εμφανίσει το εικονίδιο για ένα αρχείο APK (χρησιμοποιώντας το τυπικό API Android) χωρίς πρώτα να αντιγράψει ολόκληρο το APK στη δική του περιοχή αποθήκευσης. Αναφορά σφάλματος.

Για άτομα με τεχνική προδιάθεση, είναι επί του παρόντος δυνατό να απενεργοποιήσετε το "Scoped Storage" του Android Q σε βάση ανά εφαρμογή μέσω ADB χρησιμοποιώντας μια εντολή appops. Οι χρήστες Root μπορούν να εκτελέσουν τις εντολές απευθείας στη συσκευή τους χωρίς επιτραπέζιο υπολογιστή. Τέτοιες εντολές περιγράφονται στην τεκμηρίωση ως χαρακτηριστικά προγραμματιστή και επομένως μπορούν να αφαιρεθούν ανά πάσα στιγμή.

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

adb shell cmd appops set your-package-name android: legacy_storage allow && \adb shell am force-stop your-package-name

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

adb shell cmd appops set your-package-name android: legacy_storage default && \adb shell am force-stop your-package-name

Η Google προβάλλει τα πλεονεκτήματα ασφάλειας και απορρήτου αυτής της αλλαγής, αλλά τεχνικά, δεν υπάρχει βελτίωση. Οι εφαρμογές είχαν τη δυνατότητα ιδιωτικής αποθήκευσης αρχείων από το Android 1.0 και σχεδόν όλες οι εφαρμογές χρησιμοποιούν αυτήν τη δυνατότητα. Όταν εκχωρείτε σε μια εφαρμογή πρόσβαση στον ριζικό κατάλογο του αποθηκευτικού χώρου σας μέσω SAF, μπορεί να διαβάσει, να γράψει και να στείλει οποιοδήποτε αρχείο της θέλει στον κακόβουλο προγραμματιστή του με τον ίδιο ακριβώς τρόπο που θα μπορούσε όταν παραχωρήσατε σε μια εφαρμογή πρόσβαση στον χώρο αποθήκευσης στο Pie.

Η μόνη "βελτίωση ασφαλείας" προκύπτει επειδή είναι πλέον μια πιο επίπονη διαδικασία για έναν χρήστη να το κάνει αυτό. Εκτός φυσικά εάν μια εφαρμογή θέλει να κλέψει μόνο τις πιο προσωπικές σας πληροφορίες, όπως φωτογραφίες και βίντεο που έχετε λήψη, για την οποία η Google έχει προσθέσει μια εναλλακτική λύση πρόσβασης που χρησιμοποιεί μια απλή αναδυόμενη ασφάλεια κλικ-ναι διαλόγου.

Δεν είναι γνωστό ποια οφέλη ελπίζει να επιτύχει η Google με αυτήν την αλλαγή. Ο επίσημος λόγος στην τεκμηρίωση του Android Q beta είναι «να δώσει στους χρήστες περισσότερο έλεγχο στα αρχεία τους και να περιορίσει τα αρχεία αταξία." Η αποθήκευση εύρους, στην παρούσα μορφή της, είναι ένας νέος περιορισμός του τι επιτρέπεται να κάνει ο χρήστης, όχι μια επέκταση του έλεγχος. Ο ισχυρισμός της μείωσης της ακαταστασίας μπορεί να είναι κάπως έγκυρος, αλλά μόνο επειδή η αλλαγή μειώνει τη δυνατότητα χρήσης αρχείων. Και η «ακαταστασία» αυξάνεται όταν εξετάζετε το πρόβλημα ορισμένων εφαρμογών που πρέπει τώρα να αντιγράψουν αρχεία για να εργαστούν μαζί τους.

Εάν η Google ενδιαφέρεται πραγματικά να δώσει στους χρήστες περισσότερο έλεγχο στα αρχεία και την ακαταστασία, θα πρέπει να αρχιτεκτονήσουν ένα λύση που αντιμετωπίζει άμεσα αυτό, αντί να χαρακτηρίζει ψευδώς την τρέχουσα σχεδίαση Android Q ως τέτοια βελτίωση. Η απλούστερη απάντηση θα ήταν να επιτραπεί στους χρήστες να αποφασίσουν εάν θέλουν μια εφαρμογή να έχει εύρος ή γενική πρόσβαση στο σύστημα αρχείων, χρησιμοποιώντας το παράθυρο διαλόγου αιτήματος άδειας υφιστάμενης αποθήκευσης. Εάν υπάρχει μια ιδιαίτερη ανησυχία για τους χρήστες που λαμβάνουν κακές αποφάσεις εδώ, είναι σίγουρα δυνατό Κάντε αυτό το διάλογο πιο εμφανές και απαιτήστε πρόσθετη αλληλεπίδραση με τον χρήστη για την πλήρη έγκριση μιας εφαρμογής πρόσβαση.

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


Σημείωση συντάκτη: Αυτό είναι ένα guest άρθρο γραμμένο από το XDA Senior Member tliebeck, περισσότερο γνωστός για τη δουλειά του στο Εξερεύνηση αρχείων FX. Τα περιεχόμενα αυτού του άρθρου αντικατοπτρίζουν τη δική του γνώμη και ανάλυση για τους περιορισμούς εμβέλειας αποθήκευσης του Android Q, με ελάχιστη εισαγωγή και επεξεργασία από τον Mishaal Rahman, Αρχισυντάκτη του XDA-Developers. Απευθυνθήκαμε στην Google για να τους ρωτήσουμε σχετικά με ορισμένες από αυτές τις ανησυχίες, αλλά δεν έχουμε λάβει νέα από την εταιρεία μέχρι την ώρα της δημοσίευσης.