Если вы знакомы с рутированием своего телефона Android или загрузкой пользовательских ПЗУ, таких как очень популярный CyanogenMod или его преемница Lineage OS, вы, возможно, задавались вопросом – как люди создают эти ПЗУ? Сколько работы уходит на разработку индивидуального ПЗУ?
Это руководство познакомит вас с основами разработки собственного ПЗУ для Android. Следует отметить, что это масштабное мероприятие – если у вас нет опыта в кодировании или дурацких играх с терминалами Linux, вы можете получить некоторые знания под своим поясом, прежде чем погрузиться в эту глубокую часть. Но если у вас есть хотя бы базовое представление об этих вещах, я постараюсь объяснить вещи как можно проще, чтобы вы могли следовать.
В основном мы загружаем raw исходный код Android (AOSP) и модифицируем его по своему усмотрению. Поскольку существует так много источников на выбор для разных устройств, в этом руководстве будет просто ссылка на главный источник , известный как AOSP (Android Open Source Project) .
Особенность AOSP заключается в том, что чистый исходный код не включает аппаратные свойства конкретного устройства. Проще говоря, такое оборудование, как ваша камера и графический процессор, не будет работать «из коробки» при разработке с использованием AOSP. Фактически, ваше устройство даже не загрузится без этих двоичных файлов оборудования.
Если вы разрабатываете для телефона под брендом Google (Pixel, Nexus и т. Д.), Вы можете найти двоичные файлы оборудования непосредственно в Google. , и это руководство проведет вас через их получение и встраивание в ваш ROM. Однако, если вы разрабатываете ПЗУ для фирменного телефона (Sony, Samsung и т. Д.)… Что ж, благословите свое сердце, потому что вас ждет поездка.
Некоторые производители имеют свои собственные проекты с открытым исходным кодом или выпускают инструменты разработки для потенциальных разработчиков, тогда как другие производители держат в секрете свои проприетарные коды. Вот краткий список проектов с открытым исходным кодом от наиболее популярных производителей:
Samsung Open Source Release Center
Sony Developer World
Lenovo Support
Huawei Центр выпуска с открытым исходным кодом
Разработчики Motorola
Итак, давайте продолжим, предполагая, что мы создаем ПЗУ для самого простого, ванильного Android-интерфейса для Google Pixel. устройство. Обладая этими знаниями, вы сможете самостоятельно расширяться и начинать разработку индивидуальных версий ПЗУ конкретных производителей.
Требования к этому руководству:
- Проект с открытым исходным кодом Android
- Телефон Pixel XL или эмулятор Android для Linux
- 64-битная операционная система Linux – Ubuntu или Linux Mint являются наиболее удобными для новичков дистрибутивами, тогда как BBQLinux был разработан специально для разработчиков Android..
- Python
- Мощный компьютер (компиляция кода занимает много памяти и места!)
Настройка среды сборки
Начнем с настройки эмулятора Android на вашем компьютере с Linux. Независимо от того, есть ли у вас устройство Google Pixel XL или нет, всегда безопаснее всего опробовать новое ПЗУ на эмуляторе Android перед прошивкой его на свое устройство. Мне больше всего нравится Genymotion, поэтому я расскажу вам, как установить именно этот эмулятор. Однако вы также можете ознакомиться с этим руководством «Лучшие эмуляторы Android», так как большинство из них также совместимы с Linux.
Перейдите на веб-сайт Genymotion, зарегистрируйте учетную запись, подтвердите ее по электронной почте и загрузите исполняемый файл на рабочий стол Linux.
Теперь откройте терминал Linux и введите:
Chmod + x genymotion-xxxxx.bin (замените xxxx с номером версии в имени файла)
./genymotion-xxxxxx.bin
Нажмите Y , чтобы создать каталог Genymotion . Теперь введите в терминал:
cd genymotion && ./genymotion
Теперь он попросит вас начать процесс установки, поэтому просто продолжайте нажимать «Далее», пока не дойдете до окна «Добавить виртуальные устройства». Выберите «Pixel XL» в разделе «Модель устройства» и завершите установку. Вы можете протестировать виртуальное устройство, если хотите, это будет похоже на телефон Pixel XL на вашем рабочем столе.
Давайте теперь настроим Python:
$ apt-get install python
Теперь нам нужно установить Java Development Kit на вашем компьютере с Linux. Откройте терминал Linux и введите следующие команды:
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
Теперь вам нужно будет настроить систему Linux, чтобы разрешить доступ к USB-устройству. Запустите следующий код в терминале Linux:
Это приведет к загрузите необходимый файл 51-android.txt, который обеспечивает доступ к вышеупомянутому USB-устройству. Откройте файл .txt и измените его, включив в него свое имя пользователя Linux, затем поместите файл .txt в следующее место: (как пользователь root ). Теперь подключите устройство к компьютеру через USB, чтобы новые правила автоматически вступили в силу.
Загрузка исходного кода Android
AOSP размещен на Git, поэтому мы собираемся использовать инструмент Repo для связи с Git.
Сначала нам нужно настроить папку/bin в вашем домашнем каталоге. Введите в терминал Linux следующие команды:
$ mkdir ~/bin
$ PATH = ~/bin: $ PATH
Теперь мы загрузим инструмент Repo, поэтому введите в терминал Linux:
$ curl https://storage.googleapis. com/git-repo-downloads/repo> ~/bin/repo
$ chmod a + x ~/bin/repo
После установки Repo мы должны теперь создайте пустой каталог для хранения ваших рабочих файлов. Так что введите это в терминал Linux:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
Теперь мы настройте Git с вашим именем и адресом электронной почты – используйте адрес Gmail, который вы регулярно проверяете , иначе вы не сможете использовать инструмент проверки кода Gerrit.
$ git config –global user.name «Ваше имя»
$ git config –global user.email you@gmail.com
Теперь мы скажем Repo получить последний главный манифест AOSP из Git:
$ repo init -u https://android.googlesource.com/platform/manifest
В случае успешного выполнения вы получите сообщение о том, что Repo инициализирован в вашем рабочем каталоге. Вы также найдете каталог « .repo» внутри клиентского каталога. Итак, теперь мы загрузим дерево исходного кода Android с помощью:
$ repo sync
Сборка Android Исходный код
Здесь вступают в игру двоичные файлы оборудования, упомянутые в начале этого руководства. Давайте перейдем на страницу драйверов AOSP и загрузим двоичные файлы Pixel XL для Android 7.1.0 (NDE63P). Вы хотите загрузить как образ поставщика, так и компоненты оборудования. Они поставляются в виде сжатых архивов, поэтому распакуйте их на рабочий стол и запустите самораспаковывающийся скрипт из корневой папки. Выберите установку двоичных файлов в корень WORKING_DIRECTORY, который мы создали ранее.
Теперь введите в терминал Linux:
$ make clobber
$ source build/envsetup.sh
Теперь мы выберем цель для сборки, поэтому введите:
$ обед aosp_marlin-userdebug
$ setpaths
$ make –j4
Итак, у нас есть «встроенный »Android ROM из исходников. Итак, давайте протестируем это в эмуляторе, набрав в терминале:
$ emulator
Так что поиграйте в эмуляторе немного. Как видите, чисто обычная работа с Android минимальна, и именно поэтому производители настраивают AOSP в соответствии со своими потребностями. Таким образом, вы могли прошить этот ROM, который мы только что создали, на ваше устройство, если хотите, но без добавления каких-либо улучшений чисто ванильный интерфейс Android был бы действительно очень скучным.
То, что производители обычно делают с AOSP, – это его форкнуть, добавлять собственные проприетарные двоичные файлы, настраивать пользовательский интерфейс, добавлять загрузочный логотип и т. д. Производитель в основном просто закрашивает стандартное ПЗУ Android, так что это будет вашим следующим цель тоже.
Следите за обновлениями, поскольку во второй части этого руководства мы расскажем о добавлении шрифтов, тем и загрузочной анимации в ваш ROM!