Компиляция Android 4.1 Jelly Bean в Ubuntu Linux

/www/pages/modesco/ubuntovod

Внимание! Эта инструкция не позволит вам создать полнофункциональную прошивку сразу, но даст вам возможность начать работать над ней.

Исходники занимают примерно 6Gb. Вам нужно около 25Gb свободного места чтобы скомпилировать 1 билд и до 80Gb (или больше) для полного комплекта сборки.

Перед началом компиляции Jelly Bean на Ubuntu необходимо пройти несколько шагов по настройке компьютера, чтобы получить готовый инструмент.

Инструкция

Вам необходимо следующее:

JDK 6, если вы хотите скомпилировать Jelly bean. Вы можете скачать его с java.sun.com или:

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk

Python 2.4 - 2.7, который можно загрузить из python.org или:

sudo apt-get install python

Git 1.7 или новее. Вы можете найти его в git-scm.com или:

sudo apt-get install git-core

Установите необходимые пакеты. 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

В Ubuntu 12.04 в настоящее время есть только экспериментальная поддержка и не гарантируется работа по другим веткам отличным от master.

sudo apt-get install git-core 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 openjdk-6-jdk 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

Теперь настроим USB:

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

Вставьте это внутрь пустого текстового файла

#Acer SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666" #ASUS SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666" #Dell SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0666" #Foxconn SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0666" #Garmin-Asus SUBSYSTEM=="usb", ATTR{idVendor}=="091E", MODE="0666" #Google SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666" #HTC SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666" #Huawei SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666" #K-Touch SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0666" #KT Tech SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0666" #Kyocera SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0666" #Lenevo SUBSYSTEM=="usb", ATTR{idVendor}=="17EF", MODE="0666" #LG SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666" #Motorola SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666" #NEC SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0666" #Nook SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0666" #Nvidia SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666" #OTGV SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0666" #Pantech SUBSYSTEM=="usb", ATTR{idVendor}=="10A9", MODE="0666" #Philips SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0666" #PMC-Sierra SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0666" #Qualcomm SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666" #SK Telesys SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0666" #Samsung SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666" #Sharp SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0666" #Sony Ericsson SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666" #Toshiba SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0666" #ZTE SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"

Сохраните файл и закройте его, а затем выполните следующую команду:

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

Установите repo:

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

Запустите repo:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r1

Для людей у которых уже есть готовый repo:

cd WORKING_DIRECTORY
repo init -b android-4.1.1_r1
repo sync

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

Соберите файлы:

repo sync

Скомпилируйте:

source build/envsetup.sh

или

. build/envsetup.sh

Запуск:

lunch

Выберите свое устройство.

Теперь выполните команду:

make -j#

Где решётка (#) - это число ядер процессора + 1, например у меня есть 2-ядерный процессор, то я пишу "make -j3".

Как добавить устройство в список

Найдите на GitHub устройства, которые вы хотите добавить (для меня это HTC Evo 3D-CDMA). Теперь перейдите в папку куда вы собираетесь клонировать дерево устройства:

cd WORKING_DIRECTORY/device
mkdir htc

Клонируйте с GitHub дерева устройства с удаленного на локальный (удостоверьтесь, что папка будет называться так же, как стандартное имя для вашего устройства, например: Nexus One [passion], Nexus S [crespo] Motorola Droid [sholes], HTC Incredible [inc] и т.д.):

git clone git://github.com/CyanogenMod/android_device_htc_shooter.git shooter

Теперь перейдите в папку:

cd shooter

Подключите телефон к компьютеру и убедитесь, что отладка для USB включена и adb работает должным образом. Извлеките собственные файлы устройства:

./extract-files.sh

Вернитесь в свой домашний каталог

cd ~/WORKING_DIRECTORY

Подготовьтесь к компиляции:

source build/envsetup.sh

или

. build/envsetup.sh

Получите список ваших устройств:

lunch

Выберите свое устройство, затем компилируйте:

make -j#

Или для создания zip архива для прошивки:

make -j# otapackage

В итоге получаем скомпилированный Jelly Bean под определенное устройство. Теперь можно попробовать запустить его на вашем устройстве, посмотреть что работает, а что нет, затем заняться оптимизацией новой версии Android, сделать свою прошивку на базе AOSP и т.д.

Хоть 8 марта уже давно прошло, радовать свою женщину нужно постоянно, не так ли? К примеру иногда стоит дарить ей шикарные духи. Для этого как раз подойдут Lanvin Marry Me, которым любая девушка будет очень рада. Приобрести их вы можете на сайте духи.рф, цена вас приятно удивит.

Andrew
2012-07-12 04:04:00
о, класс, люблю краткие инструкции!
iROOT
2012-07-15 08:20:00
Напишите источник статью, без этого никак.
Sk8er
2012-07-18 00:23:00
а это что?
duality
2012-07-18 23:36:00
пытаюсь провернуть все это для Motorola Atrix 4g, в этоге при попытке компиляции получаю вот что: E: Для пакета apache не найден кандидат на установку root@duality-VirtualBox:/home/duality/WORKING_DIRECTORY# make -j3 otapackage============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.1.1 TARGET_PRODUCT=generic_olympus TARGET_BUILD_VARIANT=userdebug TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-2.6.38-15-generic-x86_64-with-Ubuntu-11.04-natty HOST_BUILD_TYPE=release BUILD_ID=JRO03C OUT_DIR=out ============================================ find: `../../external/apache-http/src/org/apache/http': Нет такого файла или каталога /bin/bash: строка 0: cd: base/../../libcore: Нет такого файла или каталога find: `dalvik/src/main/java/dalvik/system/': Нет такого файла или каталога /bin/bash: строка 0: cd: base/../../libcore: Нет такого файла или каталога find: `dalvik/src/main/java/dalvik/annotation': Нет такого файла или каталога find: `dalvik/src/main/java/dalvik/bytecode': Нет такого файла или каталога find: `json/src/main/java': Нет такого файла или каталога find: `luni/src/main/java/java': Нет такого файла или каталога find: `luni/src/main/java/javax': Нет такого файла или каталога find: `luni/src/main/java/org/xml/sax': Нет такого файла или каталога find: `luni/src/main/java/org/w3c': Нет такого файла или каталога find: `xml/src/main/java/org/xmlpull/v1': Нет такого файла или каталога find: `frameworks/base/core/java/android': Нет такого файла или каталога find: `frameworks/base/graphics/java/android': Нет такого файла или каталога find: `frameworks/base/location/java/android': Нет такого файла или каталога find: `frameworks/base/media/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/effect/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/filterfw/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/filterpacks/java/android': Нет такого файла или каталога find: `frameworks/base/drm/java/android': Нет такого файла или каталога find: `frameworks/base/opengl/java/android': Нет такого файла или каталога find: `frameworks/base/opengl/java/javax/microedition/khronos': Нет такого файла или каталога find: `frameworks/base/sax/java/android': Нет такого файла или каталога find: `frameworks/base/telephony/java/android': Нет такого файла или каталога find: `frameworks/base/wifi/java/android': Нет такого файла или каталога find: `frameworks/base/keystore/java/android': Нет такого файла или каталога find: `frameworks/base/icu4j/java/android': Нет такого файла или каталога find: `frameworks/base/voip/java/android': Нет такого файла или каталога find: `../../external/apache-http/src/org/apache/http': Нет такого файла или каталога find: `../../frameworks/support/v4': Нет такого файла или каталога find: `../../frameworks/support/v13': Нет такого файла или каталога find: `frameworks/base/core/java/android': Нет такого файла или каталога find: `frameworks/base/graphics/java/android': Нет такого файла или каталога find: `frameworks/base/location/java/android': Нет такого файла или каталога find: `frameworks/base/media/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/effect/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/filterfw/java/android': Нет такого файла или каталога find: `frameworks/base/media/mca/filterpacks/java/android': Нет такого файла или каталога find: `frameworks/base/drm/java/android': Нет такого файла или каталога find: `frameworks/base/opengl/java/android': Нет такого файла или каталога find: `frameworks/base/opengl/java/javax/microedition/khronos': Нет такого файла или каталога find: `frameworks/base/sax/java/android': Нет такого файла или каталога find: `frameworks/base/telephony/java/android': Нет такого файла или каталога find: `frameworks/base/wifi/java/android': Нет такого файла или каталога find: `frameworks/base/keystore/java/android': Нет такого файла или каталога find: `frameworks/base/icu4j/java/android': Нет такого файла или каталога find: `frameworks/base/voip/java/android': Нет такого файла или каталога find: `../../external/apache-http/src/org/apache/http': Нет такого файла или каталога find: `../../external/nist-sip/java': Нет такого файла или каталога find: `../../external/apache-http/src': Нет такого файла или каталога find: `../../external/tagsoup/src': Нет такого файла или каталога find: `../../external/libphonenumber/java/src': Нет такого файла или каталога build/core/java.mk:19: *** base: Target java module does not define any source or resource files. Останов. подскажите пожалуйста, что я делаю не так?
Sk8er
2012-07-22 03:38:00
Ну написано же почти в каждой строчке "Нет такого файла или каталога". Разве тонкий намёк?