Нельзя желать того, что до этого не было познано (Фома Аквинский).

Как построить Android диски на Ubuntu 16.04

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Статья опубликована: 15 февраля 2018

Как построить Android диски на Ubuntu 16.04
Android является самой популярной операционной системой в мире. Сотни различных производителей оригинального оборудования или OEM – производителей, выбирают для установки его на своих устройствах потому что это бесплатно, с открытым исходным кодом, и имеет большую экосистему приложений и сервисов построенных вокруг него. К сожалению, многие производители не производят регулярно обновления (OTA) для Android. А другие производители обеспечивают только обновление в течение ограниченного периода времени после запуска для устройства. Кроме того, производители как правило, настраивают Android экстенсивно,  чтобы убедиться, что их устройства имеют уникальный внешний вид. Их настройки включают альтернативные пусковые установки, тематические пользовательские интерфейсы, системы и предварительно установленные приложения.

Если вы хотите удалить все настройки, или если вы хотите запустить последнюю версию чистой Android на вашем устройстве, вы можете создать новую прошивку для него самостоятельно. В моддинг сообщества Android, такие прошивки обычно называют ROM, сокращенно Read Only Memory.

В этой статье мы будем строить ROM Android Oreo, на основе Open Source Project Android или AOSP для краткости. Чтобы сохранить эту статью аппаратно-независимой и общей, мы будем целиться только на эмулятор AOSP, но вы можете применить те же методы для реальных устройств.

Предпосылки

Для того, чтобы быть выполнить все пункты, вам необходимо:

  • Один сервер Ubuntu 16.04 x64 с по крайней мере 16 Гб оперативной памяти, 4 центральных процессоров и 120 Гб дискового пространства установки, следуя руководство по начальной настройки сервера Ubuntu 16.04, включая некорневого sudo пользователя и брандмауэр. Процесс компиляции требует много оперативной памяти, и большое количество процессоров ускорят время компиляции. Кроме того, файлы, которые вы будете скачивать довольно велики.
  • Установленный Git.

Шаг 1 – Начало сеанса экрана

Некоторые из команд которые вы выполняете в этом руководстве потенциально могут работать в течение нескольких часов. Если соединение SSH между компьютером и сервером прерывается в то время как команды работают, они будут прекращены внезапно. Чтобы избежать такой ситуации, используйте утилиту screen, которая позволяет запускать несколько сеансов консоли в одном терминале. С screen, вы можете отключить от запущенной сессии и прикрепиться к нему позже.

Начать новую сессию screen.

 

При запуске экрана в первый раз, вам будут представлено лицензионное соглашение. Нажмите Enter чтобы принять лицензию.

С этого момента, когда вы не в состоянии подключиться к SSH, ваши длинные выполняющихся команды будут продолжать работать в фоновом режиме. После того, как вы повторно установите соединение по SSH, вы сможете возобновить сеанс, запустив screen -r.

Далее, давайте установим компоненты, нам нужно компилировать Android.

Шаг 2 – Установка зависимостей

Исходный код AOSP распространяется через несколько различных Git репозиториев. Для того, чтобы сделать его более удобным для пользователей, загрузите все эти репозитории, сообщество AOSP создало инструмент командной строки под названием repo.

Мы скачаем последнюю версию программы с использованием wget и сохраним его в каталоге ~/bin. Во- первых, надо создать каталог ~/bin:

 

Затем скачайте скрипт repo:

 

Примечание:
Если вы беспокоитесь о безопасности выполнения сценария на вашем компьютере который вы загрузили с другого сайта, проверьте содержимое скрипта:
 

После того, как вы проверили содержимое скрипта, продолжите это руководство.

Используйте chmod чтобы предоставьте разрешение для текущего пользователя на запуск repo.

 

Инструмент repo использует Git и требует чтобы вы создали конфигурацию Git, указав свое имя пользователя и адрес электронной почты. Выполните следующие команды чтобы сделать это:

 

Исходный код Android, в основном состоит из Java, C ++ и XML – файлов. Для компиляции исходного кода, вам необходимо установить OpenJDK 8, GNU C и компилятор C ++, библиотеку XML parsing, ImageMagick, а также несколько других связанных пакетов. К счастью, вы можете установить все из них с помощью apt. Перед тем, как сделать это, убедитесь что вы обновили список пакетов вашего сервера.

 

После обновления списков, установите зависимости:

 

После загрузки зависимостей, мы можем использовать сценарий repo, чтобы получить исходники Android.

Шаг 3 – Загрузка исходного кода

Мы будем использовать скрипт repo для выполнения нескольких задач, надо подготовить наше рабочее пространство. Создайте новый каталог для хранения источников Android, которые вы собираетесь загрузить:

 

Вы будете работать в этом каталоге на всей остальной части данного руководства, поэтому перейти на него сейчас:

 

Каталог должен быть инициализирован с манифеста хранилища AOSP, это специальное хранилище Git содержащий файл XML с именем default.xml, который определяет пути всех других Git репозиториев которые вместе образуют код AOSP.

Работа с полным кодом дерева AOSP может получиться громоздким. Таким образом, необходимо дополнительно указать имя конкретного пересмотра или отрасли, в которой вы заинтересованы. В этой статье мы строим ПЗУ Oreo, мы будем использовать android-8.0.0_r33, чья сборка имеет идентификатор OPD1.170816.025. Вы можете получить список всех доступных идентификаторов сборки и названий филиалов из AOSP официальной странице https://source.android.com/setup/build-numbers.

Кроме того, вы не будете нуждаться во всей истории кода дерева коммитов для этой статьи. Вы можете сэкономить время и пространство для хранения части истории с глубиной 1.

Соответственно, используйте команду repo init чтобы инициализировать каталог и указать следующие параметры:

 

Когда будет предложено включить цветной дисплей, нажмите Y а затем Enter .

И, наконец, загрузите фактические файлы AOSP из различных хранилищ, выполнив команду repo sync:

 

Приведенная выше команда загрузит более 30 ГБ данных. Как только это произойдет, мы создадим кэш для ускорения компиляции.

Шаг 4 – Подготовка кэша компиляции

Для ускорения сборок, вы можете использовать кэш компилятора. Как подсказывает само название, кэш компилятора позволяет избежать перекомпиляции части ПЗУ, которые уже были получены.

Чтобы включить использование кэш компилятора, установим переменную окружения с именем USE_CCACHE.

 

Если у вас есть много свободного места на диске, и вы не хотели бы чтобы кэш рос слишком большой, вы можете ограничить его размер. если вы строите ROM для одного устройства, вы можете ограничить его до 15 Гб. Для этого используйте команду ccache.

 

Вы увидите вывод, который подтверждает, вы сделали это изменение:

Вывод
 

Есть еще одна оптимизация, которую нам нужно сделать, прежде чем мы можем собрать. Давайте сделаем это в следующем пункте.

Шаг 5 – Настройка Jack

Сервер Jack, который отвечает за создание большинства Java на основе участков ПЗУ, требует много памяти. Чтобы избежать ошибок распределения памяти, вы можете использовать переменную окружения с именем ANDROID_JACK_VM_ARGS, чтобы указать сколько памяти Jack разрешено использовать. Обычно, выделяют около 50% оперативной памяти вашего сервера. Эта переменная окружения также определяет другие параметры компиляции.

Выполните следующую команду, чтобы выделить 8 ГБ оперативной памяти на сервер Jack и сохраните параметры компиляции по умолчанию:

 

Теперь вы готовы построить свой Android ROM.

Шаг 6 – Запуск сборки

Код дерево AOSP содержит скрипт с именем envsetup.sh, который имеет несколько сборок связанных вспомогательными функциями. В то время как многие из вспомогательных функций, таких как mm, mma и mmm служат в качестве ярлыков для команды make, другие такие как набор lunch имеет важные переменные окружения, которые, помимо всего прочего, решают архитектуру процессора в ПЗУ, и тип построения.

Сценарий Source получит доступ к вспомогательным функциям.

 

Вывод
 

Затем запустите lunch и передайте кодовое название вашего устройства к нему, с суффиксом типа сборки, который может быть либо eng, userdebug либо user. В то время как типы сборки eng и userdebug приводят к ROM, которые лучше всего подходят для целей тестирования, пользовательский тип сборки рекомендуется для использования в производстве.

Чтобы создать тестовый диск который может работать на эмуляторе AOSP ARM, передайте aosp_arm-engв команде lunch:

 

Вы увидите этот вывод, показывающий параметры среды:

Вывод
 

И, наконец, запустите make чтобы начать построение. make поддерживает параллельные рабочие места, так что вы можете значительно ускорить сборку, используя -j возможность установить количество параллельных заданий равного количеству процессоров доступных на сервере.

Используйте команду nproc чтобы увидеть сколько процессоров у вас есть:

 

Команда возвращает число процессоров:

Вывод
 

Вы можете использовать этот номер с make, чтобы указать параллельное выполнение:

 

Даже с 8 процессоров, вам придется ждать больше часа сборки для завершения, при условии что не существует других процессов CPU-интенсивных активных на сервере. Продолжительность сборки прямо пропорциональна количеству оперативной памяти и количество процессоров, которые у вас есть.

Примечание:
Вы увидите множество предупреждающих сообщений генерируемых в процессе сборки. Вы можете спокойно игнорировать их.

После того, как диск будет готов, вы должны увидеть сообщение о том, создание успешно завершено. Вы также сможете увидеть точную продолжительность сборки.

Вывод
 

Давайте проверим, что все построено правильно.

Шаг 7 – Проверка build

Вывод процесса сборки состоит из нескольких образов файловых систем, которые вместе образуют ПЗУ. Вы найдете их в каталоге out/target/product/generic/.

 

Вывод
 

Чтобы проверить ROM, вы можете попытаться загрузиться эмулятор с ней, выполнив команду emulator. Если вы находитесь в среде без графического интерфейса пользователя, убедитесь что вы передаете флаги -no-window и -noaudio к нему.

 

Для того, чтобы проверить, может ли эмулятор загрузиться успешно, подождите минуту и используйте инструмент Android Debug Bridge, adb, чтобы открыть оболочку на эмуляторе.

 

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

Вывод
Выход из этой оболочки, набрав exit и нажав ENTER, или нажав CTRL+D.

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

Исправление проблем

Если построить не удалось, наиболее вероятной причиной является недостаточный объем памяти. Чтобы исправить это, сначала убейте сервер Jack, выполнив следующую команду:

 

Затем начните строить снова, но с меньшим количеством параллельных рабочих мест. Например, вот как вы можете уменьшить количество параллельных заданий для 2:

 

Если сборка не удалось из-за нехватки места на диске, вы, вероятно, попытаетесь построить несколько раз без очистки результатов предыдущих сборок. Чтобы отменить результаты предыдущих сборок, вы можете выполнить следующую команду:

Вывод

В этой статье вы успешно построили ROM на основе AOSP для Android Oreo. Методы, которые вы узнали сегодня применимы ко всем AOSP тоже, таких как Lineage OS и Resurrection Remix OS.


Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close