Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Lưu trữ

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

Android đã phát triển theo thời gian để hỗ trợ nhiều loại thiết bị lưu trữ và tính năng. Tất cả các phiên bản của các thiết bị hỗ trợ Android với lưu trữ truyền thống , trong đó bao gồm lưu trữ di động và mô phòng. Di động lưu trữ có thể được cung cấp bởi phương tiện vật lý, giống như một thẻ SD hoặc USB, có nghĩa là để lưu trữ dữ liệu chuyển / tập tin tạm thời. Phương tiện vật lý có thể vẫn còn với thiết bị trong một thời gian dài, nhưng không bị ràng buộc với thiết bị và có thể bị gỡ bỏ. Thẻ SD đã có sẵn dưới dạng bộ nhớ di động kể từ Android 1.0; Hỗ trợ USB 6.0 Android 6.0. Lưu trữ mô phỏng được cung cấp bởi phơi bày một phần dung lượng lưu trữ nội bộ thông qua một lớp thi đua, đã có sẵn từ Android 3.0.

Bắt đầu từ Android 6.0, Android hỗ trợ lưu trữ nhận làm con nuôi , được cung cấp bởi phương tiện vật lý, giống như một thẻ SD hoặc USB, được mã hóa và định dạng để hành xử giống như bộ nhớ trong. Bộ nhớ được chấp nhận có thể lưu trữ tất cả các loại dữ liệu ứng dụng.

Quyền

Quyền truy cập vào bộ nhớ ngoài được bảo vệ bởi các quyền khác nhau của Android. Bắt đầu từ Android 1.0, truy cập ghi được bảo vệ với WRITE_EXTERNAL_STORAGE phép. Bắt đầu từ Android 4.1, truy cập đọc được bảo vệ với READ_EXTERNAL_STORAGE phép.

Bắt đầu từ Android 4.4, chủ sở hữu, nhóm và chế độ của tệp trên thiết bị lưu trữ bên ngoài hiện được tổng hợp dựa trên cấu trúc thư mục. Điều này cho phép các ứng dụng để quản lý các thư mục gói cụ thể của họ trên lưu trữ bên ngoài mà không đòi hỏi họ giữ rộng WRITE_EXTERNAL_STORAGE phép. Ví dụ, các ứng dụng với tên gói com.example.foo bây giờ có thể tự do truy cập vào Android/data/com.example.foo/ trên các thiết bị lưu trữ bên ngoài không có quyền. Các quyền tổng hợp này được thực hiện bằng cách gói các thiết bị lưu trữ thô trong một daemon FUSE.

Bắt đầu từ Android 10, ứng dụng nhắm vào Android 9 và mặc định thấp hơn để lưu trữ di sản, và có thể chọn tham gia vào lưu trữ bị cô lập. Apps rằng mục tiêu Android 10 và mặc định để lưu trữ tạm thời bị cô lập có thể lựa chọn ra khỏi nó. Sử dụng các thuộc tính biểu hiện requestLegacyExternalStorage , kiểm soát các mô hình lưu trữ, thay đổi trạng thái mặc định.

Kể từ khi cả hai READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE quyền được mềm mại hạn chế, nếu trình cài đặt không whitelist các ứng dụng, các điều khiển cho phép truy cập vào các bộ sưu tập chỉ aural và hình ảnh, không có quyền truy cập vào thẻ SD. Điều này áp dụng ngay cả khi ứng dụng yêu cầu bộ nhớ cũ. Để biết thêm thông tin về cả hai hạn chế khó khăn và hạn chế mềm, thấy cứng và hạn chế mềm trong Android 10 .

Nếu trình cài đặt đưa quyền vào danh sách cho phép, ứng dụng đang chạy ở chế độ kế thừa sẽ có hành vi cấp quyền đơn nguyên. Quyền kiểm soát quyền truy cập thẻ SD và các bộ sưu tập âm thanh và hình ảnh. Điều này xảy ra khi ứng dụng nhắm mục tiêu Android 9 trở xuống và không chọn tham gia bộ nhớ riêng hoặc nhắm mục tiêu Android 10 và chọn không tham gia.

Trạng thái danh sách trắng chỉ có thể được chỉ định tại thời điểm cài đặt và không thể thay đổi cho đến khi ứng dụng đã được cài đặt.

Để biết thêm thông tin về cách thiết lập các READ_EXTERNAL_STORAGE phép, xem setWhitelistedRestrictedPermissions() trong PackageInstaller.SessionParams lớp.

Quyền thời gian chạy

Android 6.0 ra mắt một mới cho phép thời gian chạy mô hình mà ứng dụng yêu cầu khả năng khi cần thiết khi chạy. Do mô hình mới bao gồm các READ/WRITE_EXTERNAL_STORAGE quyền, nhu cầu nền tảng để truy cập lưu trữ tự động cấp mà không giết chết hoặc khởi động lại ứng dụng đã chạy. Nó thực hiện điều này bằng cách duy trì ba chế độ xem khác biệt của tất cả các thiết bị lưu trữ được gắn kết:

  • /mnt/runtime/default được hiển thị các ứng dụng không có quyền lưu trữ đặc biệt, và tới namespace root nơi adbd và các thành phần hệ thống khác sinh sống.
  • /mnt/runtime/read được hiển thị các ứng dụng với READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE dành cho Android 10)
  • /mnt/runtime/write được hiển thị các ứng dụng với WRITE_EXTERNAL_STORAGE

Tại thời điểm ngã ba Zygote, chúng tôi tạo không gian tên gắn kết cho mỗi ứng dụng đang chạy và liên kết gắn kết chế độ xem ban đầu thích hợp vào vị trí. Sau này, khi cho phép thời gian chạy được cấp, vold nhảy vào gắn kết không gian tên của các ứng dụng đã chạy và gắn kết ràng buộc quan điểm nâng cấp vào vị trí. Lưu ý rằng việc hạ cấp quyền luôn dẫn đến việc ứng dụng bị giết.

Các setns() chức năng sử dụng để thực hiện tính năng này đòi hỏi ít nhất Linux 3.8, nhưng các bản vá lỗi đã được backported thành công sang Linux 3.4. Các PermissionsHostTest kiểm tra CTS có thể được sử dụng để xác minh hành vi đúng kernel.