
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 เพื่อโต้ตอบกับไฟล์บนที่เก็บข้อมูลแบบพกพา การเข้าถึงโดยตรงถูกบล็อกอย่างชัดเจนด้วยเหตุผลด้านความเป็นส่วนตัวและความปลอดภัย