Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

การจัดเก็บ

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

เนื่องจาก READ_EXTERNAL_STORAGE ทั้ง 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

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

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