คงจะได้เสียงเล่าเสียงลือกันมาพอสมควรแล้วว่า Android M จะมีฟีเจอร์ที่ทำให้สามารถเปลี่ยนพื้นที่ใน SD Card ให้กลายเป็นหน่วยความจำภายในเครื่องได้ (Internal Storage) [IO15] ถอดรหัสฟีเจอร์ใน Android M ที่ Google ยังไม่ได้บอก จึงทำให้เกิดข้อสงสัยกันว่าถ้าทำให้เป็นหน่วยความจำในเครื่องแล้ว จะย้ายไฟล์ทั้งหมดไปไว้ใน SD Card แทนได้หรือป่าว

      ผมก็เลยลองทดสอบกับเครื่อง Nexus 5 ที่ลง Android M Developer Preview แล้วลองเล่นฟีเจอร์ Adoptable Storage Devices เพื่อทดสอบการทำงานว่ามันทำงานได้อย่างที่เข้าใจกันหรือป่าว

      ขอบอกไว้ก่อนเลยนะครับว่าตอนนี้ Android M ยังไม่สมบูรณ์ดีนัก และจะมีการอัพเดทปรับปรุงไปเรื่อยๆ ดังนั้นฟีเจอร์ Adoptable Storage Devices (ต่อไปจะขอเรียกสั้นๆว่า Adopt) ในตอนนี้ก็อาจจะยังไม่สมบูรณ์ 100% และอาจจะมีการอัพเดทเพิ่มเติมในภายหลังก็ได้

      สำหรับการ Adopt ในตอนนั้นยังไม่ได้เปิดให้ใช้งานโดยตรง แต่ถูกซ่อนไว้เพื่อให้นักพัฒนาที่ต้องการทดสอบสามารถเปิดใช้งานได้ เพื่อทดสอบว่าแอปของตัวเองนั้นสามารถทำงานได้หรือไม่เวลาที่ผู้ใช้เปิดใช้งาน Adopt

 

แต่เครื่องที่ลอง Android M ได้ในตอนนี้มีแต่ Nexus ที่ไม่รองรับ SD Card

      จุดประสงค์ของฟีเจอร์นี้คือต้องการเปลี่ยน SD Card ให้กลายเป็น Internal Storage ได้ แต่ทว่าเครื่องที่สามารถทดลองใช้งาน Android M ได้กลับมีแต่ Nexus 5, 6, 9 และ Player ที่ไม่มีช่องให้ใส่ Micro SD Card (ของ Sony ก็ปล่อยให้ลองแล้ว แต่ไม่รู้ว่ารองรับฟีเจอร์นี้หรือยัง) จึงดูเป็นเรื่องตลกที่ไม่รู้จะทดสอบฟีเจอร์นี้ยังไง

      แต่เดี๋ยวก่อน เห็นแบบนี้ Nexus ก็ลองได้นะ

      เพราะว่าการ Adopt นั้นไม่ได้รองรับแค่ SD Card แต่ยังรองรับไปถึง USB Storage ทั้งหลายที่ต่อเข้าทาง USB OTG ด้วย ดังนั้นนักพัฒนาจึงสามารถทดสอบได้ด้วยการใช้ Flashdrive หรือ Storage Device อื่นๆที่ต่อผ่าน OTG ได้ 

      ดังนั้นผมจึงหยิบเจ้า Apacer ความจุ 8GB ที่ไม่ค่อยได้ใช้แล้วมาลองใช้กับฟีเจอร์นี้ดู

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

adb shell sm set-force-adoptable true

 

ลองใช้งาน Adoptable Storage Devices 

      โดยปกติ Android M เวลาเสียบ USB Storage ผ่าน OTG จะมี Notification แจ้งเตือนด้วย เพราะว่ารองรับการเปิดไฟล์ใน USB Storage โดยไม่จำเป็นต้องใช้แอปช่วยแล้ว (แต่เดาว่าไม่รองรับ NTFS) 

 

      แต่พอเปิดใช้งาน Adopt จะเห็นว่า Action ที่ให้เลือกจาก Explore เปลี่ยนเป็น Setup แทน

 

      เมื่อกด Setup ก็จะเข้าสู่หน้าตั้งค่าเพื่อทำให้กลายเป็น Internal Storage ซึ่งการทำแบบนี้จะต้อง Format USB Storage ที่เอามาต่อ ถ้าใครจะลองทำก็อย่าลืมเอาข้อมูลออกมาให้หมดก่อนนะครับ

 

      โดยระบบจะ Format ให้กลายเป็นที่เก็บข้อมูลแบบ VFAT (Virtual FAT) แล้วจะสามารถเลือกให้ย้ายข้อมูลแอปไปลงในนั้นได้ทันทีเลย

 

ย้ายข้อมูลแล้วเป็นยังไงบ้าง?

      เมื่อย้ายข้อมูลเสร็จและไปดูหน้ารายละเอียดพื้นที่เก็บข้อมูลก็จะเห็นว่า USB Storage ตัวนั้นๆถูกรวมเป็น Internal Storage แล้ว

 

      จากการนั่งงมดูก็จะเห็นว่ามีข้อมูลเกมบางส่วนถูกย้ายไปเรียบร้อยแล้ว แต่ทว่าจะเป็นพวก Expansion File อย่างพวกข้อมูลเกมที่เป็นไฟล์​ obb เท่านั้น แต่ไฟล์นอกเหนือจากนั้นก็ยังคงดองอยู่ในเครื่อง รวมไปถึงไฟล์ที่โหลดแล้วเก็บไว้ในพื้นที่ส่วนตัวของแอปด้วย

      จากภาพข้างบน โดยปกติแล้ว Asphalt 8 จะมีตัวเกมขนาด 2GB แต่เมื่อพอย้ายข้อมูลเสร็จก็จะเหลือไม่กี่ร้อย ทั้งนี้เพราะว่าตัวไฟล์เกมที่ใหญ่ๆนั้นอยู่ในรูปของ OBB

      แต่เมื่อดูที่ Google Spotlight Stories ก็จะเห็นว่ามีขนาดใหญ่ถึง 619MB ทั้งนี้ก็เพราะว่าแอปดังกล่าวมีการโหลดข้อมูลภายในแอป และข้อมูลที่ว่านี้ก็ถูกเก็บไว้ในเครื่อง ไม่ได้โดนย้ายไปเก็บไว้ใน USB Storage 

 

      และก็ไม่มีเมนูย้ายแอปหรือข้อมูล ในหน้าแสดงรายละเอียดของแอปแต่ละตัว

      ในการย้ายข้อมูลจะเป็นการย้ายข้อมูลของทุกแอป โดยจะมีตัวเลือก Migrate Data ให้เลือกในหน้าแสดงรายละเอียดของพื้นที่เก็บข้อมูล และสามารถย้ายข้อมูลไปมาระหว่าง Internal Storage กับ USB Device ได้ด้วย

      และเมื่อเปิดเข้าไปดู Directory ของข้อมูลที่เก็บไว้ใน USB Storage ระบบจะสร้าง Directory ไว้ที่ /mnt/expand

 

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

 

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

      จะเห็นว่าหมวดหมู่ของข้อมูลจะมีคำว่า Apps & app data ด้วย นั่นหมายความว่ามันจะย้ายแอปมาเก็บไว้ได้ด้วยจริงๆ 

      และในหน้าเว็ปสำหรับนักพัฒนาแอนดรอยด์ที่มีการ Guideline ให้นักพัฒนาทำแอปให้รองรับกับฟีเจอร์นี้ จะการแนะนำให้ใช้คำสั่งต่างๆเพื่อให้ใช้งานกับฟีเจอร์นี้ได้ ทำให้เห็นว่าสามารถย้ายไฟล์ข้อมูลของแอปไปไว้ใน USB Storage ได้จริงๆ เช่น Database, Cache หรือ Resource เป็นต้น 

 

      รวมไปถึงคำอธิบายที่บอกว่าย้ายทั้งแอปและข้อมูลส่วนตัวของแอป (เป็นข้อมูลจากตัวแอปสร้างขึ้นมาระหว่างทำงาน ไม่ใช่ข้อมูลส่วนตัวของผู้ใช้)

This feature allows users to move both apps and private data of those apps between storage devices

 

ถ้าถอด USB Storage ออกกลางคันล่ะ?  

      เมื่อใช้งาน Adopt อยู่ นั่นก็หมายความว่า SD Card หรือ USB Device นั้นอาจจะเขียน/อ่านข้อมูลได้ตลอดเวลา ดังนั้นจึงไม่ควรไปถอดออกกลางคัน เพราะอาจจะทำให้ไฟล์ข้อมูลสูญหายได้

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

     อยากจะใช้งานอีกครั้งก็จะเสียบอุปกรณ์เข้าไปเหมือนเดิม มันก็จะ Mount ข้อมูลให้กลับมาทำงานได้ต่อโดยอัตโนมัติ

 

     แต่ถ้าถอดออกก็อาจจะทำให้แอปบางตัวไม่สามารถทำงานได้ เพราะข้อมูลของแอปนั้นๆถูกย้ายไปแล้ว

 

      หรือแม้แต่ติดตั้งแอปที่มีไฟล์ OBB ก็จะทำไม่ได้ เพราะมันจะถามหา External Storage อยู่ตลอดเวลา แต่ถ้าเป็นแอปขนาดไม่ใหญ่และไม่มีไฟล์ OBB ก็ยังดาวน์โหลดได้ปกติ (เพราะมันจะติดตั้งในเครื่องอยู่แล้ว)

 

เพิ่มเติมสำหรับชาว Geek 

      สำหรับฟีเจอร์นี้จะมีคำสั่ง Storage Manager หรือคำสั่ง sm เพิ่มเข้ามาใน Shell Command ด้วย ดังนั้นถ้าใครอยากลองคำสั่งนี้ดูก็ให้ ADB Shell เข้าไปแล้วลองเรียกใช้งานคำสั่ง sm ดูได้เช่นกัน

      ซึ่งคำสั่งนี้ไม่จำเป็นต้องรูท จึงหมายความว่านักพัฒนาสามารถเขียนแอปเพื่อ Execute คำสั่งพวกนี้ได้เลยนะ 

 

สรุป

      ฟีเจอร์นี้อาจจะไม่ใช่ฟีเจอร์ที่น่าฮือฮามากนัก เพราะว่าอุปกรณ์แอนดรอยด์หลายๆรุ่นมันก็รองรับการย้ายข้อมูลลง SD Card มาตั้งแต่ชาติปางก่อนแล้ว แต่การที่มีฟีเจอร์นี้เพิ่มเข้ามาใน Android M ก็ยังเป็นเรื่องที่น่าดีใจและแปลกใหม่ไม่น้อย เพราะจะทำให้อุปกรณ์แอนดรอยด์สามารถนำ SD Card หรือ USB Storage มาทำให้กลายเป็น Internal Storage ได้ ซึ่งต่างจากปกติที่เวลาเสียบ SD Card ก็จะมองเป็นแค่ External Storage เท่านั้น ยังไม่ได้เป็นระดับ Internal Storage 

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

      แต่ทว่าในตอนนี้ก็ยังย้ายไม่ได้ เพราะยังไม่สมบูรณ์ ต้องรออัพเดทความคืบหน้ากันไปเรื่อยๆกับ Android M Developer Preview ในเวอร์ชันถัดๆไปจนกว่าจะปล่อยให้ใช้งานจริงกัน

 

แหล่งอ้างอิงข้อมูล

  • http://nelenkov.blogspot.de/2015/06/decrypting-android-m-adopted-storage.html
  • https://developer.android.com/preview/behavior-changes.html#behavior-adoptable-storage 
  • ขอบคุณคุณ montreep ที่ช่วยแจ้งเพิ่มเติมครับ