Scoped Storage là gì?

SkylerNew

Chuyên viên tin tức
Thành viên BQT
Khi Android 10 vẫn còn trong những ngày đầu thử nghiệm, Google đã lên kế hoạch cho một thay đổi lớn về cách thức các ứng dụng truy cập tệp và thư mục trong bộ nhớ điện thoại của bạn (những tệp như hình ảnh mà bạn hoặc các ứng dụng khác đang lưu trữ trong thư mục /data/media, không phải thẻ SD trên nhiều mẫu Android).

2076018.jpg


Thay đổi này được gọi là Scoped Storage và mục đích của nó là nhằm loại bỏ sự lạm dụng các quyền READ_EXTERNAL_STORAGE mà nhiều ứng dụng và nhà phát triển yêu cầu cấp quyền.

Những thay đổi này ban đầu được dự kiến áp dụng cho mọi ứng dụng chạy Android 10 trở lên, nhưng do các nhà phát triển phản đối, Google đã suy nghĩ lại và chỉ yêu cầu sử dụng Scoped Storage cho các ứng dụng hướng đến API Android 29, tức đối với Android 10. Nhưng với Android 11, Scoped Storage đã hoạt động trở lại và khả năng cao Google sẽ không thay đổi ý định này.

Scoped Storage hoạt động như thế nào?

2076009.jpg


Đã từng có lúc Android hoạt động giống mọi hệ điều hành desktop khác trong việc truy cập các tệp: bất kì ứng dụng nào cũng có thể truy cập vào những tệp như tài liệu, ảnh, nhạc hay bất cứ thứ gì bạn lưu trữ trên thiết bị. Bạn sẽ cảm thấy bình thường khi một ứng dụng có thể truy cập vào các tệp của bạn. Khi sử dụng UI gốc của ứng dụng, bạn có thể duyệt hệ thống tệp và xem tất cả các tệp công khai của mình.

Với Android 4.4 KitKat, Google bắt đầu thực hiện các thay đổi và thêm nhiều hạn chế vào cách thức ứng dụng truy cập các tệp mà nó không sở hữu. Và với Android 5.1, Storage Access Framework đã được triển khai. Điều này giúp các ứng dụng truy cập các tệp trong thư mục khác bằng API của Android thay vì sử dụng các chuẩn lập trình thao tác tệp. Dù hơi chậm và không phổ biến, nhưng nó vẫn có sẵn và giờ đây, hầu như mọi nhà phát triển đều cần quyền truy cập toàn cục dạng như vậy, ít nhất là để xem xét mức độ phù hợp của nó dựa trên nhu cầu của họ.

Với Scoped Storage, mọi thứ trở nên hạn chế nhưng cũng dễ dàng hơn. Mỗi ứng dụng sẽ được cung cấp thư mục riêng dành cho dữ liệu người dùng. Các ứng dụng đã có thư mục sandbox riêng nhằm lưu trữ các tệp cần thiết của chúng và những ứng dụng khác không thể truy cập thư mục đó. Scoped Storage cho phép các ứng dụng tạo thư mục thứ hai để lưu trữ. Các ứng dụng như ghi âm cần một nơi để lưu trữ các tệp âm thanh mà nó tạo ra.

Ứng dụng không cần cấp quyền để đọc/ghi bất kỳ tệp nào trong thư mục thứ hai này, vì vậy, bạn sẽ không nhận được yêu cầu cấp quyền vào lần đầu tiên chạy nó. Dĩ nhiên, các ứng dụng cần phải được cấp quyền truy cập đối với những thư mục mà chúng không sở hữu.

Các nhà phát triển cần truy cập các thư mục không thuộc sở hữu sẽ phải sử dụng những API Storage Access Framework. Có nghĩa là nó cần truy vấn API để xem liệu các tệp có tồn tại hay không rồi mới lấy địa chỉ của tệp, sau đó yêu cầu người dùng cấp phép sử dụng nó. Đây là cách tốt nhất được đề xuất để truy cập tệp kể từ Android Lollipop, thế nên, nó không hoàn toàn mới. Nhưng với Scoped Storage, giờ đây, điều này được thực thi nghiêm ngặt hơn và trở thành một thứ bắt buộc.

Tại sao phải thay đổi?

2076012.jpg


Có 2 lý do hợp lý được Google đưa ra khi thực hiện thay đổi này: bảo mật và giảm đi "đống lộn xộn ứng dụng" còn sót lại.

Về mặt bảo mật, nó thay đổi một vài điều. Đầu tiên và quan trọng nhất, nó cho phép nhà phát triển có không gian riêng trong bộ nhớ thiết bị ở chế độ riêng tư mà không yêu cầu bất kỳ quyền cụ thể nào vào chạy lần đầu tiên. Và không có ứng dụng nào khác có thể truy cập bất kỳ các tệp do ứng dụng đó tạo ra nếu không có sự cho phép của bạn.

Thứ hai, và không kém phần quan trọng, nó loại bỏ việc lạm dụng quyền READ_EXTERNAL_STORAGE. Khi bạn cấp quyền này cho một ứng dụng, ứng dụng sẽ được phép truy cập vào toàn bộ bộ nhớ, nơi chúng ta lưu những thông tin như ảnh, tài liệu riêng, video và các tệp nhạy cảm khác. Khi Scoped Storage được thực thi, mọi ứng dụng chỉ có thể thấy những thư mục của riêng chúng và để truy cập các loại media nhất định, như nhạc, chúng cần phải sử dụng API.

Những API này có thể cấp quyền xem, viết, xóa và thậm chí nhiều hành động khác thông qua việc sử dụng một lời nhắc người dùng xây dựng trong hệ thống, giúp bạn cho phép hoặc ngăn chặn hành động. Những API này sẽ đơn giản hóa việc phát triển cho các ứng dụng, chẳng hạn như một trình phát nhạc hay chỉnh sửa hình ảnh, mà không cần đến Scoped Storage thực thi.

Đi sâu hơn vào phần giảm thiểu đống lộn xộn mà ứng dụng để lại. Khi bạn gỡ cài đặt một ứng dụng, các tệp và thư mục của nó vẫn sẽ còn "vương vãi" trong bộ nhớ thiết bị của bạn. Nếu lượng tệp bị bỏ lại đủ lớn, nó sẽ gây ảnh hưởng đến hiệu năng, đặc biệt hơn, nếu cùng tên, nó có thể bị lặp bởi một ứng dụng khác. Ví dụ, nếu nhà phát triển xây dựng một ứng dụng có thể tạo tệp media, như ứng dụng máy ảnh hay ghi âm, họ có thể dùng thư mục media tiêu chuẩn để lưu các tập tin vừa tạo ra, như vậy các tệp đó sẽ không bị mất khi bạn gỡ cài đặt ứng dụng.

Các trình quản lý tệp thì sao?

2076015.jpg


Các nhà phát triển ứng dụng như trình quản lý tệp muốn truy cập vào mọi tệp trong bộ nhớ có thể truy cập thông qua Storage Access Framework sau khi được Google cấp phép. Hồi 10/2019, Google đã công bố đang triển khai một chương trình cho phép "truy cập đặc biệt" tại Android Developer Summit.

Người dùng sẽ phải tự cấp quyền cho ứng dụng quản lý tệp truy cập vào thư mục root (thư mục cấp cao nhất) của bộ nhớ, thế nên, họ sẽ cấp luôn quyền truy cập đến mọi thư mục và tệp bên trong nó. Vì đây là một lựa chọn khá rộng và một trong những mục tiêu của Scoped Storage, tức quản lý các ứng dụng có mức truy cập này, Google sẽ xem xét đặc biệt đối với những ứng dụng này, vốn cần đến mức truy cập ở cấp độ này, mới có thể cấp quyền cho chúng.

Scoped Storage chắc chắn sẽ được áp dụng

Những phản hồi đầu tiên về Scoped Storage không được tốt lắm. Thậm chí còn có một kiến nghị yêu cầu Google loại bỏ suy nghĩ về việc triển khai lại tính năng này.

Google đã dồn rất nhiều tâm huyết vào Scoped Storage. Scoped Storage đã có sẵn trong Android 10 chính thức, dẫu vậy, các nhà phát triển không bị bắt buộc phải sử dụng nó. Nhưng mọi thứ giờ đã thay đổi.

Bất kỳ ứng dụng nào hướng đến Android 10 trở lên đều phải sử dụng API lưu trữ mới, bao gồm cả Scoped Storage. Các thay đổi về thỏa thuận dành cho nhà phát triển của Google Play xác nhận, kể từ ngày 01/08/2020, tất cả các ứng dụng mới được đưa lên Google Play phải hướng đến Android 10 hoặc cao hơn và mọi bản cập nhật cho các ứng dụng hiện tại cũng cần phải hướng đến từ Android 10 trở lên kể từ 01/11/2020.

Nếu nhà phát triển muốn ứng dụng của mình không "chết" trong kho ứng dụng lỗi thời thì họ phải sớm triển khai Scoped Storage. May mắn là lần này Google đã lắng nghe phản hồi và giúp mọi thứ dễ dàng hơn cho các ứng dụng có nhu cầu truy cập đầy đủ hoặc đặc biệt. Các API mới của Android 11 cũng giúp mọi thứ trở nên dễ dàng hơn. Tất cả vì tương lai Android an toàn hơn và bảo mật hơn.

Theo Vn review​
 
Bên trên