Bộ nhớ truyền thống

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

Android hỗ trợ các thiết bị có bộ nhớ truyền thống, được xác định 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 không thể thay đổi. Khái niệm bộ nhớ truyền thống bao gồm bộ nhớ được mô phỏng và bộ nhớ di động. Bộ nhớ di động được xác định là mọi bộ nhớ ngoài không được hệ thống sử dụng, do đó không được định dạng, mã hoá hoặc liên kết với một thiết bị cụ thể. 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ữ, nên 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ể, bạn chỉ nên lưu trữ tệp cấu hình và nhật ký trên bộ nhớ trong để có thể bảo vệ hiệu quả các tệp đó.

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

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

  • Mỗi người dùng phải có bộ nhớ ngoài chính riêng biệt và không được truy cập vào bộ nhớ ngoài chính của người dùng khác.
  • Đường dẫn /sdcard phải phân giải đến bộ nhớ ngoài chính chính xác dành riêng cho người dùng dựa trên người dùng mà một quy trình đang chạy.
  • Dung lượng lưu trữ 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 để tối ưu hoá.
  • Ứng dụng không được ghi vào bộ nhớ ngoài phụ, ngoại trừ các thư mục dành riêng cho gói theo quyền tổng hợp cho phé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 hạt nhân Linux để tạo các bảng gắn riêng biệt cho từng quy trình phân nhánh Zygote, sau đó sử dụng các điểm gắn liên kết để cung cấp bộ nhớ ngoài chính chính xác dành riêng cho người dùng vào không gian tên riêng đó.

Khi khởi động, hệ thống sẽ gắn một trình nền FUSE bộ nhớ ngoài được mô phỏng tại EMULATED_STORAGE_SOURCE, được ẩn khỏi các ứng dụng. Sau khi phân nhánh Zygote, ứng dụng này sẽ liên kết và gắn thư mục con thích hợp dành riêng cho người dùng từ trong trình nền FUSE vào 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ì ứng dụng thiếu các điểm gắn có thể truy cập được cho bộ nhớ của người dùng khác, nên ứng dụng chỉ có thể truy cập vào bộ nhớ của người dùng đã khởi động ứng dụng.

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

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

Kể từ Android 4.4, nhiều thiết bị bộ nhớ ngoài sẽ hiển thị cho nhà phát triển thông qua Context.getExternalFilesDirs(), Context.getExternalCacheDirs()Context.getObbDirs().

Các thiết bị lưu trữ ngoài xuất hiện 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 pin). Nhà phát triển mong muốn dữ liệu được lưu trữ ở những vị trí này có sẵn trong thời gian dài. Vì lý do này, các thiết bị lưu trữ tạm thời (chẳng hạn như ổ lưu trữ dung lượng lớn USB) không được hiển thị thông qua các API này.

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

Hỗ trợ nội dung nghe nhìn qua USB

Android 6.0 hỗ trợ các thiết bị lưu trữ di động chỉ kết nối với thiết bị trong một khoảng thời gian ngắn, chẳng hạn như ổ đĩa flash USB. Khi người dùng chèn 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, mọi thiết bị không được chấp nhận đều được coi là thiết bị di động. Vì bộ nhớ di động chỉ được kết nối trong một thời gian ngắn, nên nền tảng này tránh các thao tác nặng như quét nội dung nghe nhìn. Ứng dụng 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; quyền truy cập trực tiếp bị chặn rõ ràng vì lý do bảo mật và quyền riêng tư.