Các Thành Phần Cần Có
Trước khi xuất Android, bạn cần đọc trước một số yêu cầu như sau:- Hệ điều hành sử dụng là Linux hoặc Mac, trong phạm vi tài liệu này chỉ hướng dẫn đối với Linux, cụ thể là Ubuntu 13.10. Nếu bạn đang chạy trên Linux bạn phải cần có 16GB RAM/SWAP, 30 GB hoặc nhiều hơn để xuất sources
- Để xuất bản Gingerbread (2.3.x) hoặc mới hơn bạn phải có hệđiều hành 64 Bit, các phiên bản thấp hơn bạn chỉ cần hệ điều hành 32 Bit.
- Nếu bạn xuất một sources cơ bản, bạn sẽ cần có một ổ cứng còn trống 30 GB, nếu muốn xuất bản đầy đủ, bạn phải có 100 GB còn trống. Source mà bạn cần download có dung lượng 8.5 GB.
- Máy đã cài Python 2.6 -- 2.7, có thể download tại http://python.org (Xem cài đặt python 2.7.5 trên ubuntu)
- Máy đã cài GNU Make 3.81 -- 3.82, có thể download và cài đặt ở: http://ftp.gnu.org/gnu/make/. Xem hướng dẫn cài đặt GNU Make Trên Ubuntu
- Nếu bạn muốn xuất Android Gingerbread hoặc mới hơn, cần phải có JDK 6, nếu muốn xuất Froyo hoặc phiên bản cũ hơn cần có JDK 5. Xem tại http://java.sun.com/javase/downloads/. Xem hướng dẫn cài đặt JDK 6 trên ubuntu
- Máy đã cài Git 1.7 hoặc mới hơn. Xem hướng dẫn cài đặt git trên Ubuntu.
Chuẩn Bị Môi Trường Để Xuất Source
Trước khi chuẩn bị môi trường bạn cần tìm hiểu sơ qua về cơ chế đánh giá và cập nhật code hiện đang sử dụng: http://source.android.com/source/life-of-a-patch.htmlTiếp đến bạn cần xác định nhánh mà mình sẽ xuất: http://source.android.com/source/build-numbers.html
Bây giờ là công đoạn cài đặt các thành phần cần thiết:
- Các gói bắt buộc:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
- Cấu hình truy cập USB: Tạo file /etc/udev/rules.d/51-android.rules (quyền root mới tạo được) với nội dung:
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
Trong đó <username> thay bằng tên cài khoản đăng nhập.Mẹo: Nếu không biết tạo file như thế nào các bạn có thể tạo file 51-android.rules ở một thư mục khác, sau đó dùng lệnh mv để di chuyển file đó vào thư mục /etc/udev/rules.d/- Cấu hình Ccache (tùy chọn):
Ccache giúp tăng tốc độ khi xuất sources lần thứ hai, rất thích hợp khi bạn thường xuyên "dọn dẹp" hoặc thay đổi các phiên bản Android.
Thêm vào file .bashrc:
export USE_CCACHE=1
Đến đây nhiều bạn sẽ hỏi file .bashrc ở đâu và làm sao mở nó? File .bashrc là file ẩn trong thư mục Home, để mở nó, đơn giản chỉ cần mở Terminal lên và gõ
$ gedit .bashrc
Mặc định ccache sẽ được lưu vào ~/.ccache, bạn có thể thay đổi thư mục lưu ccache bằng cách thêm vào file .bashrc:
export CCACHE_DIR=<path-to-your-cache-directory>
Trong đó <path-to-your-cache-directory> là đường dẫn thư mục chứa ccache- Cấu hình thư mục chứa code xuất ra khác nhau:
Mặc định sources xuất ra được chứa tại thư mục out của thư mục chứa code của bạn, tuy nhiên bạn có thể thay đổi nó bằng cách thêm vào .bashrc:
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
Trong đó <path-to-your-out-directory> là thư mục chứa sources xuất raNhư vậy là bạn đã hoàn tất việc chuẩn bị các thành phần để build sources Android ra, đón đọc bài hướng dẫn tiếp theo về việc tải về sources.