Android รองรับอุปกรณ์ที่มีพื้นที่เก็บข้อมูลแบบดั้งเดิม ซึ่งกำหนดให้เป็นระบบไฟล์ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ซึ่งมีคลาสและโหมดสิทธิ์ POSIX ที่ไม่เปลี่ยนรูป แนวคิดของการจัดเก็บข้อมูลแบบดั้งเดิมครอบคลุมพื้นที่จัดเก็บข้อมูลที่จำลองและพกพาได้ ที่จัดเก็บข้อมูลแบบพกพาหมายถึงที่จัดเก็บข้อมูลภายนอกที่ระบบไม่ได้ นำมาใช้ ดังนั้นจึงไม่ได้ฟอร์แมตและเข้ารหัสหรือเชื่อมโยงกับอุปกรณ์เฉพาะ เนื่องจากการจัดเก็บข้อมูลภายนอกแบบเดิมมีการป้องกันข้อมูลที่จัดเก็บน้อยที่สุด รหัสระบบจึงไม่ควรจัดเก็บข้อมูลที่ละเอียดอ่อนไว้ในที่จัดเก็บข้อมูลภายนอก โดยเฉพาะอย่างยิ่ง ไฟล์การกำหนดค่าและบันทึกควรจัดเก็บไว้ในที่จัดเก็บข้อมูลภายในซึ่งสามารถป้องกันได้อย่างมีประสิทธิภาพเท่านั้น
ที่จัดเก็บข้อมูลภายนอกสำหรับผู้ใช้หลายคน
ตั้งแต่ Android 4.2 เป็นต้นไป อุปกรณ์สามารถรองรับผู้ใช้หลายราย และพื้นที่จัดเก็บข้อมูลภายนอกต้องเป็นไปตามข้อจำกัดต่อไปนี้:
- ผู้ใช้แต่ละรายจะต้องมีที่จัดเก็บข้อมูลภายนอกหลักแยกของตนเอง และต้องไม่มีสิทธิ์เข้าถึงที่จัดเก็บข้อมูลภายนอกหลักของผู้ใช้รายอื่น
- เส้นทาง
/sdcard
ต้องแก้ไขไปยังที่จัดเก็บข้อมูลภายนอกหลักเฉพาะผู้ใช้ที่ถูกต้อง โดยขึ้นอยู่กับผู้ใช้ที่กระบวนการกำลังทำงานอยู่ - พื้นที่จัดเก็บสำหรับไฟล์ OBB ขนาดใหญ่ในไดเร็กทอรี
Android/obb
อาจถูกแชร์ระหว่างผู้ใช้หลายคนเพื่อเป็นการเพิ่มประสิทธิภาพ - ที่จัดเก็บข้อมูลภายนอกรองจะต้องไม่สามารถเขียนได้โดยแอป ยกเว้นในไดเร็กทอรีเฉพาะแพ็คเกจที่อนุญาตโดยการอนุญาตแบบสังเคราะห์
การใช้งานแพลตฟอร์มเริ่มต้นของคุณสมบัตินี้ใช้ประโยชน์จากเนมสเปซเคอร์เนล Linux เพื่อสร้างตารางการเมาต์แบบแยกสำหรับกระบวนการ Zygote-forked แต่ละกระบวนการ จากนั้นใช้การเมานต์แบบผูกเพื่อนำเสนอที่จัดเก็บข้อมูลภายนอกหลักเฉพาะผู้ใช้ที่ถูกต้องในเนมสเปซส่วนตัวนั้น
เมื่อบูตระบบ ระบบจะติดตั้ง FUSE daemon ที่จัดเก็บข้อมูลภายนอกที่จำลองเพียงตัวเดียวที่ EMULATED_STORAGE_SOURCE
ซึ่งถูกซ่อนจากแอป หลังจาก Zygote forks มันจะผูกเข้ากับไดเร็กทอรีย่อยเฉพาะผู้ใช้ที่เหมาะสมจากภายใต้ FUSE daemon ไปยัง EMULATED_STORAGE_TARGET
เพื่อให้เส้นทางที่จัดเก็บข้อมูลภายนอกแก้ไขได้อย่างถูกต้องสำหรับแอป เนื่องจากแอปไม่มีจุดเชื่อมต่อที่สามารถเข้าถึงได้สำหรับพื้นที่จัดเก็บข้อมูลของผู้ใช้รายอื่น พวกเขาจึงสามารถเข้าถึงพื้นที่เก็บข้อมูลสำหรับผู้ใช้ที่เริ่มต้นเท่านั้น
การใช้งานนี้ยังใช้คุณสมบัติเคอร์เนลย่อยที่ใช้ร่วมกันเพื่อเผยแพร่เหตุการณ์การต่อเชื่อมจากเนมสเปซรูทเริ่มต้นไปยังเนมสเปซของแอป ซึ่งช่วยให้มั่นใจได้ว่าคุณสมบัติเช่นคอนเทนเนอร์ ASEC และการติดตั้ง OBB จะทำงานต่อไปได้อย่างถูกต้อง โดยติดตั้ง rootfs แบบแชร์ จากนั้นติดตั้งใหม่เป็นทาสหลังจากสร้างเนมสเปซ Zygote แต่ละตัวแล้ว
อุปกรณ์จัดเก็บข้อมูลภายนอกหลายเครื่อง
เริ่มตั้งแต่ Android 4.4 เป็นต้นไป อุปกรณ์จัดเก็บข้อมูลภายนอกหลายเครื่องจะปรากฏให้นักพัฒนาเห็นผ่าน Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
และ Context.getObbDirs()
สิทธิ์ WRITE_EXTERNAL_STORAGE
จะต้องให้สิทธิ์การเขียนแก่ที่จัดเก็บข้อมูลภายนอกหลักบนอุปกรณ์เท่านั้น แอปต้องไม่ได้รับอนุญาตให้เขียนไปยังอุปกรณ์จัดเก็บข้อมูลภายนอกสำรอง ยกเว้นในไดเร็กทอรีเฉพาะแพ็คเกจตามที่อนุญาตโดยสิทธิ์สังเคราะห์ การจำกัดการเขียนในลักษณะนี้จะทำให้ระบบสามารถล้างไฟล์ได้เมื่อถอนการติดตั้งแอปพลิเคชัน
รองรับสื่อ USB
Android 6.0 รองรับอุปกรณ์จัดเก็บข้อมูลแบบพกพาที่เชื่อมต่อกับอุปกรณ์ในช่วงเวลาสั้นๆ เท่านั้น เช่น แฟลชไดรฟ์ USB เมื่อผู้ใช้ใส่อุปกรณ์พกพาใหม่ แพลตฟอร์มจะแสดงการแจ้งเตือนเพื่อให้พวกเขาคัดลอกหรือจัดการเนื้อหาของอุปกรณ์นั้น
ใน Android 6.0 อุปกรณ์ใดๆ ที่ไม่ได้นำมาใช้จะถือเป็นอุปกรณ์พกพา เนื่องจากอุปกรณ์จัดเก็บข้อมูลแบบพกพาเชื่อมต่อกันเพียงระยะเวลาสั้นๆ แพลตฟอร์มนี้จึงหลีกเลี่ยงการทำงานหนักๆ เช่น การสแกนสื่อ แอพของบริษัทอื่นต้องผ่าน Storage Access Framework เพื่อโต้ตอบกับไฟล์บนที่จัดเก็บข้อมูลแบบพกพา การเข้าถึงโดยตรงถูกบล็อกอย่างชัดเจนด้วยเหตุผลด้านความเป็นส่วนตัวและความปลอดภัย