lưu trữ truyền thống

Biểu tượng HAL bộ nhớ ngoài của Android

Android hỗ trợ các thiết bị có bộ nhớ truyền thống, được định nghĩa là hệ thống tệp không phân biệt chữ hoa chữ thường với các lớp và chế độ quyền POSIX bất biến. Khái niệm lưu trữ truyền thống bao gồm lưu trữ giả lập và lưu trữ di động. Bộ nhớ di động được định nghĩa là bất kỳ bộ nhớ ngoài nào không được hệ thống chấp nhận và do đó không được định dạng và mã hóa hoặc gắn với một thiết bị cụ thể. Bởi vì bộ nhớ ngoài truyền thống cung cấp khả năng bảo vệ tối thiểu cho dữ liệu được lưu trữ, mã hệ thống không được lưu trữ dữ liệu nhạy cảm trên bộ nhớ ngoài. Cụ thể, các tệp cấu hình và nhật ký chỉ nên được lưu trữ trên bộ nhớ trong, nơi chúng có thể được bảo vệ hiệu quả.

Bộ nhớ ngoài nhiều người dùng

Bắt đầu từ Android 4.2, các thiết bị có thể hỗ trợ nhiều người dùng và bộ nhớ ngoài phải đáp ứng các ràng buộc sau:

  • Mỗi người dùng phải có bộ nhớ ngoài chính biệt lập của riêng họ và không được có quyền truy cập vào bộ nhớ ngoài chính của những người dùng khác.
  • Đường dẫn /sdcard phải giải quyết đến đúng bộ nhớ ngoài chính dành cho người dùng cụ thể dựa trên người dùng mà một quy trình đang chạy.
  • Bộ nhớ cho các tệp OBB lớn trong thư mục Android/obb có thể được chia sẻ giữa nhiều người dùng như một cách tối ưu hóa.
  • Ứng dụng không được phép ghi bộ nhớ ngoài thứ cấp, ngoại trừ trong các thư mục dành riêng cho gói theo quyền tổng hợp.

Việc triển khai nền tảng mặc định của tính năng này tận dụng các không gian tên của nhân Linux để tạo các bảng gắn kết riêng biệt cho mỗi quy trình được phân nhánh Zygote và sau đó sử dụng các liên kết gắn kết để cung cấp bộ nhớ ngoài chính dành cho người dùng cụ thể vào không gian tên riêng đó.

Khi khởi động, hệ thống gắn một daemon FUSE lưu trữ bên ngoài được mô phỏng duy nhất tại EMULATED_STORAGE_SOURCE , được ẩn khỏi các ứng dụng. Sau các lần phân tách Zygote, nó liên kết gắn kết thư mục con thích hợp dành cho người dùng cụ thể từ trong daemon FUSE tới EMULATED_STORAGE_TARGET để các đường dẫn bộ nhớ ngoài phân giải chính xác cho ứng dụng. Vì một ứng dụng thiếu các điểm gắn kết có thể truy cập cho bộ nhớ của người dùng khác, họ chỉ có thể truy cập bộ nhớ cho người dùng mà ứng dụng đó đã được khởi chạy.

Việc triển khai này cũng sử dụng tính năng hạt nhân cây con được chia sẻ để truyền các sự kiện gắn kết từ không gian tên gốc mặc định vào không gian tên ứng dụng, điều này đảm bảo rằng các tính năng như vùng chứa ASEC và gắn kết OBB tiếp tục hoạt động chính xác. Nó thực hiện điều này bằng cách gắn kết các rootfs như được chia sẻ, và sau đó gắn nó lại với tư cách nô lệ sau khi mỗi vùng tên Zygote được tạo.

Nhiều thiết bị lưu trữ bên ngoài

Bắt đầu từ Android 4.4, nhiều thiết bị lưu trữ bên ngoài được hiển thị cho các nhà phát triển thông qua Context.getExternalFilesDirs() , Context.getExternalCacheDirs()Context.getObbDirs() .

Các thiết bị lưu trữ bên ngoài được hiển thị thông qua các API này phải là một phần bán cố định của thiết bị (chẳng hạn như khe cắm thẻ SD trong ngăn chứa pin). Các nhà phát triển mong muốn dữ liệu được lưu trữ ở những vị trí này sẽ khả dụng trong thời gian dài. Vì lý do này, không nên hiển thị các thiết bị lưu trữ tạm thời (chẳng hạn như ổ lưu trữ thứ cấp USB) thông qua các API này.

Quyền WRITE_EXTERNAL_STORAGE chỉ phải cấp quyền ghi vào bộ nhớ ngoài chính trên thiết bị. Các ứng dụng không được phép ghi vào các thiết bị lưu trữ bên ngoài thứ cấp, ngoại trừ trong các thư mục dành riêng cho gói của chúng khi được phép tổng hợp. Việc hạn chế ghi theo cách này đảm bảo hệ thống có thể dọn dẹp các tệp khi các ứng dụng được gỡ cài đặt.

Hỗ trợ phương tiện USB

Android 6.0 hỗ trợ các thiết bị lưu trữ di động chỉ được kết nối với thiết bị trong một khoảng thời gian ngắn, chẳng hạn như ổ USB flash. Khi người dùng lắp một thiết bị di động mới, nền tảng sẽ hiển thị thông báo cho phép họ sao chép hoặc quản lý nội dung của thiết bị đó.

Trong Android 6.0, bất kỳ thiết bị nào không được sử dụng đều được coi là thiết bị di động. Vì bộ nhớ di động chỉ được kết nối trong thời gian ngắn nên nền tảng này tránh được các hoạt động nặng như quét phương tiện. Các ứng dụng của bên thứ ba phải thông qua Khung truy cập bộ nhớ để tương tác với các tệp trên bộ nhớ di động; truy cập trực tiếp bị chặn rõ ràng vì lý do riêng tư và bảo mật.