Scoped Storage Android Q-ში აიძულებს დეველოპერებს გამოიყენონ SAF, რაც ცუდია

Scoped Storage ცვლილებები Android Q-ში თავის ტკივილია, რადგან Storage Access Framework-ს ახლა რამდენიმე ხარვეზი აქვს.

Android Q ძირეულად ცვლის მეხსიერების მუშაობას თქვენს ტელეფონზე. Pie-მდე ყველა ვერსიაში, Android-ის საცავი მუშაობდა დესკტოპ კომპიუტერის მსგავსად: შეგიძლიათ გამოიყენოთ ნებისმიერი აპი, რომლის წაკითხვაც გსურთ ან ჩაწერეთ ნებისმიერი ფაილი (თუ აპს ამის უფლებას ანიჭებთ). Q-ით Google შემოაქვს (და მოითხოვს) "მოცულობითი საცავი", რაც Android-ს უფრო მეტად iPhone-ის მსგავსად მუშაობს, სადაც მეხსიერება იზოლირებულია თითოეული აპისთვის. აპს შეუძლია მხოლოდ საკუთარ ფაილებზე წვდომა და თუ ის დეინსტალირებულია, მისი ყველა ფაილი წაიშლება.

საბედნიეროდ, Android Q კვლავ ინარჩუნებს Android-ის თავდაპირველ ქცევას ცენტრალურ ფაილურ სისტემაში. სამწუხაროდ, მომხმარებლისთვის ახლა რთულია აპების დაყენება მასზე წვდომისთვის და მნიშვნელოვნად შეამცირა შესრულება და შესაძლებლობები. და დეველოპერებს მოუწევთ არსებითად გადაკოდილიონ აპლიკაციები მის მხარდასაჭერად.

აპები, რომლებსაც სჭირდებათ ზოგადი წვდომა ფაილურ სისტემაში, მაგ. საოფისე კომპლექტს, გამოსახულების რედაქტორს ან ფაილ მენეჯერს ახლა დასჭირდება Android API-ის გამოყენება, სახელწოდებით "

საცავის წვდომის ჩარჩო" (SAF), ფაილების ყველა ოპერაციისთვის. SAF ხელმისაწვდომია Android 5.0 Lollipop-დან, მაგრამ დეველოპერები არ იყენებენ მას საჭიროების შემთხვევაში, რადგან მას აქვს რთული და ცუდად დოკუმენტირებული API, ცუდი მომხმარებლის გამოცდილება, ცუდი შესრულება და ცუდი საიმედოობა (ძირითადად მოწყობილობის გამყიდველის სპეციფიკური განხორციელების სახით საკითხები). SAF-ზე გადასვლის სირთულის გამო, Google-მა გადაწყვიტა დაუშვას აპები, რომლებიც ჯერ არ მიუთითებენ Android Q-ის მხარდაჭერა იმუშავებს ისე, როგორც ადრე, მაგრამ ეს შეიცვლება, როდესაც Play Store მოითხოვს ყველა აპს Q-ის მხარდაჭერას მომავალ წელს.

მომხმარებლისთვის ყველაზე აშკარა ცვლილება SAF-ით არის აპისთვის საცავზე წვდომის მინიჭების გამოცდილება. იმისათვის, რომ აპმა მიიღოს წვდომა, ის უგზავნის მოთხოვნას OS-ს, რომელიც შემდეგ აჩვენებს დირექტორიაში ამომრჩევლის ეკრანს. ამ ეკრანზე მომხმარებელი ირჩევს საქაღალდის იერარქიის ფესვს, რომელშიც ეს აპლიკაცია შეძლებს ფაილების წაკითხვას და ჩაწერას. მომხმარებელმა უნდა გაიაროს ეს პროცესი თითოეული აპლიკაციისთვის, რომელიც მოითხოვს ადგილობრივ ფაილებზე წვდომას, ან ორჯერ თითო აპზე, თუ მას ასევე სჭირდება წვდომა გარე SD ბარათზე.

Google-მა მაინც გააუმჯობესა ეს პროცესი Q ბეტა 3, რადგან წინა ბეტა ვერსია არ აძლევდა საშუალებას აპს შეეთავაზებინა მომხმარებლისთვის ასარჩევი მდებარეობა, რომელიც მოითხოვდა მომხმარებლისგან საკმაოდ დიდი სამუშაოს შესრულება რეალურად იპოვონ მათი მოწყობილობის პირველადი მეხსიერება.

ფაილის I/O შესრულება გარკვეულწილად იკლებს SAF-ის პირობებში, მაგრამ ყველაზე გამორჩეული პრობლემა ფაილშია დირექტორია ოპერაციები, სადაც ის ~25-დან 50-ჯერ უფრო ნელია ვიდრე ჩვეულებრივი ფაილების წვდომა შესაძლებელია ღვეზელი. ფაილების მენეჯერების შემთხვევაში, ეს ნიშნავს, რომ ძიების და მეხსიერების გამოყენების გამოთვლების შესრულებას დიდი დრო დასჭირდება. შეცდომის ანგარიში საჩვენებელი აპლიკაციით არის ხელმისაწვდომია აქ.

SAFTest-ის ტესტის ნიმუში, რომელიც აჩვენებს შესრულების განსხვავებას ჩვეულებრივი ფაილის I/O API-ს შორის SAF-თან.

მუშაობის კიდევ უფრო დიდი პრობლემა ის არის, რომ ზოგიერთ აპს მოუწევს ფაილების კოპირება ადგილობრივ "ფართო საცავში" სანამ შეძლებენ მათთან მუშაობას. ეს შეიძლება იყოს პრობლემური, როდესაც ასეთი ფაილები რამდენიმე გიგაბაიტიანია, მაგ. ვიდეო ფაილების ან შეკუმშული არქივების შემთხვევაში. ბევრი Android აპი სარგებლობს დეველოპერთა საზოგადოებაში ღია წყაროს Java ბიბლიოთეკების გასაოცარი რაოდენობით და ეს ბიბლიოთეკები ჩვეულებრივ საჭიროებენ ფაილური სისტემის პირდაპირ წვდომას სამუშაოდ. ისინი არ არის სპეციფიკური Android-ისთვის და საჭიროებს გადაწერას SAF-თან მუშაობისთვის. კიდევ უფრო უარესი, Android-ის ბევრი შიდა ბიბლიოთეკა არ იმუშავებს მასთან, როგორიცაა პაკეტის მენეჯერი ან zip API. მაგალითად, ფაილების მენეჯერი ვერც კი შეძლებს აჩვენოს APK ფაილის ხატულა (სტანდარტული Android API-ის გამოყენებით) მთელი APK-ის დაკოპირების გარეშე საკუთარი ფარგლების შენახვის ზონაში. შეცდომის ანგარიში.

ტექნიკურად მიდრეკილი ადამიანებისთვის, ამჟამად შესაძლებელია გამორთოთ Android Q-ის "Scoped Storage" თითო აპის საფუძველზე 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-დან და თითქმის ყველა აპი იყენებს ამ შესაძლებლობას. როდესაც აპს ანიჭებთ წვდომას თქვენი მეხსიერების root დირექტორიაზე SAF-ის საშუალებით, მას შეუძლია წაიკითხოს, დაწეროს და გაგზავნოს ნებისმიერი ფაილი. სურს თავისი ბოროტი დეველოპერი ზუსტად ისევე, როგორც ეს შეიძლება, როცა აპს წვდომა მიანიჭეთ საცავზე Pie-ში.

ერთადერთი "უსაფრთხოების გაუმჯობესება" ხდება იმის გამო, რომ მომხმარებლისთვის ამის გაკეთება ახლა უფრო რთული პროცესია. თუ რა თქმა უნდა, აპს არ სურს მოიპაროს თქვენი ყველაზე პირადი ინფორმაცია, როგორიცაა ფოტოები და ვიდეოები გადაღებული, რისთვისაც Google-მა დაამატა წვდომის ალტერნატიული გადაწყვეტა, რომელიც იყენებს მარტივი pop-up დაწკაპუნებით-დიახ უსაფრთხოებას დიალოგი.

უცნობია, რა სარგებელს იმედოვნებს Google ამ ცვლილებით. ოფიციალური დასახელებული მიზეზი Android Q ბეტა დოკუმენტაციაში არის „მომხმარებლებზე მეტი კონტროლის მინიჭება მათ ფაილებზე და ფაილის შეზღუდვა ალიაქოთი." მოცულობითი შენახვა, მისი ამჟამინდელი ფორმით, არის ახალი შეზღუდვა იმისა, რისი უფლებაც აქვს მომხმარებელს, და არა მისი გაფართოება. კონტროლი. პრეტენზია არეულობის შემცირების შესახებ შეიძლება გარკვეულწილად მართებული იყოს, მაგრამ მხოლოდ იმიტომ, რომ ცვლილება ამცირებს ფაილების საერთოდ გამოყენების უნარს. და "არეულობა" იზრდება, როდესაც განიხილავთ პრობლემას, რომ ზოგიერთ აპლიკაციას ახლა უწევს ფაილების დუბლიკატი მათთან მუშაობისთვის.

თუ Google ნამდვილად ზრუნავს მომხმარებლებზე მეტი კონტროლის მინიჭებით ფაილებზე და არეულობაზე, მათ უნდა შექმნან ა გადაწყვეტა, რომელიც პირდაპირ ეხმიანება ამას, ვიდრე ტყუილად ასახელებს Android Q-ის ამჟამინდელ დიზაინს, როგორც ასეთს გაუმჯობესება. უმარტივესი პასუხი იქნება მომხმარებლებმა გადაწყვიტონ, უნდათ თუ არა აპს ჰქონდეს წვდომა ფაილურ სისტემაზე ფარგლებს გარეთ, არსებული შენახვის ნებართვის მოთხოვნის დიალოგის გამოყენებით. თუ არსებობს განსაკუთრებული შეშფოთება მომხმარებლების მიმართ, რომლებიც იღებენ ცუდ გადაწყვეტილებებს, ეს, რა თქმა უნდა, შესაძლებელია გახადეთ ეს დიალოგი უფრო თვალსაჩინო და მოითხოვეთ მომხმარებლის დამატებითი ინტერაქცია აპის სრულად დასამტკიცებლად წვდომა.

პასუხი იმაზე, თუ როგორ შეუძლია Android-ს მომხმარებლებს მეტი კონტროლი მისცეს მათ ფაილებზე, არის რეალურად მისცეს მომხმარებლებს მეტი კონტროლი და არა მისი წართმევა და ძირეულად შეზღუდოს Android პლატფორმის შესაძლებლობები.


რედაქტორის შენიშვნა: ეს არის სტუმრის სტატია დაწერილი XDA უფროსი წევრის მიერ ტლიბეკი, რომელიც ცნობილია თავისი ნამუშევრებით FX File Explorer. ამ სტატიის შინაარსი ასახავს მის საკუთარ მოსაზრებას და ანალიზს Android Q-ის Scoped Storage შეზღუდვების შესახებ, მინიმალური შეყვანით და რედაქტირებით Mishaal Rahman-ისგან, XDA-Developers-ის მთავარი რედაქტორისგან. ჩვენ მივმართეთ Google-ს, რათა გვეკითხა ამ პრობლემების შესახებ, მაგრამ კომპანიისგან არაფერი გვსმენია გამოქვეყნების დროისთვის.