ที่เก็บของ

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

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

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

สิทธิ์

การเข้าถึงที่จัดเก็บข้อมูลภายนอกได้รับการปกป้องด้วยการอนุญาตต่างๆ ของ 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 ปพลิเคชันที่ 9 Android เป้าหมายและเริ่มต้นที่ต่ำกว่าการจัดเก็บข้อมูลแบบเดิมและสามารถเลือกที่จะจัดเก็บแยก ปพลิเคชันที่เป้าหมายของ 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 แสดงให้เห็นว่าแอปที่มีสิทธิ์ไม่จัดเก็บพิเศษและถึง namespace รากที่ adbd และส่วนประกอบอื่น ๆ อาศัยอยู่
  • /mnt/runtime/read แสดงให้เห็นว่าแอปที่มี READ_EXTERNAL_STORAGE (ชุด LEGACY_STORAGE สำหรับ Android 10)
  • /mnt/runtime/write แสดงให้เห็นว่าแอปที่มี WRITE_EXTERNAL_STORAGE

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

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