Как собрать прошивку Android из исходников. Компилим Cyanogenmod 7.

Что нам нужно:

  1. Нужен ПК с 64-битной или 32-битной (в отличии от сборки cyanpgenmod 9) Ubuntu (ну или любой другой Linux ОС). 
  2. Нужен высокоскоростной интернет. Для сборки прошивки из исходников — необходимы сами исходники, а это порядка 10 ГБайт информации (и это в сжатом виде, после распаковки 12-14 ГБайт места на ПК). 
  3. Много терпения и самое главное ЖЕЛАНИЕ! Сборка прошивки cyanogenmod 7 если ваше устройство официально поддерживается не вызовет особых проблем, а вот если устройство официально не поддерживает и вы фактически занимаетесь портированием — процесс сборки будет несколько сложнее, в сравнении с cyanogenmod 9. 


Что мы делаем:
1. Логинимся под Ubuntu, открываем терминал и устанавливаем необходимы библиотеки: 
- для 32-bit & 64-bit систем: 
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool 
- только для 64-bit систем: 
sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib 

ВАЖНО! Если у вас Ubuntu 10.10 необходимо также добавить репозиторий для установки java, для этого выполняем в терминале: 
sudo add-apt-repository «deb http://archive.canonical.com/ maverick partner» 
2. Создаем необходимые директории на ПК: 
mkdir -p ~/bin 
 - название не менять (!) 
mkdir -p ~/android/system 
- тут можно создать любую директорию, лично для вашего удобства, например, не system, а cyanogenmod 

3. Устанавливаем репозиторий, для загрузки исходников прошивки: 
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo chmod a+x ~/bin/repo 
ВАЖНО! 1. Для вступления изменений в силу перезагружаем ПК. 
2. Если вы уже ранее собирали прошивки и repo устанавливали — данный шаг можно пропустить. 

4. Загружаем исходники cyanogenmod 7: 
cd ~/android/system/ 
- переходим в ранее созданную папку для исходников 
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread repo sync -j16 
- загружаем исходники 
Набираемся терпения, загрузка исходников дело длительное. Лично у меня при наличии 80 Мбит/с на «внешний мир» загрузка исходников длится порядка 4 часов. 
ВАЖНО! Если во время загрузки произошел обрыв сессии, не расстраиваемся и снова выполняем команду загрузки — загрузка продолжится с места обрыва: 
repo sync -j16 

5. Далее возможны два варианта развития наших действий: 
а) девайс для которого мы собираем прошивку официально поддерживается cyanogenmod-м (в качестве примера будем собирать прошивку для HTC Wildfire); 
б) девайc для которого мы собираем прошивку официально НЕ поддерживается cyanogenmod-м (в качестве примера будем собирать прошивку для Huawei U8100/8110/8120). 


Вариант а.
1) Копируем проприетарные файлы.Дело в том, что хотя мы и собираем прошивку «с нуля», но есть библиотеки, которые нельзя собрать из исходников, по причине того, что поставщик данного «железа» не предоставил их (=)). Для этого подключаем рабочий девайс HTC Wilfire с последней официальной прошивкой «на борту» к ПК при помощи usb-шнура и выполняем в терминале: 
cd ~/android/system/device/htc/buzz/ ./extract-files.sh 
2) Загружаем RomManager.Часть ПО, используемая в прошивках СМ, не собирается из исходников, а загружается в уже собранном виде. Именно таким ПО является RomManager. Для загрузки данного ПО: 
~/android/system/vendor/cyanogen/get-rommanager 
3) Собираем прошивку. Финальный этап.Для этого в терминале выполняем: 
. build/envsetup.sh && brunch buzz 
- вместо buzz используется другое название, в случае сборки прошивки для другого девайса. 

Вариант б.
1) Загружаем «дерево устройства» для нашего девайса. «Дерево устройства» это набор конфигурационных файлов с настройками для определенного девайса. Если девайс официально поддерживается, то данное «дерево устройства» уже есть в ранее загруженных нами исходниках. Если нет, то его необходимо загрузить из стороннего источника. Самый оптимальный вариант, это GitHub — самый большой веб-сервис для хостинга проектов и их совместной разработки. Получить готовое дерево можно двумя путями: 
Скачать готовое дерево с GitHub-а. В данном примере, поскольку мы создаем прошивку для huawei u81хх, то качаем дерево устройства тут. Полученный архив распаковываем в ранее скачанные нами исходники, по пути: ~android/system/device/huawei/u8120 
(папку huawei создаем самостоятельно, в нее распаковываем наше «дерево устройства» и переименовываем в u8120). 

Создать новое дерево самостоятельно. Для этого заходим в ранее скачанных исходниках по пути device/huawei (я выбрал huawei так как собираю прошивку для телефона этого производителя. Если вы портируете прошивку для другого устройства, найдите в папке device наиболее подходящее по железу устройство) и копируем папку, например, u8150 — данный аппарат на текущий момент официально поддерживается. Скопированную папку переименовываем в u8120 (ну, или имя вашего аппарата), и во всех файлах внутри заменяем аккуратно слово u8150 на u8120 (ну, или имя вашего аппарата). Обязательно правим файлы device_u8110.mk и BoardConfig.mk — они фактически являются конфиг-файлами для сборки прошивки. Например, по умолчанию в файле BoardConfig.mk есть строка: BOARD_WLAN_DEVICE := ar6000 - где ar6000 имя модуля Wi-Fi, но значение ar6000 может быть разным для разных устройств. Тут нужно немного подумать и погуглить. После некоторых манипуляций получаем готовое дерево для нашего аппарата. 

2) Копируем проприетарные файлы. О них более детально я рассказывал выше. Подключаем девай Huawei u8120 к ПК при помощи usb-шнура и выполняем в терминале 
cd ~/android/system/device/huawei/u8120/ ./extract-files.sh 
Кроме того, возможен вариант извлечения проприетарных файлов из архива прошивки, а не с рабочего девайса. Это возможно при помощи скрипта unzip-files.sh (если таковой имеется в «дереве файлов»), но об этом подробнее в случае необходимости (=)). 

3) Загружаем готовое ПО для прошивки (RomManager, подробнее в п. а.2). Выполняем в терминале: 
~/android/system/vendor/cyanogen/get-rommanager 

4) Подготавливаем исходники. Поскольку мы занимаемся в этом примере портированием, а версия исходников 7,х не понимает без предварительных манипуляций, что новая папка с деревом устройства и есть портированием, то нам необходимо исходники немного поправить. 
- редактируем файл vendor/cyanogen/vendorsetup.sh добавив в него строку add_lunch_combo cyanogen_u8120-eng - копируем файл, как наиболее подходящий 
cp vendor/cyanogen/products/cyanogen_u8150.mk vendor/cyanogen/products/cyanogen_u8120.mk 
открываем его и во всех случаях заменяем u8150 на u8120. 

- редактируем файл vendor/cyanogen/products/AndroidProducts.mk добавив строку $(LOCAL_DIR)/cyanogen_u8120.mk 

5) Собираем прошивку: Переходим в папку с исходниками и выполняем команды: 
 . build/envsetup.sh breakfast 
появится список устройств и предложение указать наше устройство. Ищем наш девайс и указываем его номер по порядку. После ввода номера нажимаем «Ввод». Выполняем  
brunch u8120 
6. В лучшем случае, сборка прошивки по времени занимает порядка 4-6 часов, в зависимости от ПК. На моем новом ноуте с процессором i5 (4 ядра) и 4-мя гигами оперативки, на сборку прошивки уходит ровно 42 минуты.