ทำความเข้าใจกับพื้นที่เก็บข้อมูลที่กำหนดขอบเขตของ Android: อะไรเปลี่ยนแปลงไปและเหตุใดจึงสำคัญ

A smartphone beside small storage drawers with one locked, illustrating Android scoped storage

หากคุณเคยพยายามจัดการไฟล์บนอุปกรณ์ Android คุณอาจสังเกตเห็นว่าสิ่งต่าง ๆ ทำงานแตกต่างออกไป ขึ้นอยู่กับเวอร์ชันของ Android ที่คุณใช้อยู่ เริ่มต้นด้วย Android 10 Google ได้เปิดตัวการเปลี่ยนแปลงพื้นฐานในการโต้ตอบของแอพกับระบบไฟล์ การเปลี่ยนแปลงนี้เรียกว่า พื้นที่เก็บข้อมูลที่มีการกำหนดขอบเขต ได้กำหนดกฎเกี่ยวกับการอ่านและการเขียนไฟล์บนพื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกันใหม่ สำหรับผู้ใช้ที่ไซด์โหลดแอป จัดการไฟล์ OBB หรือทำงานร่วมกับตัวจัดการไฟล์ การทำความเข้าใจพื้นที่จัดเก็บที่กำหนดขอบเขตถือเป็นสิ่งสำคัญ

ในบทความนี้ เราจะสำรวจว่าพื้นที่เก็บข้อมูลที่กำหนดขอบเขตคืออะไร เหตุใด Google จึงนำพื้นที่ดังกล่าวไปใช้ มีผลกระทบต่อผู้ใช้และนักพัฒนาในแต่ละวันอย่างไร และผลกระทบต่อใครก็ตามที่ติดตั้งไฟล์ APK หรือ XAPK นอก Play Store เป็นอย่างไร

ปัญหาเกี่ยวกับโมเดลการจัดเก็บข้อมูลแบบเก่า

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

ลองใช้แอปไฟฉายง่ายๆ ภายใต้รุ่นเก่า หากคุณให้สิทธิ์ในการจัดเก็บข้อมูล มันจะสามารถอ่านรูปภาพของคุณ สแกนเอกสารที่ดาวน์โหลดมา หรือแม้แต่แก้ไขไฟล์ที่เป็นของแอปพลิเคชันอื่น ๆ ได้อย่างเงียบ ๆ ไม่มีการควบคุมแบบละเอียด คุณให้สิทธิ์แอปเข้าถึงพื้นที่เก็บข้อมูลทั้งหมดของคุณหรือปฏิเสธโดยสิ้นเชิง

การเข้าถึงในวงกว้างนี้นำไปสู่ปัญหาในโลกแห่งความเป็นจริง แอพบางตัวรวบรวมข้อมูลผู้ใช้โดยการสแกนพื้นที่เก็บข้อมูลเพื่อหาไฟล์ที่ละเอียดอ่อน คนอื่นๆ ทิ้งไฟล์กำพร้าที่ทำให้อุปกรณ์เกะกะเป็นเวลานานหลังจากถอนการติดตั้งแอป Google ต้องการโซลูชันที่สมดุลระหว่างการใช้งานกับความเป็นส่วนตัว และพื้นที่เก็บข้อมูลที่กำหนดขอบเขตคือคำตอบของพวกเขา

ที่เก็บข้อมูลที่กำหนดขอบเขตทำอะไรได้จริง

พื้นที่จัดเก็บที่กำหนดขอบเขตจะเปลี่ยนความสัมพันธ์ระหว่างแอพและระบบไฟล์โดยพื้นฐาน ภายใต้โมเดลนี้ แต่ละแอปจะได้รับแซนด์บ็อกซ์ส่วนตัวบนที่จัดเก็บข้อมูลภายนอก ซึ่งโดยทั่วไปจะอยู่ที่ /Android/data/[package.name]/ แอปสามารถอ่านและเขียนภายในแซนด์บ็อกซ์ได้อย่างอิสระโดยไม่จำเป็นต้องมีการอนุญาตใดๆ เลย

อย่างไรก็ตาม การเข้าถึงไฟล์นอกแซนด์บ็อกซ์นี้จำเป็นต้องผ่าน API ที่มีการควบคุม นี่คือวิธีการทำงานของโมเดลใหม่:

พื้นที่เก็บข้อมูลเฉพาะแอป

ทุกแอปมีไดเร็กทอรีเฉพาะที่สามารถเข้าถึงได้เท่านั้น เมื่อถอนการติดตั้งแอป ไดเร็กทอรีนี้จะถูกล้างข้อมูลโดยอัตโนมัติ ไม่มีแอปอื่นใดที่สามารถอ่านหรือเขียนไปยังตำแหน่งนี้ได้หากไม่มีการเข้าถึงรูท ซึ่งจะช่วยขจัดปัญหาไฟล์ที่ถูกละเลยและป้องกันการสอดแนมข้อมูลข้ามแอป

คอลเลกชันสื่อ

สำหรับสื่อที่ใช้ร่วมกัน เช่น รูปภาพ วิดีโอ และไฟล์เสียง Android มี MediaStore API แอพสามารถสนับสนุนสื่อไปยังคอลเลกชันที่แชร์และอ่านสื่อที่สร้างโดยแอพอื่น ๆ ได้ แต่ผ่านอินเทอร์เฟซที่มีโครงสร้างนี้เท่านั้น แอปสามารถดูสื่อของตัวเองได้โดยไม่ต้องได้รับอนุญาตใดๆ แต่การเข้าถึงสื่อของแอปอื่นๆ ต้องใช้สิทธิ์ READ_MEDIA_IMAGES, READ_MEDIA_VIDEO หรือ READ_MEDIA_AUDIO ที่นำมาใช้ใน Android 13

กรอบการเข้าถึงพื้นที่เก็บข้อมูล

สำหรับเอกสารและไฟล์ที่ไม่ใช่สื่ออื่นๆ แอปต้องใช้ Storage Access Framework (SAF) สิ่งนี้จะแสดงตัวเลือกไฟล์ระบบให้กับผู้ใช้ ซึ่งจะเป็นผู้เลือกไฟล์หรือไดเร็กทอรีที่แอพสามารถเข้าถึงได้อย่างชัดเจน แอปไม่เคยได้รับการเข้าถึงระบบไฟล์ทั้งหมดแบบครอบคลุม

สิทธิ์ MANAGE_EXTERNAL_STORAGE

สำหรับแอปที่ต้องการการเข้าถึงไฟล์ในวงกว้างอย่างแท้จริง เช่น ตัวจัดการไฟล์ เครื่องมือสำรองข้อมูล และซอฟต์แวร์ป้องกันไวรัส Android จะให้สิทธิ์ MANAGE_EXTERNAL_STORAGE อย่างไรก็ตาม การอนุญาตนี้ต้องได้รับการอนุมัติเป็นพิเศษจาก Google สำหรับแอปที่เผยแพร่ผ่าน Play Store และผู้ใช้จะต้องอนุญาตด้วยตนเองผ่านการตั้งค่าระบบ แทนที่จะเป็นกล่องโต้ตอบธรรมดา

ไทม์ไลน์การเปิดตัว

Google ไม่ได้บังคับใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขตข้ามคืน การเปลี่ยนแปลงเกิดขึ้นอย่างค่อยเป็นค่อยไป:

  • พื้นที่เก็บข้อมูลที่กำหนดขอบเขต ระบบปฏิบัติการ Android 10 (API 29): เปิดตัวแล้ว แต่แอปสามารถเลือกไม่ใช้ requestLegacyExternalStorage="true" ในไฟล์ Manifest ได้ สิ่งนี้ทำให้นักพัฒนามีเวลาปรับตัว
  • ระบบปฏิบัติการ Android 11 (API 30): การตั้งค่าสถานะเดิมถูกละเว้นสำหรับแอปที่กำหนดเป้าหมายเป็น API 30 หรือสูงกว่า พื้นที่เก็บข้อมูลที่กำหนดขอบเขตกลายเป็นสิ่งจำเป็นสำหรับแอปใหม่และแอปที่อัปเดตบน Play Store
  • Android 12 ขึ้นไป: มีการปรับปรุงเพิ่มเติม รวมถึงการอนุญาตสื่อแบบละเอียดและปรับปรุงประสิทธิภาพ SAF
  • ระบบปฏิบัติการ Android 13 (API 33): การอนุญาต READ_EXTERNAL_STORAGE แบบกว้างๆ เลิกใช้แล้วเพื่อสนับสนุนการอนุญาตสื่อที่เฉพาะเจาะจง
  • ระบบปฏิบัติการ Android 14 (API 34): นำเสนอการเข้าถึงรูปภาพและวิดีโอบางส่วน ทำให้ผู้ใช้สามารถให้สิทธิ์ในการเข้าถึงไฟล์เฉพาะ แทนที่จะให้สิทธิ์ในการเข้าถึงไลบรารีสื่อทั้งหมด

พื้นที่จัดเก็บที่กำหนดขอบเขตส่งผลต่อไซด์โหลดอย่างไร

สำหรับผู้ใช้ที่ติดตั้งแอปจากภายนอก Play Store พื้นที่เก็บข้อมูลที่กำหนดขอบเขตจะทำให้เกิดความท้าทายเชิงปฏิบัติบางประการที่ควรค่าแก่การทำความเข้าใจ

การดาวน์โหลดและการเข้าถึงไฟล์ APK

เมื่อคุณดาวน์โหลดไฟล์ APK ผ่านเบราว์เซอร์ โดยทั่วไปไฟล์นั้นจะอยู่ในโฟลเดอร์ Downloads ภายใต้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต แอปเบราว์เซอร์จะเป็นเจ้าของไฟล์นั้น หากคุณต้องการติดตั้งโดยใช้แอพอื่น เช่น ตัวจัดการไฟล์ ตัวจัดการไฟล์นั้นจำเป็นต้องมีการเข้าถึงที่เหมาะสม ตัวจัดการไฟล์สมัยใหม่ส่วนใหญ่จัดการสิ่งนี้อย่างถูกต้องผ่าน SAF แต่ตัวเก่าอาจประสบปัญหา

โปรแกรมติดตั้งแพ็คเกจระบบยังคงสามารถเข้าถึงไฟล์ที่คุณเลือกอย่างชัดเจนผ่านตัวเลือกไฟล์ ดังนั้นขั้นตอนพื้นฐานของการดาวน์โหลดและติดตั้ง APK ยังคงใช้งานได้ อย่างไรก็ตาม ขั้นตอนการติดตั้งอัตโนมัติที่อาศัยการเข้าถึงเส้นทางไฟล์โดยตรงอาจเสียหายได้

ไฟล์ OBB และข้อมูลเกม

นี่คือจุดที่พื้นที่จัดเก็บที่กำหนดขอบเขตสร้างความขัดแย้งมากที่สุดสำหรับเครื่องไซด์โหลด เกมใหญ่ๆ หลายเกมใช้ไฟล์ OBB (Opaque Binary Blob) ที่จัดเก็บไว้ใน /Android/obb/[package.name]/ ในรุ่นเก่า คุณสามารถคัดลอกไฟล์ OBB ไปยังไดเร็กทอรีที่ถูกต้องโดยใช้ตัวจัดการไฟล์ใดก็ได้

ด้วยพื้นที่เก็บข้อมูลที่กำหนดขอบเขต ไดเร็กทอรี /Android/obb/ จะถูกจำกัด บน Android 11 และใหม่กว่า แอปทั่วไปไม่สามารถเขียนไปยังไดเรกทอรี OBB ของแอปอื่นได้ ซึ่งหมายความว่าหากคุณดาวน์โหลดไฟล์ XAPK ที่มีข้อมูล OBB โปรแกรมติดตั้งจำเป็นต้องมีการจัดการพิเศษเพื่อวางไฟล์เหล่านั้นอย่างถูกต้อง

เครื่องมืออย่าง เครื่องแยก OBB ของเราสามารถช่วยคุณแยกไฟล์ OBB จากแพ็คเกจ XAPK ได้ แต่การวางไฟล์เหล่านั้นไว้ในไดเร็กทอรีที่ถูกต้องบน Android เวอร์ชันใหม่กว่าอาจต้องใช้ตัวจัดการไฟล์ที่ได้รับอนุญาต MANAGE_EXTERNAL_STORAGE หรือใช้คำสั่ง ADB จากคอมพิวเตอร์

ข้อควรพิจารณาในการติดตั้ง XAPK

ไฟล์ XAPK รวม APK เข้ากับข้อมูล OBB และบางครั้งก็แยกการกำหนดค่า APK การติดตั้งสิ่งเหล่านี้บนอุปกรณ์ที่ใช้ Android 11 ขึ้นไปจำเป็นต้องมีตัวติดตั้งที่เข้าใจข้อจำกัดของพื้นที่เก็บข้อมูลที่กำหนดขอบเขต โปรแกรมติดตั้งจำเป็นต้องถือสิทธิ์ MANAGE_EXTERNAL_STORAGE หรือใช้ API ที่เหมาะสมเพื่อวางไฟล์ OBB ในตำแหน่งที่ถูกต้อง

นี่คือเหตุผลหนึ่งว่าทำไมการแปลงไฟล์ XAPK เป็นรูปแบบ APK มาตรฐานจึงมีประโยชน์ APK แบบสแตนด์อโลนไม่จำเป็นต้องมีตำแหน่งไฟล์ OBB ทำให้กระบวนการติดตั้งบน Android เวอร์ชันใหม่กว่าง่ายขึ้น คุณสามารถใช้ เครื่องมือแปลง XAPK เป็น APK ของเราเพื่อแยก APK พื้นฐานออกจากแพ็คเกจ XAPK

สิ่งที่นักพัฒนาจำเป็นต้องรู้

หากคุณกำลังพัฒนาแอป Android พื้นที่เก็บข้อมูลที่กำหนดขอบเขตจำเป็นต้องพิจารณาวิธีจัดการไฟล์ใหม่:

  • ใช้ไดเรกทอรีเฉพาะแอป สำหรับไฟล์ใดๆ ที่แอปของคุณต้องการเท่านั้น สิ่งเหล่านี้ไม่จำเป็นต้องมีการอนุญาตและจะถูกล้างข้อมูลโดยอัตโนมัติเมื่อถอนการติดตั้ง
  • ใช้มีเดียสโตร์ สำหรับรูปภาพ วิดีโอ และเสียงที่แอปอื่นควรมองเห็นได้และรอดจากการถอนการติดตั้ง
  • ใช้ SAF เมื่อแอปของคุณจำเป็นต้องทำงานกับเอกสารหรือไดเร็กทอรีที่ผู้ใช้เลือก
  • เส้นทาง หลีกเลี่ยงเส้นทางไฟล์แบบฮาร์ดโค้ด เช่น /sdcard/MyApp/ ไม่น่าเชื่อถืออีกต่อไป ใช้ Context.getExternalFilesDir() แทน
  • พฤติกรรมของ ทดสอบกับ API หลายระดับ จะแตกต่างกันอย่างมากระหว่าง Android 10, 11, 13 และ 14

กลยุทธ์การย้ายถิ่น

หากก่อนหน้านี้แอปของคุณจัดเก็บไฟล์ในพื้นที่จัดเก็บข้อมูลที่ใช้ร่วมกัน คุณต้องมีแผนการย้ายข้อมูล วิธีการที่แนะนำคือการคัดลอกไฟล์ที่มีอยู่ไปยังพื้นที่จัดเก็บข้อมูลเฉพาะแอปเมื่อเปิดตัวครั้งแรกหลังการอัปเดต จากนั้นจึงลบสำเนาเก่า ใช้ Environment.getExternalStorageDirectory() กับแฟล็กแบบเดิมในช่วงระยะเวลาการเปลี่ยนแปลงเพื่ออ่านไฟล์เก่า จากนั้นย้ายไปยังตำแหน่งใหม่

ความเข้าใจผิดที่พบบ่อย

"พื้นที่เก็บข้อมูลที่กำหนดขอบเขตหมายความว่าแอปไม่สามารถเข้าถึงไฟล์ใดๆ ได้"

นี่เป็นเท็จ แอพยังคงสามารถเข้าถึงไฟล์ของตัวเองได้อย่างอิสระ สนับสนุนคอลเลกชั่นสื่อที่แชร์ และขอเข้าถึงไฟล์เฉพาะผ่านเครื่องมือเลือกระบบ สิ่งที่เปลี่ยนแปลงคือแอปไม่สามารถเรียกดูระบบไฟล์ทั้งหมดแบบเงียบๆ ได้อีกต่อไป

"ตัวจัดการไฟล์ใช้งานไม่ได้ใน Android เวอร์ชันใหม่"

ตัวจัดการไฟล์ที่ร้องขอ MANAGE_EXTERNAL_STORAGE ยังคงใช้งานได้ ผู้ใช้เพียงแค่ต้องให้สิทธิ์พิเศษนี้ผ่านการตั้งค่า ตัวจัดการไฟล์ยอดนิยมส่วนใหญ่ได้ปรับให้เข้ากับข้อกำหนดนี้แล้ว

"ที่เก็บข้อมูลที่กำหนดขอบเขตมีผลกับการ์ด SD เท่านั้น"

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

เคล็ดลับการปฏิบัติสำหรับผู้ใช้

หากคุณไซด์โหลดแอปหรือจัดการไฟล์บนอุปกรณ์ Android ของคุณเป็นประจำ คำแนะนำที่เป็นประโยชน์มีดังนี้:

  1. ใช้ตัวจัดการไฟล์ที่ทันสมัย ที่รองรับ MANAGE_EXTERNAL_STORAGE แอพเช่น Solid Explorer, MiXplorer และ Total Commander ได้ปรับให้เข้ากับพื้นที่จัดเก็บข้อมูลที่กำหนดขอบเขตอย่างดี
  2. ให้สิทธิ์อย่างระมัดระวัง เมื่อตัวจัดการไฟล์ถามถึง "การเข้าถึงไฟล์ทั้งหมด" โปรดทราบว่านี่คือสิทธิ์ของ MANAGE_EXTERNAL_STORAGE และจำเป็นสำหรับฟังก์ชันการทำงานเต็มรูปแบบ
  3. ใช้ ADB สำหรับการดำเนินการกับไฟล์ที่ดื้อรั้น หากคุณไม่สามารถวางไฟล์ OBB ผ่านตัวจัดการไฟล์ได้ การเชื่อมต่ออุปกรณ์ของคุณเข้ากับคอมพิวเตอร์ และการใช้ adb push จะข้ามข้อจำกัดการจัดเก็บข้อมูลที่กำหนดขอบเขตโดยสิ้นเชิง
  4. แปลงแพ็คเกจที่ซับซ้อนให้เป็นรูปแบบที่ง่ายกว่า หากไฟล์ XAPK ทำให้คุณประสบปัญหาในอุปกรณ์รุ่นใหม่ การแยกเฉพาะส่วนประกอบ APK อาจเป็นเส้นทางที่มีการต่อต้านน้อยที่สุด
  5. อัปเดตแอปตัวติดตั้งของคุณอยู่เสมอ ตัวติดตั้ง XAPK เวอร์ชันเก่ากว่าอาจไม่จัดการที่เก็บข้อมูลที่กำหนดขอบเขตอย่างถูกต้อง

อนาคตของการจัดเก็บข้อมูล Android

Google ยังคงปรับแต่งรูปแบบการจัดเก็บข้อมูลใน Android แต่ละรุ่นต่อไป Android 14 เปิดตัวการเข้าถึงสื่อบางส่วน ทำให้ผู้ใช้สามารถแชร์รูปภาพที่ต้องการกับแอปได้ แทนที่จะแชร์รูปภาพทั้งหมดจากไลบรารี คาดว่า Android 15 จะนำการปรับปรุงเพิ่มเติมมาสู่ประสิทธิภาพและการใช้งานของ Storage Access Framework

แนวโน้มนี้ชัดเจน: Android กำลังก้าวไปสู่รุ่นที่ผู้ใช้สามารถควบคุมสิ่งที่แต่ละแอปสามารถดูและแก้ไขได้อย่างละเอียด แม้ว่าสิ่งนี้จะสร้างความขัดแย้งให้กับผู้ใช้ระดับสูงและผู้ไซด์โหลด แต่ก็ปรับปรุงความเป็นส่วนตัวและความปลอดภัยสำหรับฐานผู้ใช้ในวงกว้างขึ้นอย่างมาก

การทำงานกับพื้นที่เก็บข้อมูลที่กำหนดขอบเขตโดยไม่ทำให้ข้อมูลแอปเสียหาย

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

การติดตั้ง APK, การวางไฟล์ OBB และการจัดการพื้นที่จัดเก็บข้อมูลแบบวันต่อวัน ล้วนทำงานอยู่ในระบบเดียวกัน: พื้นที่จัดเก็บที่กำหนดขอบเขต เมื่อคุณเข้าใจวิธีการทำงานแล้ว คุณจะเป็นผู้ควบคุมอุปกรณ์ของคุณ แทนที่จะตกอยู่ภายใต้ความเมตตาของแอพที่อาจละเมิดการเข้าถึงไฟล์ในวงกว้าง

ออกแบบและจัดทำเอกสารโดย Mst Shaefale หัวหน้านักพัฒนาและสถาปนิกแพ็คเกจ Android • ตรวจสอบแล้วบน Android 12–15

Mst Shaefale ดูแลการควบรวมกิจการ XAPK/APKS ฝั่งไคลเอ็นต์, ตัวแยกวิเคราะห์รายการไบนารี และเครื่องมือลงนาม APK v1+v2 ที่ xapktoapk.com พบคำสั่งที่ล้าสมัยหรือการเปลี่ยนแปลงระบบปฏิบัติการหรือไม่ ส่งบันทึกบรรณาธิการ