Давно мечтали собрать сами своими руками прошивку Android из исходного кода, но ни как получалось из за отсутствия внятного материала? Android +1 подготовил вам подробную интересную статью!
И так перед тем как начать повествовать статью, немного слов для кого она написана: вы уже знаете что такое Linux и установить Ubuntu, Mint, Fedora, OpenSuSe, по крайней мере устанавливали хотя бы один раз из этих ОС, уже знаете что такое командная строка или терминал, команда cd , ls , sh знакома и не вводит в ступор. Отлично, тогда продолжаем изучать статью. Статья Только для устройств Nexus!
Задача научить подготовить систему для компилирования вашей первой Android прошивки, а не научить устанавливать Linux, изучить команды итп.
[stextbox id=»warning»]Не открывайте, не закрывайте, не перемещайте, делайте все как написано в инструкции — последовательно, шаг за шагом, перезагружайте компьютер когда это указано.[/stextbox]
1. Перейдите в параметры системы UBUNTU
2. Раздел «Программы и обновления»
3. Вкладка «Программное обеспечение UBUNTU» установить Загрузить с: Основной сервер
4. Вкладка «Другое ПО», установить галочки на Партнеры Canonical и Партнеры Canonical (исходный код)
5. Нажать внизу кнопку Закрыть и после Обновить
6. Запустить программу «Обновление приложений» и обновить систему и перезагрузить компьютер
7. Запустите терминал (горячими кнопками CTRL+ALT+T)
8. Установите JAVA (объектно-ориентированный язык программирования)
9. Если ранее была установлена другая среда Java, то выполнить также данные дополнительные команды:
10. Установите (на ваше усмотрение, опционально) пакет (до версии Ubuntu 14.10, далее установлен по умолчанию)
11. Перезагрузите компьютер
12. Запустите терминал
13. Установите набор пакетов необходим для создания прошивки
14. Перезагрузите компьютер
15. Запустите терминал
16. Установите пакет еще один пакет
17. Вводим команду для «первого знакомства» с репозиториями Google
18. Ввод команду для внесения папки bin в переменную
после чего откроется текстовый редактор с открытым документом .bashrc, прокручиваем его в самый конец и дописываем с новой строки
19. Идентифицируем будущую сборку, тоесть чтобы в собранной прошивки были указаны данные кто ее собрал
20. Создаем проект в которым в дальнейшем загрузится исходный код Android и драйвера
21. Скачиваем драйвера для своего Nexus в зависимости от вашей версии Android или скачиваем последние доступные версии (нестабильные)
22. Извлекаем из архива файл extracted-xxxxxxx.sh в папку AOSP
23. В терминале пишем
24. Теперь о загрузке исходного кода, вам необходимо указать какой вы хотите собрать Android, то есть версию:
Данная процедура будет длится долго (не менее 3 часов) и будет загружено около 30 GB
25. После того как скачается весь исходный код Android начнем сборку прошивки Android, введите команду:
Перед вами появится окно со списком устройств возможных для создания AOSP прошивки, выбираем цифру и нажимаем ENTER
26. Запускаем сборку Android прошивки
В зависимости от мощности и количества ядер участвующих в процессе сборки прошивки зависит и время сборки прошивки, от 20 минут до 24 суток.
27. После сборки вы обнаружите пакет в папке AOSP/out/target/product/кодовое_имя_nexus/ архив ZIP
28. Переместите данный архив ZIP на устройство NEXUS
29. Установите меню Recovery
30. Перейдите в меню Recovery
31. Установите архив ZIP и после сделайте обязательно wipe
Вот и все! Ничего сложного нет! Статья подошла к концу, подписывайтесь социальные группы и оставайтесь вместе с сайтом Android +1!
Пересборка Android из исходных кодов требуется для многих задач. Это может быть потребность в недостающих модулях ядра Linux, компиляция с более агрессивными опциями оптимизации, создание и отладка собственных модулей, а также различные кастомизации под себя. В этой статье я попытаюсь рассказать об общих принципах сборки Android на примере чистого AOSP (Android Open Source Project), а также его модификации CyanogenMod.
Итак, мы будем собирать Android из исходных кодов. Условно разделим этот занимательный процесс на три шага:
В процессе мы скомпилируем Android для четырех разных устройств, включая официальный Galaxy Nexus, поддерживаемый командой CyanogenMod LG Optimus Black, а также Samsung Galaxy Y и Motorola DEFY, для которых существуют только неофициальные порты CyanogenMod, развиваемые независимыми разработчиками.
Для начала определимся с тем, что нам потребуется для сборки AOSP из исходников. Во-первых, Linux, желательно Ubuntu, и, если хочешь собрать Android версии 2.3.x (Gingerbread) и выше, ОС должна быть 64-разрядной. Замечу также, что по заявлению команды разработчиков, «беспроблемная» сборка сейчас возможна только под Ubuntu версий 10.04–11.10, тогда как на 12.04 соберется только последняя версия Android. Тем не менее я проводил все эксперименты на 12.04 и не встретил каких-либо ошибок или некорректной работы прошивки.
Кроме того, нужно позаботиться о достаточном количестве дискового пространства и оперативной памяти. Исходники Android весят около 14 Гб, плюс в процессе сборки испарится еще где-то 15 Гб. Оперативной памяти потребуется не меньше 2 Гб, да и то вкупе с областью подкачки, размером 3–4 Гб. Если все эти требования удовлетворены, можно приступить к подготовке системы. Для начала установим необходимые пакеты:
Немного слов о JDK: рекомендуется использовать Oracle Java JDK, но, так как он больше не поставляется в репозиториях Ubuntu, его нужно скачать с сайта Oracle и установить самостоятельно (goo.gl/N4IB2). Кроме того, нам понадобится гугловский инструмент для работы с репозиториями repo, представляющий собой Python-обертку вокруг системы контроля версий git:
Теперь система готова, и нам нужны исходники Android.
Перечисленные манипуляции по настройке системы справедливы для сборки любой версии и любой модификации Android. Дальнейшие наши действия уже зависят от наших желаний. Для примера давай начнем со сборки AOSP для Galaxy Nexus. Это типичнейший вариант. Для этого создадим каталог (можешь назвать его как угодно, это непринципиально), в котором собственно и будут лежать исходники:
На этом этапе repo попросит ввести имя и e-mail, что делать совсем не обязательно. По умолчанию repo будет настроен на ветку master указанного репозитория (это последняя версия системы). Если тебе нужны исходники другой версии, укажи ее с помощью ключа ‘-b’. Например:
Чтобы загрузка происходила в несколько потоков, можно указать опцию -j#, где # — число потоков. Сам процесс загрузки довольно длительный (на канале 1 Мб/с загрузка заняла больше трех часов), поэтому можешь спокойно идти заниматься своими делами. В случае если загрузка оборвется, достаточно будет вновь выполнить «repo sync» для ее восстановления с прерванного места. После окончания загрузки на экран будет выведена надпись вида «Syncing work tree: 100% (305/305) done» (см. скриншот 1). Это значит, что уже можно приступать к сборке.
Хакер #168. Спуфинг в воздухе
Сборка
Перед тем как начать процесс компиляции, мы должны выполнить команды скрипта envsetup.sh для установки всех необходимых переменных окружения и функций. Для этого переходим в каталог с исходниками (у меня ~/android/system) и выполняем:
$ . build/envsetup.sh
Только в случае успешного выполнения этого скрипта можно вызывать команду:
$ lunch имя_устройства
Она предназначена для выбора цели сборки или, говоря другими словами, конкретного устройства. Вызвав ее без параметра, устройство можно будет выбрать из списка. В нашем случае нужно указать full_maguro-userdebug, где maguro — кодовое имя Galaxy Nexus GSM/HSPA+. После этого можно запустить процесс компиляции:
$ make -j4
Здесь 4 — число потоков компиляции. Это значение рекомендуется выбирать между максимальным и удвоенным максимальным числом аппаратно поддерживаемых потоков (для процессоров AMD это число равно количеству ядер процессора, для Intel это число нужно умножить на два), с учетом того что на каждый поток уйдет как минимум 2 Гб оперативки, которая, кстати говоря, может закончиться в самый неподходящий момент.
Лично у меня процесс рухнул на сборке библиотеки libwebcore.so из-за нехватки памяти. После увеличения свопа с 2 до 3 Гб результат был тем же. Пришлось собирать этот модуль отдельно и в один поток: make libwebcore -j1, после чего вновь начинать общую сборку. Возможны и другие ошибки, но, как правило, они уже изучены, и решение можно найти в Гугле. При успешной компиляции последняя строка вывода будет содержать путь и размер образа (скриншот 2).
Скриншот 2. Сборка AOSP завершена
На этом сборка AOSP закончена. Но что, если нам нужна прошивка для другого аппарата? Так вот, чистый AOSP ты сможешь собрать только под «гугловские» аппараты плюс Sony Xperia S. Конечно, есть решения и для других девайсов, но для таких устройств лучше и легче всего собрать модификацию AOSP — CyanogenMod.
Установка CyanogenMod через CWM
Установку кастомных прошивок следует выполнять из ClockworkMod Recovery (CWM). Это кастомная консоль восстановления, позволяющая устанавливать прошивки с любыми цифровыми подписями. Мануал о том, как установить CWM на твой конкретный девайс, ищи на xda-dev или просто погугли. Я опишу лишь установку CyanogenMod с его помощью.
Скриншот 5. Главное меню CWM
Для начала выключи телефон и включи его с зажатыми кнопками + + (комбинация может отличаться для разных устройств). После этого ты увидишь меню, показанное на скриншоте 5. Для навигации используй клавиши громкости, для выбора выделенного пункта — клавишу(или ). Для начала выполни сброс до заводских настроек с помощью пункта wipe data / factory reset, а затем смонтируй карту памяти с помощью меню mounts and storage -> mount USB storage и скопируй на нее файл прошивки. Далее выбери пункт «install zip from sdcard» и выбери файл с прошивкой (скриншот 6). Готово! CyanogenMod установлен.
Скриншот 6. Выбор архива для прошивки
CyanogenMod
CyanogenMod (далее CM) — это форк AOSP со множеством модификаций, направленных на улучшение производительности и стабильности, массой дополнительных функций и полезных плюшек, которых нет в стандартной прошивке. Разработка CyanogenMod ведется почти под все самые популярные аппараты (список здесь: www.cyanogenmod.com/devices), а это значит, что каждый может собрать CyanogenMod под конкретное устройство из исходных кодов, которые всегда доступны для скачивания. CyanogenMod пользуется огромной популярностью, поэтому неофициальные порты прошивки можно найти и для множества других аппаратов, помимо официально поддерживаемых.
Существует несколько поддерживаемых версий CM, включая CyanogenMod 7 (на базе Gingerbread, для маломощных бюджетных устройств), CM9 (на базе ICS) и до сих пор разрабатываемая CM10 (на базе JB). Сборка каждой из версий CM происходит одинаково. Для примера мы скомпилируем CM10 для LG Optimus Black, но я постараюсь упомянуть обо всех отличиях и для других версий CM. Стоит заметить, что компиляция CM ничем не отличается от AOSP, поэтому действия по подготовке системы будут теми же, плюс потребуется ADB, который можно скачать отдельно или в комплекте Android SDK. Процесс получения исходников аналогичен, за исключением адреса:
$ mkdir android/cm $ cd android/cm $ repo init -u git://github.com/CyanogenMod/android -b jellybean $ repo sync -j8
Если тебе нужны исходники другой версии, то просто укажи ее имя после ключа ‘-b’: «-b gingerbread» для CM7, «-b ics» для CM9. Ждать придется не меньше, чем при скачивании AOSP, так что можешь спокойно заниматься своими делами. По умолчанию загрузятся только сорцы самого CM без специфических для конкретных устройств файлов, которые можно получить с помощью другой команды:
$ . build/envsetup.sh && breakfast p970
Здесь p970 — кодовое имя LG Optimus Black (как его узнать? Как вариант, можно посмотреть на download.cyanogenmod.com слева в колонке Devices). Кроме исходников устройства, также в большинстве случаев понадобятся проприетарные библиотеки, исходников которых нет (поставщик железа их не предоставил). Поэтому их придется извлечь с устройства. Для этого подключаем к компьютеру наш девайс с помощью USB-кабеля (тут-то нам и нужен ADB), на котором уже должна быть установлена последняя официальная версия CM, и запускаем скрипт extract-files.sh:
$ cd ~/android/cm/device/lge/p970/ $ ./extract-files.sh
Также нам потребуются закрытые приложения RomManager и Terminal Emulator, которые можно получить так:
$ ~/android/cm/vendor/cm/get-prebuilts
А вот теперь все! Можно собирать:
$ . build/envsetup.sh && brunch p970
Здесь brunch — один из хуков, создаваемых envsetup.sh. Пока идет процесс сборки, мы попробуем разобраться, что же такое brunch, а также в других хитрых функциях, используемых в CM.
Агрессивные оптимизации
Чтобы повысить производительность прошивки, ты можешь попробовать применить более агрессивные опции оптимизации компилятора. Для этого вместо «mka bacon» запусти такую команду:
$ CFLAGS='-O3 -fomit-frame-pointer' mka bacon
Но это на твой страх и риск, так как можешь нарушить совместимость сборки с софтом и железом.
Ускорение сборки
Если ты соберешь и AOSP, и CM, то обязательно заметишь, что CM компилируется значительно быстрее. И ты наверняка заметил, что при сборке AOSP использовалась команда make, а тут — brunch. Если разобраться, команда brunch имя_устройства является эквивалентом такой команды:
$ breakfast имя_устройства && mka bacon
Что же тогда такое «mka bacon»? А в этой команде и спрятана вся соль. Это функция, содержащая следующую команду:
schedtool -B -n 1 -e ionice -n 1 make -j `cat /proc/cpuinfo | grep "^processor" | wc -l` "$@"
Она переключает планировщик процессора в режим SCHED_BATCH и повышает приоритет текущей задачи, так что ей отдается больше времени на исполнение, а также устанавливает максимальный приоритет на ввод-вывод для текущей задачи и запускает make, распараллеливая его на все процессоры. За счет этого сборка CM проходит быстрее, но при этом пользоваться компом во время сборки становится нереально.
Если ты планируешь часто пересобирать прошивку, то есть смысл настроить ccache, чтобы ускорить процедуры пересборки. Для этого установи одноименный пакет и добавь в ~/.bashrc такие строки:
export USE_CCACHE=1 export CCACHE_DIR=каталог_для_кэша
И сразу же после загрузки исходного кода выполни:
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G или для ICS и версий постарше: $ prebuilt/linux-x86/ccache/ccache -M 50G
Значение 50G здесь для примера. Ты можешь указать произвольный размер кеша. Теперь вернемся к нашей сборке. В случае ее удачного завершения (скриншот 3) в каталоге ~/android/cm/out/target/product/p960/ будет лежать файл с названием вроде cm-10-XXXXXXXXX-UNOFFICIAL-p970.zip. Это и есть наша прошивка, которую можно установить с помощью консоли восстановления (recovery).
Скриншот 3. Сборка CM завершена
INFO
Существуют автоматизированные системы сборки Android с исходных кодов:goo.gl/i0pvm и goo.gl/yyaLN.
Проприетарные файлы можно также извлечь из архива прошивки, а не с рабочего девайса. Это можно сделать с помощью скрипта unzip-files.sh, если таковой имеется в дереве устройства.
В сборку CM не включены стандартные приложения от Google (gapps). Для их установки скачай отсюда архив и установи через CWM.
Сборка CyanogenMod для кастомного устройства
Не беда, если твоего девайса нет среди официально поддерживаемых. Как я уже говорил, ребята с XDA или 4PDA часто портируют CyanogenMod под свои устройства, поэтому неофициальный порт CM можно найти практически для любого устройства. Все исходные тексты и конфигурационные файлы для девайса носят имя «дерево устройства» (device tree) и должны лежать в каталоге «device/производитель/имя_устройства» исходников CM. Для того чтобы собрать CyanogenMod под свое устройство, ты должен найти в Сети (в большинстве случаев находится на GitHub) дерево устройства и поместить его в соответствующий каталог.
Для примера возьмем Samsung Galaxy Y, для которого нет официального CM. На GitHub пользователя vivekkalady (goo.gl/soi4I) я нашел дерево устройства этого аппарата для CM7. Каковы мои действия? Я должен скачать содержимое репозитория в каталог «device/samsung/totoro» (totoro — кодовое имя Galaxy Y), а затем запустить процесс компиляции. Но где брать проприетарные файлы? Их можно извлекать только с девайса с рабочим официальным CM, что невозможно в нашем случае. Часто эти файлы уже есть в дереве устройства, но я их там не нашел, зато нашел в другом репозитории на GitHub того же vivekkalady (goo.gl/5JvIg). Далее остается скопировать их в каталог «vendor/samsung/totoro», получить RomManager и Terminal Emulator, как показано выше, и начать сборку:
$ . build/envsetup.sh && brunch totoro
Другие авторы портов могут выложить в Сеть все исходники CM вместо отдельного дерева устройства. Например, порт CM10 для Motorola Defy (официально для нее поддерживается только CM9) лежит вместе с исходниками CM10 в GitHub пользователя с ником Quarx с 4pda.ru. Для сборки этого порта делаем следующее:
$ repo init -u git://github.com/Quarx2k/android.git -b jellybean $ repo sync
Проприетарные файлы уже находятся в исходниках, так что искать или извлекать их не требуется. Остается только скачать «несобираемое» ПО и запустить процесс сборки:
$ ~/android/system/vendor/cm/get-prebuilts $ . build/envsetup.sh && brunch mb525
Кстати, по причине залоченного загрузчика кастомные прошивки для DEFY работают на ядре, загружаемом на лету с помощью модуля kexec. Это ядро носит экспериментальный статус, и его придется прошивать отдельно уже после установки самой прошивки (файл 2ndboot_06.10.zip на нашем диске).
Скриншот 4. CM10 на Defy
WWW
Официальная страница проекта AOSP;
wiki-статья о сборке CyanogenMod;
сборка Android под x86;
здесь можно почитать подробнее о дереве устройства:;
подробнее о breakfast, lunch и brunch.
Вместо итогов
Если тебе не удалось собрать Android с первого раза — не нужно расстраиваться. Наберись терпения и продолжай. Свою первую прошивку я собрал через неделю после первой попытки. Я постарался описать основные принципы сборки Android из исходных кодов, но большое количество важной информации все же осталось за кадром. В сносках я оставил несколько ссылок, по которым есть дополнительная информация. На этом у меня все. Удачной сборки!
7 мая 2016
Вступление
Нередко случается, что кому-то из пользователей Android не по душе стандартная прошивка его смартфона либо планшета. Например, по причине лишнего софта, из-за которого стремительно сокращается внутренняя память, либо просто не нравится функционал некоторых программ и хочется заменить их другими. Начинаются усиленные поиски пользовательских прошивок, но и они не всегда дают желаемый результат. Что делать?
Любую прошивку можно доработать под определенного пользователя
Сборка из исходников
Один из самых правильных способов является использование исходного кода, публикуемого командами разработчиков Google или Cyanogenmod. Но одновременно этот способ самый сложный, ведь для того, чтобы собрать прошивку Android из исходников, оптимизировать её и заставить работать на конкретном устройстве, нужно обладать довольно глубокими навыками программирования, разбираться во всех тонкостях работы мобильной операционной системы и железа устройства. Эти знания не приобретаются за день, поэтому в этой статье мы не будем подробно описывать этот способ.
Изменение уже готового файла
Если вы не слишком разбираетесь во всех тонкостях работы ОС, но хотите что-то изменить в своей прошивке, лучшим решением будет подправить уже готовое решение. Можно изменить как родную, встроенную прошивку, так и уже изменённую кем-то другим. Кастомизированных прошивок в интернете очень много, и вы вряд ли будете испытывать недостаток в их количестве. Итак, представляем пошаговую инструкцию по сборке собственной прошивки на основе уже существующего продукта.
Редактирование с помощью компьютера
Необходимое программное обеспечение
Нам понадобится компьютер, устройство, файл прошивки и специальная программа под названием Android Kitchen (известная также как кухня). Файл прошивки можно найти на специализированных форумах, наиболее известные — англоязычный XDA Developers и русскоязычный 4PDA. В разделе вашей модели устройства можно найти ссылки на самые популярные и проверенные прошивки как официальные стоковые, так и неофициальные пользовательские.
Далее нужно установить кухню на свой компьютер. Лучше всего работать под Linux, но необходимые библиотеки можно поставить и в Windows. В этом случае можно выйти из ситуации установив Cygwin. Загрузите архив и следуйте пошаговой инструкции, помещённой в архиве. Перед этим потребуется установить также Java Platform (JDK) с официального сайта (https://www.oracle.com/technetwork/java/javase/downloads/index.html для Windows) или же в Центре приложений Ubuntu найти и скачать OpenJDK Java 6 Runtime либо похожее (для Linux). Второй вариант использования — установить Linux на виртуальную машину и управлять процессом через неё.
Модификация прошивки
Прошивки чаще всего распространяются в виде файла с расширением .img, реже — как ZIP-архив. В обоих случаях вам понадобится переместить файл с прошивкой в папку установленной кухни, чтобы она смогла импортировать её и начать с ней работу. Кухня должна быть установлена по пути c:/cygwin/home/user/ (при установке через Cygwin) или Файловая система/home/user/ (при работе через Linux).
Запустите кухню через Cygwin или Linux-терминал с помощью команды cd kitchen, затем ./menu.
Распакуйте архив в кухню, как уже писалось выше.
После того как появится меню программы, перейдите в раздел 0. Advanced Options.
После этого будет представлен список команд для модификации прошивки. Выберите именно ту, которая нужна вам. Можно добавить Busy Box, Root, Apps2SD, заменить стоковые приложения, различные анимации, освободить память устройства и многое другое.
После окончания манипуляций запустите в главном команду 99. Build ROM from working folder (Построить прошивку с рабочей папки) и заберите ZIP-архив с OUTPUT_ZIP.
Прошивка устройства
Прошить устройство можно как через компьютер, так и без него. В первом случае нужно скачать программу для прошивки, обычно это Flash Tool или Odin, драйверы для вашей модели устройства и подготовить уже подправленный архив.
При прошивке через Recovery понадобится скопировать файл в корень карты памяти, загрузить устройство в режиме Recovery, отформатировать устройство и кэш, а затем установить прошивку из архива. После перезагрузки у вас будет изменённая лично вами прошивка.
Редактирование на устройстве
Самый простой способ из всех возможных. Не нужно никаких дополнительных приборов и манипуляций. Вам понадобится лишь устройство с рут-правами, приложение для создания резервных копий (лучше всего Nandroid backup) и файловый менеджер с функцией изменения системного раздела.
Изменение собственной прошивки
Если на устройстве ещё не получен root, получите его. Как это сделать, можно прочесть на специализированных форумах в разделе, посвящённом именно вашему аппарату. Дело в том, что универсальные способы поддерживаются малым количеством устройств и большинство из них имеют индивидуальную процедуру.
Установите Nandroid backup (https://play.google.com/store/apps/details?id=com.h3r3t1c.onnandbup&hl=ru) и сделайте с его помощью резервную копию системы своего девайса. Сохраните её в надёжном месте, например, в облачном хранилище. Для чего создавать копию? Вдруг что-то пойдёт не так или вы нечаянно удалите что-то нужное — будет возможность вернуть всё как было.
Установите файловый менеджер, работающий с системным разделом, чтобы удалить ненужный софт и добавить свои приложения. Золотым стандартом является Titanium Backup.
Выберите приложения, которые вы хотите удалить, и удалите их через файловый менеджер.
Установите приложения, которыми вы хотите заменить удалённые, и через Titanium Backup сделайте их системными.
Перезагрузите устройство и наслаждайтесь своими успехами.
Изменение сторонней прошивки в ZIP-архиве
Скачайте интересующий вас файл прошивки в формате .zip.
Установите файловый менеджер, умеющий работать с архивами, например, ES Проводник или Total Commander, и распакуйте содержимое архива.
Удалите лишние или добавьте недостающие приложения, после чего запакуйте архив обратно и переместите в корень флеш-карты.
С помощью Nandroid backup (https://play.google.com/store/apps/details?id=com.h3r3t1c.onnandbup&hl=ru) создайте резервную копию системы и скопируйте её на облачный диск.
Прошейте устройство из режима Recovery.
Заключение
Как видите, сборка прошивки Android своими руками необязательно очень длительный и сложный процесс, требующий глубоких познаний. Понятно, что с нуля создать модификацию будет куда сложнее, но что-то подправить или заменить и удалить лишние программы под силу практически каждому. Надеемся, наша инструкция вам в этом помогла.
Собирали ли вы прошивку для Android самостоятельно? Что вы в ней меняли и каким образом это делали? Будет интересно, если вы поделитесь своими отзывами.
Жми «Нравится» и читай лучшие посты на Facebook Существует множество задач, для которых требуется пересборка ядра и операционной системы Android в целом. Например, создание и отладка собственных модулей, включение поддержки профилирования системы и просто тестирование своих приложений на новой версии Android. Возможность запуска Android x86 внутри виртуальной машины VirtualBox позволяет энтузиастам и создателям прошивок покопаться в настройках системы, настроить и пересобрать ядро и при этом не «кирпичизировать» настоящее устройство. VirtualBox предоставляет возможность использования привычных для Linux-разработчика средств отладки ОС. Для рядовых разработчиков Android-приложений отлично подходит эмулятор, использующий технологию Intel Hardware Accelerated Execution Manager. (подробнее можно прочесть здесь) В статье приведен ряд практических советов по сборке образа Android x86 для запуска под виртуальной машиной VirtualBox и сборке эмулятора. Исходный код Android взят из официального репозитория проекта AOSP (Android Open Source Project), в качестве ядра использована адаптированная версия ядра Linux 2.6 от Intel.
Установка окружения для сборки
Для сборки Android потребуется 64 битная версия Linux. Еще один важный момент: обратите внимание на версию GCC, которая установлена на системе. Google поддерживает версию GCC 4.4 и выше. Так же на системе должна быть установлена реализация Java от Oracle. Установка дополнительных зависимостей для Ubuntu 12.04:
sudo -i apt-get update 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
Загрузка дерева исходных кодов
Установка Repo
Repo — утилита управления репозиториями, упрощающая работу с Git для Android. Более подробную информацию можно прочесть здесь (http://source.android.com/source/version-control.html) Для установки, инициализации и настройки Repo выполните следующие шаги: • Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:
mkdir ~/bin PATH=~/bin:$PATH
• Загрузите Repo скрипт и выставите права на выполнение:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo chmod a+x ~/bin/repo
Инициализация Repo клиента
После установки Repo, настройте доступ к репозиториям исходных кодов Android: • Создайте пустую директорию для исходных файлов и перейдите в нее. Например, это может выглядеть так:
mkdir aosp cd aosp
• Запустите скрипт repo init, чтобы обновить версию самого Repo.
repo init -u https://android.googlesource.com/platform/manifest
Эта команда подключит ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6
Для просмотра всех доступных веток введите команду:
git --git-dir .repo/manifests/.git/ branch -a
Нас интересуют наиболее последние версии Android от Google:
Jelly Bean: remotes/origin/android-4.1.1_r6
Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1
Можно выбрать любую на ваш вкус, дальнейшие шаги не будут отличаться. Для демонстрации процесса сборки под VirtualBox возьмем версию Jelly Bean (JB). В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo
Загрузка файлов
Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию выполните команду:
repo sync -j 16
Начальная синхронизация может занять больше часа времени.
Сборка ядра
Android разработан прежде всего для устройств, управляемых жестами и он не поддерживает мышь по умолчанию. Поэтому, в качестве примера, пересоберем ядро из исходников с включенной поддержкой мыши. Создадим директорию для хранения исходников ядра:
mkdir ~/android_kernel cd ~/android_kernel
Воспользуемся заранее подготовленной версией ядра от Intel:
wget http://software.intel.com/sites/landingpage/android/Intel_x86_sysimg_2.3.7_Source_Files.zip unzip Intel_x86_sysimg_2.3.7_Source_Files.zip tar -xvf kernel_sdk_x86.tar.gz
Перейдем в директорию ядра:
cd kernel
Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и пересобрать. Чтобы сократить время на полную настройку ядра, воспользуемся конфигурационным файлом, который подготовили для на разработчики. Важный момент — не забывайте указать архитектуру для которой происходит сборка ядра, в нашем случае это x86.
cp arch/x86/configs/vbox_defconfig .config make ARCH=x86 menuconfig
Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» вы можете передвигаться по пунктам меню, «Enter» чтобы зайти в подменю. Все точно так же как с обычным ядром Linux. Чтобы включить поддержку мыши: • Зайдите в «Device Drivers» • Выберите «Input device Support» • Отметьте «Mice» Вы можете зайти в подменю «Mice» и посмотреть дополнительные настройки драйверов. Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки, когда меню конфигурации предложит это сделать. Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).
make ARCH=x86 –j 32
При успешной компиляции вы увидите сообщение:
Kernel: arch/x86/boot/bzImage is ready
Путь до нового ядра указан в последней строке.
Подмена ядра
Путь к ядру, которое будет использовано в сборке для VirtualBox можно определить следующим образом:
grep "LOCAL_KERNEL :=" ~/aosp/build/target/board/vbox_x86/device.mk
Должно вывестись примерно следующее:
LOCAL_KERNEL := prebuilt/android-x86/kernel/kernel-vbox
Скопируем bzImage по найденному пути:
cp ~/kernel/arch/x86/boot/bzImage ~/aosp/prebuilt/android-x86/kernel/kernel-vbox
Построение Android
Установим окружение для сборки:
cd ~/aosp . ./build/envsetup.sh
Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:
lunch vbox_x86-eng
После выполнения команды вы увидите информацию о предстоящей сборке:
============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.1.1 TARGET_PRODUCT=vbox_x86 TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86 HOST_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-2.6.32-131.0.15.el6.x86_64-x86_64-with-redhat-6.1-Santiago HOST_BUILD_TYPE=release BUILD_ID=JRO03R OUT_DIR=out ============================================
Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.
make –j 16 | tee vbox_build.log
Процесс сборки может занять значительное время, конкретные цифры зависят от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток. При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:
Install system fs image: out/target/product/vbox_x86/system.img out/target/product/vbox_x86/system.img+ total size is 268435456
Далее необходимо собрать загрузочный образ для VirtualBox:
make installer_vdi
Если сборка прошла успешно, в консоли должна появиться запись:
Done with VirtualBox bootable installer image -[ out/target/product/vbox_x86/installer.vdi ]-
Настройка VirtualBox
Теперь приступим к настройке VirtualBox. Необходимо создать новую виртуальную машину, назовем ее “Android_ICS”, выберем Linux в качестве операционной системы, а версию выставим Other, как наиболее подходящую для Android. Следующий шаг – выделение оперативной памяти. Рекомендуется 512 мегабайт и больше. В нашем случае это будет гигабайт. Далее настраивается размер жесткого диска. Главное, чтобы после завершения настройки все жесткие диски VirtualBox были подключены к контроллеру IDE. Установим загрузочный образ Android в качестве второго раздела нашей виртуальной машины. При первом запуске виртуальной машины нам необходимо запустить установку Android. Во время старта нажмите F12, чтобы зайти в меню настроек BIOS. Выберете 2 “Primary Slave”, именно там и содержится установочный образ Android. В случае успешной установки вы увидите «Done processing installer config». Иногда при первой установке могут возникнуть ошибки, просто запустите ее еще раз. Затем перезагрузите виртуальную машину в свой только что установленный Android!
Эмулятор Jelly Bean
Сборка эмулятора мало чем отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Для чистоты эксперимента, будет процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.
mkdir ~/jb cd ~/jb
Инициализация репозитория
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6
Загрузка исходных кодов
repo sync -j 16
Инициализация окружения
. ./build/envsetup.sh
Выбор сборки эмулятора
lunch full_x86-eng
В случае успеха вы увидите:
============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=4.1.1 TARGET_PRODUCT=full_x86 TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=x86 TARGET_ARCH_VARIANT=x86-atom HOST_ARCH=x86 HOST_OS=linux HOST_OS_EXTRA=Linux-2.6.32-131.0.15.el6.x86_64-x86_64-with-redhat-6.1-Santiago HOST_BUILD_TYPE=release BUILD_ID=JRO03L OUT_DIR=out ============================================
Запускаем сборку:
make –j 16 | tee emulator_build.log
Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.
cd kernel cp arch/x86/configs/goldfish_defconfig .config make ARCH=x86 -j16
Теперь сборка эмулятора завершена. Самый простой способ запустить его:
emulator
Например, можно запустить с только что собранным ядром, с разрешением 480×800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.
emulator -kernel ~/kernel/arch/x86/boot/bzImage -skin WVGA800 -memory 512 -gpu on
Более подробно о возможностях и настройках эмулятора можно прочитать здесь
Заключение
В данной статье рассмотрен способ установки Android x86 версии Jelly Bean для VirtualBox, сборка кастомизированного ядра и эмулятора. Существует множество разных трюков и подходов к постройке и настройке различных версий Android, которые остались за пределами данной статьи. Здесь был изложен базовый материал для того, чтобы начать свой путь в мир OS Android.
Инструкция по сборке Android из исходников
Представляю вам небольшой ремейк статьи (инструкции, мануала), которую я в свое время опубликовал на 4PDA. Многим статья понравилась и мне это очень приятно! Однако как и в любой другой статье, в ней имелись некоторые неточности и, в общем, было что добавить (учитывая просьбы и вопросы форумчан 4PDA). Сразу оговоримся, я не буду рассказывать как собрать андроид 5.x и выше, для себя я остановился на 4.4 (если интересно почему я так не люблю все что выше KitKat — пишите в личку, растолкую). Объяснять буду также на примере 4.1 и надеюсь, что многие в последствии поймут, что цифры не имеют значения, т.к. для любой версии Android процесс похож на 90%.
И еще, не поленитесь изучить самые базовые основы ОС Linux и основные терминальные команды (для тех кто в «Виндоус», командная строка).
Инструкция будет разделена на этапы, с простым, понятным для новичков объяснением. Все буду объяснять на примере сборки андроида для одного из своих девайсов, китайского телефона — Newman N2, а именно сборку CyanogenMod 10 с нуля, т.е. не имея никаких исходников от производителя. Будут присутствовать элементы портирования, также поделюсь некоторыми «ухищрениями», которые мне лично помогают. Постараюсь ответить на многие вопросы начинающих ромоделов, таких как: «Как начать?», «Что установить?», «Где взять?». И так, приступим!
Почему? * Работать будет быстрее. * Не будет ошибок при компиляции. Дело в том, что работая в среде виртуализации, ваше железо эмулируется виртуальным и компилятор может попросту не найти инструкций для работы с таким «виртуальным железом». * Используя ВМ вы губите потенциал своего ПК, ведь если он у вас мощный — воспользуйтесь этим! следствие -> пункт №1. * Опять же, в продолжении предыдущего пункта, при компиляции необходимо много свободной оперативной памяти, поэтому использование ВМ накладно. Так что, ставьте линукс второй осью!
Можно компилировать в линуксе, можно в MAC OS. Я останавлюсь на линуксе, т.к. с маком дела не имел. Собственно какой дистрибутив выбрать? Вопрос актуальный, особенно если вы новичок в линуксе или же только что пересели с Windows. Мой ответ на этот вопрос — не парьтесь! Выбирайте Ubuntu, а лучше такие дистрибутивы основанные на Ubuntu как Linux Mint или Elementary OS . На момент написания статьи (последней редакции), лично я использовал Linux Mint 17.1. Также была протестирована Elementary OS Freya.
Используемые источники:
https://androidp1.ru/sozdanie-android-proshivki-iz-ishodnogo-koda-aosp/
https://xakep.ru/2013/11/16/android-build-from-source-principles/
https://protabletpc.ru/advice/kak-sobrat-proshivku-android.html
https://habr.com/post/153521/
https://scorpio92.ru/index.php/articles/1-instruktsiya-po-sborke-android-iz-iskhodnikov