เชื่อว่าหลายๆ คนในที่นี้ได้ลองเล่นรอมตัวโน้นตัวนี้กันมาจนรู้สึกว่าได้ใช้งานเจ้า A99 ของเราจนคุ้มแล้ว แต่.. ยังครับ ยังคุ้มได้อีก

กระทู้นี้ผมจะหัดลองทำรอมของตัวเองขึ้นมาโดยใช้ทูลที่เรียกว่า Kitchen อันโด่งดังใน XDA ถูกสร้างขึ้นมาโดย dsixda ซึ่งรองรับอุปกรณ์ของพวกเราโดยฝีมือของ Napstar

All credits go to:
1. @dsixda (https://twitter.com/#!/dsixda) for all effort to create this Kitchen and Q&A support.
2. Napstar for making the kitchen available to our devices and some simple instructions which help me feel easier to study

The latest version
The latest version is 0.193. The changelog for this version is here: https://twitter.com/#!/dsixda/status/198826467809951745

เพจหลักของ Kitchen: http://forum.xda-developers.com/showthread.php?p=5626292
Guide by Napstar: http://forum.xda-developers.com/showthread.php?t=1299765

http://image.ohozaa.com/view2/w31BXbdSoFzMagBW
http://image.ohozaa.com/view2/w31BYf9Vfn3G2MEw

ทำไมถึงเรียกว่า Kitchen

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

ดังนั้น ถ้าการปรุงรอมเปรียบเสมือนการทำอาหาร ROM Kitchen ก็เปรียบเสมือนห้องครัวที่มีอุปกรณ์ทุกอย่างพร้อมสำหรับให้เราทำอาหารแล้ว

Kitchen นี้เหมาะกับ?

1. ผู้ที่สนใจอยากลองสร้าง ROM ด้วยตัวเอง แต่ไม่รู้ว่าจะเริ่มอย่างไร

2. ผู้ที่มีความอยากเรียนรู้ที่สูงระดับหนึ่ง รู้จักค้นคว้าหาข้อมูลด้วยตนเอง (อ่านคำแนะนำของคุณ rolovely)

3. ผู้มีพื้นฐาน Linux บ้าง (ใครที่อยู่ทันสมัยรูทเครื่องด้วย Ubuntu ก็สบายเลย)

หมายเหตุไว้ว่าทูลนี้ไม่ได้ใช้สำหรับพอร์ตรอมแบบฮาร์ดคอร์แบบที่ tj_style หรือ edowa ทำอยู่นะครับ การพอร์ตรอมแบบนั้นหลีกเลี่ยงการ compile from source ไม่ได้ และต้องมีความรู้เรื่อง Android กับ Linux ในระดับเซียน คือต้องเคยลองแกะโค้ด AOSP, CyanogenMod หรือ MIUI อะไรประมาณนั้น แต่อย่างน้อยทูลนี้น่าจะช่วยให้เราได้รู้จักศัพท์เทคนิคบางตัวอย่าง zipalign, deodex, ฯลฯ ซึ่งเป็นพื้นฐานที่จะพาเราไปถึงระดับนั้นได้

ข้อจำกัดของ Kitchen

1. ใช้ได้กับ Stock ROM เป็นส่วนใหญ่ ผมลองรอมศูนย์กับรอมชาร์ปพบว่าใช้การได้ดี ดังนั้นรอม Cherry, CSL, ฯลฯ ก็ควรจะใช้งานได้เช่นกัน อาจจะรวมถึง RC3 ด้วย แต่ไม่ซัพพอร์ต Custom ROM อย่าง CM/MIUI เพราะ File location incompatibility แต่ถ้าใครที่สามารถเข้าไปแกะและปรับปรุงการทำงานของ Kitchen ได้ก็ทางสว่างครับ

2. บางเมนูไม่ซัพพอร์ตกับอุปกรณ์ของเรา เท่าที่ผมเจอมีแค่เมนูเดียวที่ใช้ไม่ได้ คือ Disable Boot Screen Sound

3. ตัวแกนของ Kitchen หยุดพัฒนาไปแล้วด้วยปัญหาบางประการ (เข้าไปดูได้ในเพจหลัก) อย่างไรก็ตามปลั๊กอินสำหรับ Kitchen ยังมีคนทำอยู่เรื่อยๆ

สิ่งที่ต้องเตรียม

1. แน่นอน พระเอกของงานนี้ นั่นคือ Kitchen (http://forum.xda-developers.com/showthread.php?p=5626292)

2. สคริปต์ Huawei Ideos X6 related files.zip (http://forum.xda-developers.com/showthread.php?t=1299765) ของ Napstar ที่ทำขึ้นมาเพื่อให้ Kitchen ซัพพอร์ตมือถือของเรา

3. ทูลสำหรับแกะไฟล์ .nb0 ชื่อ nb0-util.jar (http://forum.xda-developers.com/attachment.php?attachmentid=747488&d=1318412449) เนื่องจาก Stock ROM ของอุปกรณ์เราอยู่ในรูปแบบ .nb0 ทั้งนั้น

4. Java Runtime Environment (JRE) เวอร์ชัน 5 ขึ้นไป สำหรับใช้งาน nb0-utils.jar เช็คเวอร์ชันของ JRE ได้ด้วยการพิมพ์คำสั่ง java -version ใน terminal ในเคสของ Ubuntu สามารถติดตั้งผ่าน Software Center ได้ (ผมใช้ openjdk 7)

5. รอมต้นฉบับที่จะนำมาโม ในที่นี้ผมขอใช้รอมศูนย์ของ WellcoM (http://www.mediafire.com/download.php?nje9ukmsatz12z1) และไม่แนะนำ CM กับ MIUI เนื่องจากเหตุผลข้างต้น

6. Linux ดิสโตรใดก็ได้ หรือ Cygwin ในกรณีนี้ผมจะใช้ Ubuntu 12.04 LTS บน VirtualBox 4.1.14 ไม่แนะนำให้ใช้แบบ LiveCD ควรจะ install ลงบนเครื่องหรือลงบน Virtual Machine ไปเลย

7. โปรแกรมแกะไฟล์ rar กับ 7z (http://ubuntuclub.com/node/1732) เนื่องจากรอมต้นฉบับมักจะถูกบีบเป็น rar หรือ 7z เพื่อความเล็กของไฟล์ ดาวน์โหลดได้เร็ว

ผลผลิตที่จะได้จาก Kitchen

จะได้ไฟล์รอมที่สามารถแฟลชผ่าน CWM ได้

Requirement
ก่อนที่จะเริ่มลงมือ เราควรจะมีจุดประสงค์ในการทำรอมก่อนว่าอยากได้รอมแบบไหน ผมตั้ง requirement ให้กับตัวเองดังนี้

1. รอมศูนย์ WellcoM A99 ที่รูทเรียบร้อยแล้ว

2. เอาแอพบางตัวที่ไม่อยากได้ออก

3. เพิ่มแอพบางตัวที่อยากให้มากับรอม

4. เปลี่ยนไปใช้ boot animation ที่เตรียมไม่ ไม่ชอบ boot animation ที่มีคำว่า Welcome ของรอมศูนย์

5. ไม่อยากให้มีโฆษณามารบกวนเวลาเล่นเกมจำพวก Angry Birds หรือขณะใช้แอพฟรีทั้งหลาย

เริ่มลงมือ

1. ติดตั้ง Kitchen ได้โดยการ extract zip ตามปกติแบบที่พวกเราทำกันประจำ วางไว้ที่ไหนสักที่บนไดรฟ์ของเรา ผมวางไว้ที่ ~/Android/dsixda
http://image.ohozaa.com/view2/w39OPjffxIC4oZ7q

2. เปิด terminal (บน Ubuntu 12.04 กด alt แล้วพิมพ์ terminal มันจะ suggest มาให้) แกะไฟล์รอมของเราซึ่งเป็น .nb0 ด้วยคำสั่ง
java -jar nb0-utils.jar unpack .nb0

3.ก๊อปไฟล์สองไฟล์ที่อยู่ในสี่เหลี่ยมเหลืองๆ ไปไว้ในโฟลเดอร์ชื่อ original_update ซึ่งอยู่ในที่ ~/Android/dsixda/original_update พร้อมทั้ง rename ไฟล์ทั้งสองเป็น boot.img และ system.img ตามลำดับ
http://image.ohozaa.com/view2/w31C013kFyo3pGgg

4. cd เข้าไปที่ ~/Android/dsixda และเปิด Kitchen ด้วยพิมพ์คำสั่ง ./menu

5. เข้าไปสร้าง workspace ในเมนู Setup working copy from ROM ก่อนเลยครับ พอสร้างเสร็จก็เข้าไปดูชื่อ device ที่เมนู Show working folder information ในที่นี้ผมได้ชื่อ device ว่า HD710 ซึ่งก็คือค่าของ ro.product.device ใน build.prop นั่นเอง
http://image.ohozaa.com/view2/w31BYX7hOysglLgc

6. แตกไฟล์ Huawei Ideos X6 related files.zip จะได้สองไฟล์คือ

    6.1 IdeosX6_permissions_correction.plugin ก๊อปไฟล์นี้ไปวางไว้ที่ scripts/plugins

    6.2 mi410 ให้เปลี่ยนชื่อตามชื่อ device ที่เราได้จากข้อ 5 นั่นก็คือ HD710 แล้วก็อปไปวางไว้ที่ tools/edify_defs

7. เนื่องจากผมอยากจะเพิ่ม ads blocker ซึ่งไม่ได้ซัพพอร์ตโดย Kitchen ตั้งแต่แรก แต่โชคดีว่ามีคนทำปลั๊กอินไว้ ดังนั้นไปดาวน์โหลดปลั๊กอิน Mr.X-UpdateHosts-V.3-Sprint-Ready-Plugin.zip จาก http://forum.xda-developers.com/showpost.php?p=11432959&postcount=3494 แล้วก็แตกไฟล์สองไฟล์แล้วไปวางที่ scripts/plugins

8. ทีนี้ก็เริ่มมันส์ได้แล้วครับ ตาม requirement ของตัวเอง ผมจะ…

    8.1 Add root permissions

    8.2 Add BusyBox

    8.3 Disable boot screen sounds

    8.4 Change name of ROM ทิ้งชื่อตัวเองไว้กับรอมสักหน่อย หุหุ

    8.5 Add data/app functionality เพื่อที่จะใส่แอพที่เราอยากให้ติดไปกับรอม (แอพที่เพิ่มเข้าไปสามารถ uninstall ได้ง่ายๆ ซึ่งต่างจากการเพิ่มแอพโดยก๊อป apk ไปไว้ใน /system/app ซึ่งเป็น system app ที่ต้องใช้แอพอย่าง root uninstaller หรือ Titanium Backup ในการ uninstall) มันจะสร้างโฟลเดอร์ไว้ที่ /data/app ให้เราก๊อป apk ไปไว้ในนั้น

    8.6 Add custom boot animation functionality มันจะสร้างโฟลเดอร์ /data/local จากนั้นก็ก๊อป bootanimation.zip ที่เราเตรียมไว้ไปวางที่นั่น

    8.7 เข้าเมนู Miscellaneous options / Plugin scripts แล้วเรียกสคริปต์ UpdateHosts เพื่อใส่ ad blocker
http://image.ohozaa.com/view2/w39OM7r6Zr7TDEAg

    8.8 จากเมนูเดิม คือ Miscellaneous options / Plugin scripts เรียกสคริปต์ IdeosX6_permissions_correction.plugin (จำเป็น)

    8.9 Build ROM from working folder พยายามใช้ค่า default ที่ Kitchen แนะนำไว้ให้ก็พอครับ พอเสร็จกระบวนการบิลด์ จะได้ไฟล์ซิปใหม่อยู่ใน ZIP_OUTPUT อันนี้แหละครับที่เราจะเอาไปแฟลชผ่าน CWM
         ลองดูตัวอย่างที่ผมทำออกมาได้ที่ http://www.mediafire.com/download.php?ya6kxtshy8uq3b4)

    8.10 ก่อนแฟลช เช็คสคริปต์ดูก่อนว่าถูกรึเปล่า แกะไฟล์ META-INF/com/google/android/updater-script ออกมาจากซิป เช็คว่ามีบรรทัดนี้รึเปล่า format("ext3", "EMMC", "/dev/block/mmcblk0p7");           ถ้าไม่มี ย้อนกลับไปเช็คที่สเต็ปที่ 6 และรันสคริปต์ที่ 8.8 อีกรอบ (สำคัญมาก!!! ถ้าเผลอแฟลชโดยไม่มีคำสั่งนี้ มีสิทธิได้หิ้วเครื่องเข้าศูนย์)
http://image.ohozaa.com/view2/w39ONTkwpkerOSOI

    8.11 ก๊อปรอมลง SD card แล้วแฟลชผ่าน CWM ได้เลย อย่าลืม Nandroid backup -> wipe data/factory reset -> wipe dalvik cache ด้วยนะครับ

หมายเหตุ

1. สำหรับรอม Sharp หรือ RC3 สังเกตว่าจะได้ไฟล์ xxxxsystem.img.ext4 แทนที่จะเป็น xxxxsystem.img.ext3 ไม่ต้องไปสนใจครับ ให้ rename เป็น system.img ก็พอ Kitchen ยังทำงานได้

2. รอม Sharp ที่เราโมได้ ต้องลงหลังจากลงรอมที่เป็นเคอร์เนล .35 ซึ่งก็คือต้องลงชาร์ปหรือ RC3 ผ่าน SUT LR ก่อนนะครับ (อาจจะฟังดูตลกที่ต้องลงชาร์ปออริจินอลก่อนที่จะลงชาร์จฉบับโม แต่จงคิดไว้ว่าเพื่อการเรียนรู้ ;)) ในทางกลับกัน รอมที่โมได้จากขั้นตอนข้างบนก็ไม่สามารถลงต่อจากชาร์ปหรือ RC3 ได้เช่นกัน

สุดท้ายนี้ ถ้าติดปัญหาอะไร แนะนำให้ลอง ctrl+f เสิร์ชหาจากเพจหลักของ Kitchen หรือถ้าหาไม่เจอจริงๆ (มันยาวมาก พอเข้าใจ) ลองโพสต์ถามในนี้ได้ครับเผื่อจะช่วยหาให้ได้

ขอให้สนุกกับการโมรอมครับ 🙂

ปล. เป็นกระทู้ที่เหนื่อยที่สุดเท่าที่เคยตั้งมา แฮ่กๆๆ