เกริ่นนำ
วิธีต่อไปนี้เป็นเพียงแนวทางในการคอมไพล์เท่านั้น จะสำเร็จหรือไม่ขึ้นอยู่กับหลายปัจจัย เช่น Source vendor/device ของโทรศัพท์ที่มีความเขากันไดดีกับ ICS 4.0 รวมทั้งคอมพิวเตอร์ที่มีสเปคเพียงพอ จึงอยากให้ตรงนี้เป็นที่ปรึกษาหารือเมื่อมีปัญหาและทางแก้ก็เอาแบ่งปันกันครับ

เตรียมเครื่องมือ
ผมใช้ Ubuntu 11.05 UPE (http://www.playoss.com/community_project) (แนะนำ Ubuntu 10.04 64bit)
คอมพิวเตอร์ที่ใช้ : Core2duo 2.5GHz RAM1G ใช้เวลา 5 ชม. 30 นาที (บางครั้งก็หยุดดื้อ ๆ เพราะแรมน้อยเกินไป แนะนำ RAM 1.5 G ขึ้นไป)

สำหรับมือใหม่ Linux/Ubuntu อยากลองคอมไพล์
– Linux/Ubuntu คืออะไร http://playoss.com/node/20
– แนะนำ Ubuntu ที่พร้อมใช้งาน http://www.playoss.com/community_project
– วิธีเขียนแผ่น Ubuntu 10.10 (บนระบบปฏิบัติการ Windows และ Ubuntu) http://playoss.com/node/51
– วิธีติดตั้ง Ubuntu http://playoss.com/node/41

ถ้าพร้อมแล้วมาเริ่มกันเลย

ติดตั้ง Build Packages
1. ติดตั้ง Java 6 jdk (ถ้ามีแล้วก็ข้ามไป)

$ sudo apt-get install sun-java6-jdk

สำหรับ Ubuntu 11.10

$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

2. ติดตั้ง Build package
สำหรับ 32 bit

$ sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown
libxml2-utils

สำหรับ 64 bit

$ sudo apt-get install git-core gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown
libxml2-utils

หากใช้ Ubuntu 11.10 ให้พิมพ์คำสั่งนี้เพิ่ม

$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so

3. ตั้งค่า USB Debug (ถ้าตั้งค่าไว้แล้วก็ข้ามไปข้อ 4)

3.1 โหลด Android SDK

$ wget http://dl.dropbox.com/u/3773430/android-sdk_r15-linux.tgz ~/
$ tar xvfz android-sdk_r15-linux.tgz
$ PATH=~/android-sdk-linux/tools:$PATH

3.2 ตั้งค่า USB Vendor ID

$ sudo gedit /etc/udev/rules.d/51-android.rules

คัดลอกบรรทัดข้างล่างไปวาง แล้วเพิ่ม USB Vendor ID โทรศัพท์ของท่านลงไปตรง xxxx

SUBSYSTEM==”usb”, SYSFS{idVendor}==”xxxx”, MODE=”0666″

USB Vendor IDs http://developer.android.com/guide/developing/device.html#VendorIds
เซฟ/ปิดไฟล์ แล้วพิมพ์

$ sudo chmod a+r /etc/udev/rules.d/51-android.rules
$ sudo restart udev

4. ติดตั้ง repo

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

5. ดาวน์โหลดซอร์สโค๊ด

$ mkdir ~/android4.0
$ cd ~/android4.0
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

ตอนนี้มันจะถามชื่อและอีเมล กรอกลงไปแล้วกดเอนเตอร์
ตามด้วยคำสั่ง

$ repo sync

** ไฟล์จะมีขนาดใหญ่ประมาณ 6 GB ควรมีพื้นที่ /Home ประมาณ 25 GB ขึ้นไป

6. เพิ่ม vendor/device (เพิ่มรุ่นโทรศัพท์ที่ต้องการคอมไพล์)
โทรศัพท์ที่สามารถเพิมลงไปจะต้องมีซอร์สโค๊ด vendor/device สามารถไปหาได้ที่ https://github.com/CyanogenMod/ (หรือค้นจาก Google) มองหาชื่อรุ่นที่มี เช่น ผมใช้ A88 ก็จะได้เป็น android_device_commtiva_z71 หรือใครใช้ Samsung S2 ก็มองหา android_device_samsung_galaxys2 เป็นต้น

เมื่อได้มาแล้วก็ git clone มาไว้ที่ ~/android4.0/device ด้วยคำสั่ง (ตัวอย่างเป็น commtiva/z71 ถ้าใช้รุ่นอื่นก็เปลี่ยนในคำสั่งจาก commtiva/z71 เป็น ยี่ห้อ/รุ่น ที่ท่านใช้)

$ cd ~/android4.0/device
$ git clone git://github.com/CyanogenMod/android_device_commtiva_z71.git commtiva/z71

7. เสียบสาย USB เข้ากับคอมพิวเตอร์พร้อมเปิดโหมด USB Debug ที่โทรศัพท์
(ตัวอย่างเป้น commtiva/z71 ถ้าใช้รุ่นอื่นก้เปลี่ยนในคำสั่ง)

$ cd ~/android4.0/device/commtiva/z71
$ ./extract-files.sh

เป็นการคัดลอก proprietary file จากโทรศัพท์มาไว้ที่ซอร์สโค๊ด

8. คอมไพล์

8.1 สำหรับ ARMv6 (เท่านั้น) ต้องเพิ่ม Board ARMv6 ลงไป เพราะใน Google Source ไม่มีให้

$ curl http://dl.dropbox.com/u/3773430/armv6-vfp.mk > ~/android4.0/build/core/combo/arch/arm/armv6-vfp.mk
$ curl http://dl.dropbox.com/u/3773430/armv6j.mk > ~/android4.0/build/core/combo/arch/arm/armv6j.mk

เป็นการพอร์ตซอร์สจาก CyanogenMod มาใช้ ก่อนทำตามข้อ 8.2

8.2 ลงมือคอมไพล์

$ . build/envsetup.sh


ตามด้วยคำสั่ง

$ lunch

จะมีรายการแสดงขึ้นมา ให้เลือกรุ่นที่ต้องการบิลด์

$ full_z71-eng

หรือพิมพ์หมายเลข

ตามด้วยคำสั่ง make

$ make -j`grep ‘processor’ /proc/cpuinfo | wc -l`

หลังจากนี้หากมีแจ้งข้อผิดพลาดอะไรค่อยเอามาโพสต์แบ่งปันเพื่อหาวิธีแก้ร่วมกัน

ขอขอบคุณ
Google : http://source.android.com/source/downloading.html
CyanogenMod : https://github.com/CyanogenMod/