หากคุณเคยพยายามจัดการไฟล์บนอุปกรณ์ 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 ของคุณเป็นประจำ คำแนะนำที่เป็นประโยชน์มีดังนี้:
- ใช้ตัวจัดการไฟล์ที่ทันสมัย ที่รองรับ MANAGE_EXTERNAL_STORAGE แอพเช่น Solid Explorer, MiXplorer และ Total Commander ได้ปรับให้เข้ากับพื้นที่จัดเก็บข้อมูลที่กำหนดขอบเขตอย่างดี
- ให้สิทธิ์อย่างระมัดระวัง เมื่อตัวจัดการไฟล์ถามถึง "การเข้าถึงไฟล์ทั้งหมด" โปรดทราบว่านี่คือสิทธิ์ของ MANAGE_EXTERNAL_STORAGE และจำเป็นสำหรับฟังก์ชันการทำงานเต็มรูปแบบ
- ใช้ ADB สำหรับการดำเนินการกับไฟล์ที่ดื้อรั้น หากคุณไม่สามารถวางไฟล์ OBB ผ่านตัวจัดการไฟล์ได้ การเชื่อมต่ออุปกรณ์ของคุณเข้ากับคอมพิวเตอร์ และการใช้ adb push จะข้ามข้อจำกัดการจัดเก็บข้อมูลที่กำหนดขอบเขตโดยสิ้นเชิง
- แปลงแพ็คเกจที่ซับซ้อนให้เป็นรูปแบบที่ง่ายกว่า หากไฟล์ XAPK ทำให้คุณประสบปัญหาในอุปกรณ์รุ่นใหม่ การแยกเฉพาะส่วนประกอบ APK อาจเป็นเส้นทางที่มีการต่อต้านน้อยที่สุด
- อัปเดตแอปตัวติดตั้งของคุณอยู่เสมอ ตัวติดตั้ง XAPK เวอร์ชันเก่ากว่าอาจไม่จัดการที่เก็บข้อมูลที่กำหนดขอบเขตอย่างถูกต้อง
อนาคตของการจัดเก็บข้อมูล Android
Google ยังคงปรับแต่งรูปแบบการจัดเก็บข้อมูลใน Android แต่ละรุ่นต่อไป Android 14 เปิดตัวการเข้าถึงสื่อบางส่วน ทำให้ผู้ใช้สามารถแชร์รูปภาพที่ต้องการกับแอปได้ แทนที่จะแชร์รูปภาพทั้งหมดจากไลบรารี คาดว่า Android 15 จะนำการปรับปรุงเพิ่มเติมมาสู่ประสิทธิภาพและการใช้งานของ Storage Access Framework
แนวโน้มนี้ชัดเจน: Android กำลังก้าวไปสู่รุ่นที่ผู้ใช้สามารถควบคุมสิ่งที่แต่ละแอปสามารถดูและแก้ไขได้อย่างละเอียด แม้ว่าสิ่งนี้จะสร้างความขัดแย้งให้กับผู้ใช้ระดับสูงและผู้ไซด์โหลด แต่ก็ปรับปรุงความเป็นส่วนตัวและความปลอดภัยสำหรับฐานผู้ใช้ในวงกว้างขึ้นอย่างมาก
การทำงานกับพื้นที่เก็บข้อมูลที่กำหนดขอบเขตโดยไม่ทำให้ข้อมูลแอปเสียหาย
พื้นที่เก็บข้อมูลที่กำหนดขอบเขตเป็นหนึ่งในการเปลี่ยนแปลงที่สำคัญที่สุดในสถาปัตยกรรมของ Android ในช่วงไม่กี่ปีที่ผ่านมา ด้วยการจำกัดแอปให้อยู่ในแซนด์บ็อกซ์ของตนเอง และต้องได้รับความยินยอมจากผู้ใช้อย่างชัดเจนเพื่อการเข้าถึงในวงกว้าง Google ได้ปรับปรุงสถานะความเป็นส่วนตัวของแพลตฟอร์มอย่างมาก สำหรับผู้ใช้ที่ไซด์โหลดแอปและจัดการไฟล์ด้วยตนเอง การทำความเข้าใจข้อจำกัดเหล่านี้จะช่วยให้คุณแก้ไขจุดเสียดสีเป็นครั้งคราวได้ และสำหรับนักพัฒนา การปรับให้เข้ากับพื้นที่จัดเก็บข้อมูลที่กำหนดขอบเขตไม่ใช่ทางเลือก แต่เป็นข้อกำหนดพื้นฐานสำหรับการพัฒนา Android ยุคใหม่
การติดตั้ง APK, การวางไฟล์ OBB และการจัดการพื้นที่จัดเก็บข้อมูลแบบวันต่อวัน ล้วนทำงานอยู่ในระบบเดียวกัน: พื้นที่จัดเก็บที่กำหนดขอบเขต เมื่อคุณเข้าใจวิธีการทำงานแล้ว คุณจะเป็นผู้ควบคุมอุปกรณ์ของคุณ แทนที่จะตกอยู่ภายใต้ความเมตตาของแอพที่อาจละเมิดการเข้าถึงไฟล์ในวงกว้าง