С какой стороны подходить к Андроиду

Материал из Toshiba AC100 wiki
Версия от 10:35, 25 сентября 2015; Stuw (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Общая памятка о том, что нужно чтобы собирать Андроид


Если есть вопросы комментируйте по тексту, по ним буду дополнять.

Вступительная фаза

И так, что нам будет нужно чтобы начать собирать Андроид:

  • Рабочая станция/сервер с поддержкой 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-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-ую.

Eclipse


1337640274