С какой стороны подходить к Андроиду
Общая памятка о том, что нужно чтобы собирать Андроид
Если есть вопросы комментируйте по тексту, по ним буду дополнять.
Вступительная фаза
И так, что нам будет нужно чтобы начать собирать Андроид:
- Рабочая станция/сервер с поддержкой 64 битных инструкций, скорее всего x86, другие не проверял.
Виртуальная машина тоже подойдет если хост обладает кучей ресурсов, Андроид стал ужасно прожорливый при сборке.
- Установленный на него линукс опять же 64 бита, последнии версии Андроида собираются только на таких, последний для 32 бит был Фройо ака 2.2.
Сам дистрибутив не важно какой, глявное чтобы был самый свежий если надо собирать свежий Андроид, солидного пользователя и старый не остановит, но будет нужно потратить много времени чтобы прикрутить последние версии джавы, компиляторов и утилит для разработки. Собирать на маке оказалось ужасным гемороем, но если хочется то нужно сделать партицию с поддержкой регистра в hfs ака Case Sensetive, весь софт нужный для мака живет в Xcode и mac-ports.
- После установки докачать все нужные пакеты, обычно это пресеты Linux Kernel Development, Base Development, Java Development и
32-ух битные версии некторых файлов и исходников: gcc-32bit, glibc-devel-32bit, ncurses-devel-32bit, zlib-devel-32bit
- lzop для сборки ядра с компрессией lzo
- optipng или pngcrush, cm использует их для сжатия картинок, апкшки получаются более диетичные
- Поставить оракловский jdk 1.6 вместо openjdk: скачать, скопировать куданить вроде /opt/java натравить на него update-alternatives
update-alternatives --install "/usr/bin/java" "java" "/opt/java/64/jdk1.6.0_33/bin/java" 1 update-alternatives --set java /opt/java/64/jdk1.6.0_33/bin/java
и поправить переменные окружения JAVA_HOME, ANDROID_JAVA_HOME, SDK_HOME и тп. (TODO: поправить как?)
echo 'export JAVA_HOME=/usr/java/jdk1.6.0_32' >> ~/.profile echo 'export ANDROID_JAVA_HOME=/usr/java/jdk1.6.0_32' >> ~/.profile source ~/.profile
Теперь что будет нужно чтобы приступить к делу:
- Скачиваем Android SDK, обычно живет тут http://developer.android.com/sdk/index.html, если тут исчезло, что легко может быть, гуглим по
ключевым словам.
- Запускаем зверя и просим выкачать все, что можно, весит прилично! (~/android-sdk-linux/tools $ ./android update sdk --no-ui ? и разве нам нужны все sdk а не только 4ый или 4.1? все дерьмо между прочим весит 4.5Gb)
- Для использвания Eclipse нужны platform tools и все sdk, если нужен только adb то качаем только platform-tools
- Делаем путь в папку где у него лежит adb, без этого никуда! ( ~/android-sdk-linux/platform-tools )
Теперь качаем исходники последнего Андроида или CyanogenMod#
- Ну тут все понятно тянем тулзу repo с гугла
mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod +x ~/bin/repo
ей выдергиваем манифест
mkdir ~/src/cm9 cd ~/src/cm9 repo init -u git://github.com/CyanogenMod/android.git -b ics
- repo это питонная обертка к git, механизму по управлению версиями, очень удобна для работы с большим кол-вом гит репозитариев в одном проекте, имя и емайл используется для подписи ваших коммитов, если таковы будут, можно впринципе писать там лабуду, потом если надо всегда можно поменять в ~/.gitconfig
и инитим нужный бранч
repo sync
- Если потом понадобится перейти на другой манифест бранч то нужно опять сделать инит и синк, точно правда не уверен там могут быть вопросы, так что
если нужен другой бранч лучше его инитить в отдельной папке.
(Fetching projects: 5% (13/254) error: Exited sync due to fetch errors - и что с этим делать? судя по всему выкинуть нафиг. ) может можно как то проще? http://repository.grepcode.com/java/ext/com/google/android/android/4.0.4_r1.2/ http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r1.2/
Занимает это кучу времени и трафика, т.к. последние версии весят очень много. Если у провайдера полки и теряются пакеты задача становится не выполнимой, питон от этого может зависать, также есть дистрибутивы в которых стоит проблемный питон https://bugzilla.redhat.com/show_bug.cgi?id=787712
- Читаем доку по git и стягиваем последнее ядро и конфиги для сборки Андроида для ac100
- Ставим путь на последний toolchain в папке prebuilt в сорсах Андроида (arm-eabi-), это собственно
компилятор которым будем кросс-компилировать ядро и систему.
- Эти шаги расписаны ниже в фазе сборки
Фаза сборки
Переходим в папку куда слился репо системы.
- Если будем пробовать собирать с помощью openjdk, не для слабонервных, то убираем проверку на версию явы, в core/build/main.mk вроде.
- Сборку с помощью openjdk пока никто толком не поддерживает и не рекомендует, так что пока в топку
- Патчим mesa3d на #include <stddef.h>
- Кладем девайсные конфиги в device/toshiba/paz00
cd ~/src/cm9 mkdir device/toshiba cd /device/toshiba git clone git://github.com/zombah/android_device_toshiba_paz00.git mv android_device_toshiba_betelgeuse paz00
- Кладем сорцы ядра в kernel/toshiba/paz00
cd ~/src/cm9 mkdir -p kernel/toshiba cd kernel/toshiba git clone git://gitorious.org/~zombah/ac100/zombahs-marvin24s-kernel.git
переименовываем папку zombahs-marvin24s-kernel в paz00,
mv zombahs-marvin24s-kernel paz00
затем заходим в нее и переключаемся на branch с андроидным ядром
cd paz00 git checkout origin/linux-tegra-nv-ac100-3.1-exp -b linux-tegra-nv-ac100-3.1-exp
- Кладем вендор секцию
cd ~/src/cm9 mkdir -p vendor/toshiba cd vendor/toshiba
кладем в вендор секцию проприетарные либы
git clone [email protected]:zombah/android_vendor_toshiba_paz00.git mv android_vendor_toshiba_paz00 paz00
- Копируем свежий wext драйвер если он вдруг поменялся
cp -R hardware/broadcom/wlan/bcm4329/wpa_supplicant_8_lib device/toshiba/paz00/
этот шаг похоже будет лишним, так как драйвер надо допиливать под rt2x00
- Заводим свое комбо в общий файл cm9
echo 'add_lunch_combo cm_paz00-userdebug' >> vendor/cm/vendorsetup.sh
- Качаем бинарные запчасти цианогена
cd ~/src/cm9/vendor/cm/ ./getprebuilts
- Подгружаем переменные окружения Андроида,
перейдя предварительно обратно в корень папки с системой
cd ~/src/cm9 source ./build/envsetup.sh
на выходе видим доступные девайсы.
- Выбираем нужный нам девайс
lunch cm_paz00-userdebug
- Теперь запускаем компиляцию
make -j1 showcommands
Через десяток часов (варируется от кол-ва ядер и памяти) будет готово или раньше если будут ошибки сборки. Есть оказывается счастливчики у которых сборка занимает меньше часа
<Espenfjo> Got my new build rig up and running today. 13 minutes with ccache. 70 % of that time is java :/ <Espenfjo> i3770k @ 4.2GHz, 16GBram, one ssd <Espenfjo> 33 minutes without any ccache <stickyboy> Yes, I do ICS in 10-15 minutes on my i7-2600 + 16GB RAM on spinning-disk RAID1.
Результат будет нас ждать в out/target/product/paz00 в виде образов партиций.
- Чтобы собрать zip для заливки через рековери
make -j16 otapackage 2>&1 | tee ~/src/compile-log
- Чтобы почистить уже собранное и собрать опять, после изменения конфигов например:
make clean
или
make clobber
Для удаления готовых имиджей
make installclean
Сборка отдельных частей
Чтобы не собирать всю систему с нуля, можно собирать отдельные части следующей коммандой, например:
mmm frameworks/base
Фаза покоя
Когда сборка закончилась мы должны получить четыре файла с расширением .img в папке out/target/product/paz00 Заливаем их в девайс и запускаем его. boot.img в 6-ую партицию, system.img в 8-ую, userdata.img в 12-ую, recovery.img в 5-ую.