Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติสำหรับชุมชนคนผิวดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

การเก็บรักษา

ไอคอน HAL ที่จัดเก็บข้อมูลภายนอกของ Android

Android มีการพัฒนาอยู่ตลอดเวลาเพื่อรองรับประเภทและคุณสมบัติของอุปกรณ์เก็บข้อมูลที่หลากหลาย อุปกรณ์สนับสนุน Android ทุกรุ่นที่มีที่ จัดเก็บแบบดั้งเดิม ซึ่งรวมถึงที่เก็บข้อมูลแบบพกพาและจำลอง อุปกรณ์จัดเก็บข้อมูล แบบพกพา สามารถให้บริการโดยสื่อทางกายภาพเช่นการ์ด SD หรือ USB ที่ใช้สำหรับการถ่ายโอนข้อมูลชั่วคราว / การจัดเก็บไฟล์ สื่อทางกายภาพอาจยังคงอยู่กับอุปกรณ์เป็นระยะเวลานาน แต่ไม่ได้เชื่อมโยงกับอุปกรณ์และอาจถูกลบออก การ์ด SD สามารถใช้เป็นที่เก็บข้อมูลแบบพกพาตั้งแต่ Android 1.0; รองรับ USB เพิ่ม Android 6.0 ที่ จัดเก็บข้อมูล จำลอง มีให้โดยเปิดเผยส่วนหนึ่งของที่เก็บข้อมูลภายในผ่านเลเยอร์จำลองและมีให้บริการตั้งแต่ Android 3.0

เริ่มต้นใน Android 6.0, Android สนับสนุน การจัดเก็บ adoptable ซึ่งเป็นผู้ให้บริการสื่อทางกายภาพเช่นการ์ด SD หรือ USB ที่ถูกเข้ารหัสและจัดรูปแบบให้ทำตัวเหมือนจัดเก็บข้อมูลภายใน พื้นที่เก็บข้อมูล Adoptable สามารถจัดเก็บข้อมูลแอปพลิเคชันทุกประเภท

สิทธิ์

การเข้าถึงการจัดเก็บข้อมูลภายนอกได้รับการคุ้มครองโดยสิทธิ์ Android ต่างๆ การเริ่มต้นใน Android 1.0 การเข้าถึงเพื่อเขียนนั้นได้รับการป้องกันด้วยสิทธิ์ WRITE_EXTERNAL_STORAGE การเริ่มต้นใน Android 4.1 การเข้าถึงเพื่ออ่านจะได้รับการคุ้มครองด้วยสิทธิ์ READ_EXTERNAL_STORAGE

เริ่มต้นใน Android 4.4 เจ้าของกลุ่มและรูปแบบของไฟล์บนอุปกรณ์จัดเก็บข้อมูลภายนอกอยู่ในขณะนี้ที่สังเคราะห์ขึ้นอยู่กับโครงสร้างไดเรกทอรี สิ่งนี้ทำให้แอปสามารถจัดการไดเรกทอรีเฉพาะแพคเกจของพวกเขาในที่จัดเก็บข้อมูลภายนอกโดยไม่จำเป็นต้องมีสิทธิ์ WRITE_EXTERNAL_STORAGE กว้าง ๆ ตัวอย่างเช่นแอปที่มีชื่อแพคเกจ com.example.foo สามารถเข้าถึง Android/data/com.example.foo/ อุปกรณ์จัดเก็บข้อมูลภายนอกได้อย่างอิสระโดยไม่ได้รับอนุญาต สิทธิ์สังเคราะห์เหล่านี้ทำได้โดยการห่ออุปกรณ์เก็บข้อมูลดิบใน FUSE daemon

เริ่มต้นใน Android 10 แอพที่กำหนดเป้าหมาย Android 9 และลดค่าเริ่มต้นไปเป็นพื้นที่เก็บข้อมูลแบบดั้งเดิมและสามารถ เลือกใช้ พื้นที่เก็บข้อมูลแยกต่างหาก แอปที่กำหนดเป้าหมายเป็น Android 10 และค่าเริ่มต้นเป็นที่จัดเก็บแบบแยกส่วนสามารถ เลือกไม่ใช้งานชั่วคราว ได้ ใช้แอตทริบิวต์ประจักษ์ requestLegacyExternalStorage ซึ่งควบคุมรูปแบบการจัดเก็บข้อมูลที่จะเปลี่ยนสถานะเริ่มต้น

เนื่องจากทั้ง READ_EXTERNAL_STORAGE และสิทธิ์ WRITE_EXTERNAL_STORAGE นั้นถูก จำกัด แบบนุ่มนวลหากผู้ติดตั้งไม่ได้ขึ้นบัญชีขาวในแอพสิทธิ์การควบคุมการเข้าถึงคอลเลคชั่นเกี่ยวกับหูและภาพเท่านั้นโดยไม่สามารถเข้าถึงการ์ด SD ได้ สิ่งนี้ใช้ได้แม้ว่าแอพร้องขอที่เก็บข้อมูลดั้งเดิม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อ จำกัด ทั้งแบบแข็งและข้อ จำกัด แบบอ่อนให้ดูข้อ จำกัด แบบ แข็งและแบบอ่อนใน Android 10

หากตัวติดตั้งอนุญาตรายการที่อนุญาตให้ใช้งานได้แอปที่ทำงานในโหมดดั้งเดิมจะได้รับสิทธิ์การใช้งานที่ไม่ได้รับอนุญาต ได้รับอนุญาตควบคุมการเข้าถึงการ์ด SD และคอลเลกชันหูและภาพ สิ่งนี้เกิดขึ้นเมื่อแอปพลิเคชันกำหนดเป้าหมาย Android 9 หรือต่ำกว่าและไม่เลือกใช้พื้นที่เก็บข้อมูลแยกต่างหากหรือตั้งเป้าหมาย Android 10 และเลือกไม่ใช้

สถานะรายการที่อนุญาตสามารถระบุได้ในเวลาติดตั้งเท่านั้นและไม่สามารถเปลี่ยนแปลงได้จนกว่าจะติดตั้งแอปแล้ว

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าสิทธิ์ READ_EXTERNAL_STORAGE ให้ดูที่ setWhitelistedRestrictedPermissions() ในคลาส PackageInstaller.SessionParams

สิทธิ์รันไทม์

Android 6.0 แนะนำรูปแบบการ อนุญาตรันไทม์ ใหม่ที่แอพร้องขอความสามารถเมื่อต้องการในขณะใช้งานจริง เพราะรูปแบบใหม่รวมถึงการ READ/WRITE_EXTERNAL_STORAGE สิทธิ์ความต้องการแพลตฟอร์มเพื่อการเข้าถึงที่จัดเก็บข้อมูลแบบไดนามิกทุนโดยไม่ต้องฆ่าหรือเริ่มต้นใหม่แล้วปพลิเคชันทำงาน ทำได้โดยรักษามุมมองที่แตกต่างกันสามมุมมองของอุปกรณ์เก็บข้อมูลที่เมาท์ทั้งหมด:

  • /mnt/runtime/default แสดงขึ้นสำหรับแอพที่ไม่มีสิทธิ์ในการจัดเก็บพิเศษและไปที่เนมสเปซรูทที่ adbd และส่วนประกอบอื่น ๆ ของระบบอยู่
  • /mnt/runtime/read แสดงต่อแอปที่มี READ_EXTERNAL_STORAGE (ตั้งค่า LEGACY_STORAGE สำหรับ Android 10)
  • /mnt/runtime/write แสดงต่อแอปที่มี WRITE_EXTERNAL_STORAGE

ที่ไซโกตเวลาแยกเราสร้างเนมสเปซการเมาท์สำหรับแต่ละแอพที่กำลังรันและผูกเมาท์มุมมองเริ่มต้นที่เหมาะสมเข้าที่ ในภายหลังเมื่อสิทธิ์การใช้งานรันได้รับ vold จะกระโดดลงในเนมสเปซการเมานท์ของแอพที่รันอยู่แล้ว โปรดทราบว่าการลดระดับการอนุญาตจะส่งผลให้แอปหยุดทำงานเสมอ

ฟังก์ชั่น setns() ใช้ในการใช้งานคุณสมบัตินี้ต้องการอย่างน้อย Linux 3.8 แต่แพตช์ได้รับการแบ็คพอร์ทเรียบร้อยแล้วไปยัง Linux 3.4 การทดสอบ PermissionsHostTest CTS สามารถใช้ตรวจสอบพฤติกรรมของเคอร์เนลที่ถูกต้องได้