Saturday 15 October 2011

วิธี Mount external_sd ภายนอกให้เหมือนอยู่ภายใน internal_sd (ใช้กับ Gameloft ได้)


เกริ่นนำ : เนื่องด้วยเกมส์บนมือถือดีๆดังๆเนี่ย ไฟล์มันใหญ่เสียเหลือหลาย ไอ้เราก็ดันมีพื้นที่ไม่เยอะ แล้วจะทำไงดี ดังนั้นวันนี้ จึงนำวิธีแก้มาฝาก

เตรียมตัว
1.เครื่องต้องรูทให้เรียบร้อยก่อน
2.ผมเทสกับ เครื่อง Galaxy S (I9000) เท่านั้น(มีแค่เครื่องนี้อ่ะ) แต่คิดว่าเครื่องอื่นๆน่าจะไม่แตกต่างกัน อาจจะต่างกันตรงที่ พาร์ธ ของการวางเท่านั้น

วิธีทำ
ในที่นี้ผมจะลิงค์โฟลเดอร์ให้กับ GameLoft ที่อยู่ใน External SD นะครับ
1.โดยตอนแรกก็สร้างโฟลเดอร์เกมส์ ดังภาพข้างล่าง จะเห็นว่ามีแต่โฟลเดอร์ว่างๆ ไม่มีอะไรข้างในแม้แต่น้อย(แน่สิ ก็เราจะเอาเกมส์ไว้ใน external_sd นี่)
2.ตรวจสอบใน external_sd ว่ามีโฟลเดอร์ที่เราต้องการจะลิงค์มายัง internal_sd หรือไม่ (ไม่จำเป็นต้องมีเกมส์ไว้ก่อนนะครับ แต่ในทีนี้จะเป็นการเช็คว่า Link สำเร็จจะเป็นอย่างไร)
3.เปิดโปรแกรม Script Manager ขึ้นมา จะเป็นดังภาพข้างล่างซึ่งยังไม่มี Script ใดๆ อยู่ซึ่งเราจะเตรียมในขั้นตอนถัดไป



ส่วนวิธีการทำมีสองวิธี
วิธีทำแบบ Manual
1โดยให้สร้างชื่อไฟล์ Link_GameLoft.sh (ชื่ออะไรก็ได้)
บรรทัดแรก เอาไว้ระบุที่อยู่ของคำสั่ง (ผมสังเกตว่าถ้า root แล้วก็อาจจะไม่ต้องมีบรรทัดนี้ก็ได้แต่ขี้เกียจลอง)
#!/system/bin/sh
บรรทัดที่สอง เอาไว้ลิงค์โฟลเดอร์ที่ต้องการ (ในที่นี้คือ GameLoft นั่นเอง)
mount -o bind /mnt/sdcard/external_sd/gameloft/games/ /mnt/sdcard/gameloft/games
หมายเหตุไม่จำเป็นต้องแยก 1 script ต่อการ ลิงค์หนึ่งพาร์ธ นะครับ จะมีหลายๆลิงค์ๆก็ได้ โดยวิธีการใช้งานคือ
mount -o bind <ปลายทาง(ส่วนใหญ่ก็เป็นใน external_sd)> <ต้นทาง(ส่วนใหญ่ก็เป็น ใน sdcard)>
2.ทำการ Save file ให้เรียบร้อยแล้วก็ Copy ลง มือถือตรงไหนก็ได้ (ผมวางที่ /mnt/sdcard/external_sd/)
สรุป ข้อดีคืออยากให้มันต่อเมื่อไหร่ก็เมื่อนั้น ไม่ต้องกังวล
ข้อเสียก็ต้องมาแมนนวลก่อนต่อ - -"

วิธีทำแบบ Auto(Run as boot)
ทำเหมือนวิธีตะกี้เลยแต่สร้างไฟล์ใหม่ขึ้นมาชื่อว่า StartUpLink_GameLoft.sh(ชื่ออะไรก็ได้เช่นกัน)
ต่างกันดังนี้คือ
1.ตรงบรรทัดก่อนการ mount ให้ทำการใส่ Sleep 60 ไว้ก่อน ก็แค่นั้นอย่างเช่น
#!/system/bin/sh
sleep 60
mount -o bind /mnt/sdcard/external_sd/gameloft/games/ /mnt/sdcard/gameloft/games

โดยหลักการทำงานก็คือเมื่อเครื่องเปิดเสร็จอีกหกสิบวินาที ที่คาดว่าจะทำการ scanning media ของเครื่องเสร็จ ก็จะทำการรันคำสั่งที่ใส่ไว้หลัง sleep นั่นเอง หากเครื่องไหนช้าๆ ก็อาจจะใส่เวลาเพิ่มขึ้นตามต้องการครับ

สรุป ข้อดีคือไม่ต้องเสียเวลามานั่ง mount path ก่อนที่จะเล่นเกมส์
ข้อเสีย เวลาจะต่อ Mass storage หรือง่ายว่าต่อกับคอม เนี่ย ก็ควรจะ Umount ให้เรียบร้อยเสียก่อน และไม่สามารถทำการเปลี่ยนชื่อโฟลเดอร์ใดๆได้เลย (เฉพาะที่ทำการถูก mount )

สรุปสุดท้ายแต่ละไฟล์
Link_GameLoft.sh:
#!/system/bin/sh
mount -o bind /mnt/sdcard/external_sd/gameloft/games/ /mnt/sdcard/gameloft/games
StartUpLink_GameLoft.sh:
#!/system/bin/sh
sleep 60
mount -o bind /mnt/sdcard/external_sd/gameloft/games/ /mnt/sdcard/gameloft/games
UnLink_GameLoft.sh:
#!/system/bin/sh
umount /mnt/sdcard/gameloft/games/
หมายเหตุ ต้องมี / ปิดท้ายโฟลเดอร์นั้นๆทุกครั้ง มิเช่นนั้นอาจจะเจอคำว่า Failed - -"


สังเกตว่าทำไมมีไฟล์ UnLink_GameLoft.sh ก็เอาไว้ UnLink นั่นเอง ถามว่าทำไปทำไม ก็เพราะว่าถ้าบางทีเราต่อ Mass Storage แล้วนั้นบางทีจะไม่เห็นพวก Internal_sd ก็อาจจะเป็นปัญหาได้ อีกทั้งถ้าไม่ UnLink ก่อน เราก็ไม่สามารถเปลี่ยนชื่อโฟลเดอร์ที่เราทำการลิงค์ไว้ได้ ทำนองนั้น
*สรุปเอาเป็นว่าถ้าจะต่อกับ PC เพื่อทำอะไรกับ Internal_sd แล้วนั้น ควรจะ Unlink ทั้งหมดเสียก่อนครับ

งั้นมาดูขั้นตอนกันต่อ


4.หลังจากเตรียมไฟล์ในมือถือเสร็จ ก็จะเห็นสามไฟล์ดังภาพข้างล่างนี้

5.กดที่ไฟล์ที่เตรียมไว้ โดยในที่นี้คือ Link_GameLoft.sh โดยเมื่อกดเข้าไปให้กดติ๊กดังภาพ คือ Run as root แล้วกด Save เมื่อกด Save ก็จะขึ้นแถบสีเหลืองข้างล่างนะครับ
6.ทำเหมือนขั้นตอนที่ห้ากับไฟล์ StartUpLink_GameLoft.sh แต่จะต่างตรงที่ให้ติ๊กที่ Run at boot เพิ่มด้วยอีกทีนึง เพื่อเวลาที่เครื่อง Restart ก็จะทำการลิงค์ให้อัตโนมัตินั่นเอง

7.ทำเช่นเดียวกับขั้นตอนที่ห้า โดยไฟล์ UnLink_GameLoft.sh เอาไว้ยกเลิกการลิงค์โฟลเดอร์นั่นเอง
8.เมื่อทำเสร็จจะเป็นดังภาพ
9.ณ ตอนนี้ script ยังไม่ได้ถูกทำการเลย ก็ให้ทำการกด Menu ขึ้นมาดังภาพแล้วก็กด List
10. จะเห็นเมนูดังภาพข้างล่าง ให้ทำการกดที่ Link_GameLoft.sh ขึ้นมา
11.ทำการกดรัน
12.หลังจากกดรันจะได้ภาพข้างล่างซึ่งถ้าขึ้น Exit code 0 แสดงว่าทำการลิงค์เสร็จเรียบร้อยแล้วทำการกด Close ออกจากโปรแกรมได้เลย
13.ตรวจสอบว่าลิงค์เสร็จจริงหรือไม่ ก็จะเห็นแค่นี้ก็เรียบร้อยแล้ว เย่ๆ
หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะครับ อย่างเช่นอาจจะอยากลิงค์เกือบทุกสิ่งอย่างไว้ใน external_sd เลยก็ได้ แต่แนะว่าควรจะได้ Microsd ที่ดีๆหน่อยนะครับจะได้ไวๆ
สำหรับผมมันเหมาะกับผมมากเลย เพราะว่าจะได้อัพรอมคุณทีโดยหายห่วง แบ็คอัพไว้ใน external_sd ตลอดศก ^^
คำเตือนอีกครั้งหากต่อ USB กับ PC แล้วมีปัญหาจงทำตรงนี้ก่อน (ก็คือไปรัน Script Unlink_GameLoft.sh นั่นเอง)
*สรุปเอาเป็นว่าถ้าจะต่อกับ PC เพื่อทำอะไรกับ Internal_sd แล้วนั้น ควรจะ Unlink ทั้งหมดเสียก่อนครับ


Thanks:
ขอขอบคุณเว็บ PDAMobiz ด้วยครับ (ปล.นี่ใช้กับรอมพี่ที ERobot v5.1)
ขอบคุณ คุณ tear.man56 ซึ่งเป็นแรงบันดาลใจให้ผมหาวิธีนี้จนเจอ (พอดีว่า Let's golf3 ใช้วิธีแบบกระทู้นี้ไม่ได้ ก็เลยได้วิธีนี้ขึ้นมาแทน)
ขอบคุณอาจารย์กู๋เกิ้ล ด้วยครับ ที่คอยหาคำตอบได้

Download:

Thursday 18 August 2011

Originate Create the Android Creative Team

This is the first date that i decide to create Android Creative Team.
So If you have any idea that want it to be happen in Android Application or whatever please suggest me.

Thanks