Создание Android прошивки из исходного кода (AOSP) • Android +1
Давно мечтали собрать сами своими руками прошивку Android из исходного кода, но ни как получалось из за отсутствия внятного материала? Android +1 подготовил вам подробную интересную статью!
Предисловие
И так перед тем как начать повествовать статью, немного слов для кого она написана: вы уже знаете что такое Linux и установить Ubuntu, Mint, Fedora, OpenSuSe, по крайней мере устанавливали хотя бы один раз из этих ОС, уже знаете что такое командная строка или терминал, команда cd, ls, sh знакома и не вводит в ступор. Отлично, тогда продолжаем изучать статью. Статья Только для устройств Nexus!
Задача научить подготовить систему для компилирования вашей первой Android прошивки, а не научить устанавливать Linux, изучить команды итп.
Необходимое для создания Android прошивки из исходного код
- Компьютер или мощный ноутбук
- LTS версия ОС UBUNTU 64-разрядная (12. 04 или 14.04)
- Количество свободного места в разделе /home не менее 100 GB
[stextbox id=»warning»]Не открывайте, не закрывайте, не перемещайте, делайте все как написано в инструкции — последовательно, шаг за шагом, перезагружайте компьютер когда это указано.[/stextbox]
Создание Android прошивки из исходного кода
Подготовка
1. Перейдите в параметры системы UBUNTU
2. Раздел «Программы и обновления»
3. Вкладка «Программное обеспечение UBUNTU» установить Загрузить с: Основной сервер
4. Вкладка «Другое ПО», установить галочки на Партнеры Canonical и Партнеры Canonical (исходный код)
5. Нажать внизу кнопку Закрыть и после Обновить
6. Запустить программу «Обновление приложений» и обновить систему и перезагрузить компьютер
7. Запустите терминал (горячими кнопками CTRL+ALT+T)
8. Установите JAVA (объектно-ориентированный язык программирования)
Для Ubuntu 16. 04:
sudo apt-get install openjdk-8-jdk
Для Ubuntu 14.04:
Загрузить версию JDK и установить с помощью команд:
sudo dpkg -i {downloaded.deb file}
sudo apt-get -f install
9. Если ранее была установлена другая среда Java, то выполнить также данные дополнительные команды:
sudo update-alternatives --config java
sudo update-alternatives --config javac
10. Установите (на ваше усмотрение, опционально) пакет (до версии Ubuntu 14.10, далее установлен по умолчанию)
sudo apt-get install nautilus-open-terminal
11. Перезагрузите компьютер
12. Запустите терминал
13. Установите набор пакетов необходим для создания прошивки
Для Ubuntu 14.04 и новее:
sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip
Для Ubuntu 12. 04:
sudo apt-get install git 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 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
14. Перезагрузите компьютер
15. Запустите терминал
16. Установите пакет еще один пакет
sudo apt-get install phablet-tools
17. Вводим команду для «первого знакомства» с репозиториями Google
mkdir ~/bin && curl https://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod a+x ~/bin/repo
18. Ввод команду для внесения папки bin в переменную
sudo gedit .bashrc
после чего откроется текстовый редактор с открытым документом .bashrc, прокручиваем его в самый конец и дописываем с новой строки
export PATH=~/bin:$PATH
Сохраняем документ и закрываем
19. Идентифицируем будущую сборку, тоесть чтобы в собранной прошивки были указаны данные кто ее собрал
git config --global user.email "ваш@эмайл"
git config --global user.name "ваш_никнейм"
20. Создаем проект в которым в дальнейшем загрузится исходный код Android и драйвера
mkdir ~/AOSP
cd ~/AOSP
21. Скачиваем драйвера для своего Nexus в зависимости от вашей версии Android или скачиваем последние доступные версии (нестабильные)
22. Извлекаем из архива файл extracted-xxxxxxx.sh в папку AOSP
23. В терминале пишем
sudo sh extracted-xxxxxxx.sh
где xxxxxx это каждый изъятый файл, то есть вам необходимо по очереди запустить каждый файл sh, после введите команду
make clobber
и удалите файлы sh
24. Теперь о загрузке исходного кода, вам необходимо указать какой вы хотите собрать Android, то есть версию:
repo init -u https://android. googlesource.com/platform/manifest -b android-5.0.2_r1
Вместо android-5.0.2_r1 указывать необходимую версию Android
Загружаем исходный код на компьютер:
repo sync
Данная процедура будет длится долго (не менее 3 часов) и будет загружено около 30 GB
Сборка проекта
25. После того как скачается весь исходный код Android начнем сборку прошивки Android, введите команду:
source build/envsetup.sh
lunch
Перед вами появится окно со списком устройств возможных для создания AOSP прошивки, выбираем цифру и нажимаем ENTER
26. Запускаем сборку Android прошивки
make -j2 otapackage
Вместо j2 стоит указать количество ядер процессора и потоков, если процессор 2 ядреный и включена технология hyper threading (если она доступна), то у вас будет 4 потока (j4), если процессор 4 ядерный и выключена технология hyper threading, то также 4 потока (j4), а если включена то 8 (j8).
В зависимости от мощности и количества ядер участвующих в процессе сборки прошивки зависит и время сборки прошивки, от 20 минут до 24 суток.
Установка
27. После сборки вы обнаружите пакет в папке AOSP/out/target/product/кодовое_имя_nexus/ архив ZIP
28. Переместите данный архив ZIP на устройство NEXUS
29. Установите меню Recovery
30. Перейдите в меню Recovery
31. Установите архив ZIP и после сделайте обязательно wipe
Вот и все! Ничего сложного нет! Статья подошла к концу, подписывайтесь социальные группы и оставайтесь вместе с сайтом Android +1!
Сборка собственной Android-прошивки
Нередко мобильные устройства поставляются с неоптимизированными прошивками от производителя, которые после непродолжительного использования начинают работать медленно и нестабильно. Многие сталкивающиеся с таким поведением прошивок люди ищут стандартные решения в сети, при этом некоторые из них собирают собственные прошивки для своих устройств.
Настройка рабочего окружения
Если вы хотите собирать Android-прошивки, вам понадобится установленный на компьютере Linux-дистрибутив, ну а если вы не можете выделить отдельный компьютер для этих целей, вы вполне можете обойтись виртуальной машиной с Linux-системой.
Я буду использовать дружелюбную систему Ubuntu 16.04, что рекомендую и вам.
Требования
- Дистрибутив Linux
- Как минимум 200 ГБ свободного пространства на жестком диске или твердотельном накопителе
- Мощный компьютер с как минимум 4 ГБ оперативной памяти и производительным четырехядерным центральным процессором
- Качественное соединение с сетью Интернет на скорости как минимум 600 КБ/с
Если у вас есть все необходимое, можно начинать работу.
Все приведенные в данной статье команды должны исполняться с помощью приложения Терминал и, разумеется, я не буду повторять это после каждой команды.
Java
Если в вашей системе не установлена виртуальная машина Java, вы можете выполнить следующую команду для ее установки вместе со всеми библиотеками:
sudo apt-get install openjdk-8-jdk
Сборочный инструментарий
Выполните следующую команду для установки сборочного инструментария (ее исполнение может занять достаточно много времени в зависимости от скорости вашего Интернет-соединения):
REPO
Не догадываетесь, что это такое? Ну, это важный инструмент, необходимый для соединения с серверами и загрузки исходных кодов, которые понадобятся впоследствии. Его название происходит от слова «репозиторий», обозначающего централизованное хранилище определенных ресурсов. В нашем случае в этом хранилище хранятся исходные коды всех программных компонентов, которые будут компилироваться и добавляться в создаваемую прошивку.
Выполните следующую команду для для установки описанного инструмента в свою систему:
CCACHE
Это полезная утилита, которая используется для кэширования бинарных файлов и позволяет сократить время компиляции (примерно на 50%).
Для ее инициализации следует выполнить следующую команду:
ccache -M 50G
Разумеется, вместо приведенного значения вы должны указать количество свободных гигабайт на своем жестком диске.
Для ознакомления с статистикой кэширования следует использовать следующую команду:
ccache -s
Для удаления файлов кэша — следующую команду:
ccache -C
Настройка рабочего окружения почти закончена — осталось открыть файл bash.rc:
sudo nano ~/. bashrc
Теперь следует перейти к последней строке этого файла и вставить в него следующие строки:
export USE_CCACHE=1 export PATH=~/bin:$PATH
Наконец, следует закрыть текстовый редактор и выполнить следующую команду для применения изменений:
source ~/.bashrc
Пришло время перезагрузить систему.
Загрузка исходных кодовВ зависимости от модели вашего устройства, оно может либо официально поддерживаться разработчиками прошивки, либо не поддерживаться ими, но при этом никто не запретит вам собрать неофициальную версию прошивки собственноручно.
Если ваше устройство не поддерживается разработчиками прошивки, ситуация значительно усложнится, ведь вам придется накладывать патчи для достижения совместимости прошивки с ним.
Исходные коды прошивки займут около 20-30 Гб на вашем жестком диске, поэтому в первую очередь следует убедиться в наличии достаточного свободного дискового пространства для их размещения! (Да, отнеситесь к этому серьезно!)
Исходные коды представлены в форме файлов с кодом в основном на языках C и C++, на основе которых впоследствии будут сформированы бинарные файлы, составляющие прошивку. Вам придется загрузить огромное количество таких файлов, причем после их компиляции вы получите файл прошивки объемом в 1 Гб, пригодный для записи на флеш-накопитель вашего устройства. Компиляция может занять очень много времени, но в случае ее успешного завершения вы, в любом случае, получите пригодную к использованию собственную Android-прошивку.
Если вы усвоили всю приведенную выше информацию, можете приступать к загрузке исходных кодов прошивки!
Сначала откройте ваш терминал и используйте команду cd
для перехода в предназначенную для сборки прошивки директорию (я буду считать, что в вашем случае эта директория носит имя "android"
).
Команда для инициализации репозитория:
repo init -u git://github.com/CyanogenMod/android.git -b cm-14.0
(Параметр -b
позволяет выбрать ветвь, доступную в указанном репозитории; в данном случае выбрана ветвь cm-14.0
).
Команда для загрузки исходных кодов:
repo sync -j#
(Вместо символа #
должно использоваться числовое значение, соответствующее количеству одновременно активных потоков загрузки, которое следует выбирать в зависимости от качества сетевого соединения).
Теперь нужно набраться терпения и заняться каким-либо другим делом, ведь загрузка может занять очень много времени.
В данном случае я собирал прошивку CyanogenMod, но вы можете использовать репозиторий вашей любимой Android-прошивки.
Ссылки на репозитории наиболее известных Android-прошивок (на ресурсе GitHub):
- CyanogenMod
- VanirAOSP
- LiquidSmooth
- SlimRom
- LineageOS
Данные прошивки отличаются:
- Дизайном
- Возможностями
- Производительностью
- Временем работы устройства от батареи
- Ошибками (да, не стоит забывать о том, что это проекты от энтузиастов)
Я хотел бы напомнить вам о необходимости выполнения следующих требований перед началом работы…
- У вас должен быть современный компьютер, в котором установлен центральный процессор как минимум с четырьмя ядрами.
- В компьютере должны быть установлены как минимум 4 Гб оперативной памяти.
- Также на жестком диске должно иметься как минимум 200 Гб свободного пространства.
Примечание 1: компиляция является поистине ресурсоемкой операцией, требующей значительных затрат электроэнергии ввиду повышения частоты центрального процессора, поэтому я рекомендую установить в компьютер надежную систему охлаждения ведь в случае ее отказа компьютер может выйти из строя (я не шучу, такое уже случалось).
Примечание 2: в процессе компиляции также возрастет нагрузка на жесткий диск вашего компьютера, поэтому не стоит удивляться тому, что после выполнения огромного количества операций чтения и записи в процессе компиляции прошивок он выйдет из строя. Постарайтесь не использовать для этих целей твердотельный накопитель, ведь несмотря на его более высокую скорость подобные нагрузки быстрее выведут его из строя.
Если ваш компьютер удовлетворяет описанным выше требованиям, вы можете начать процесс компиляции!
Перейдите в директорию android
, в которую ранее были загружены исходные коды прошивки.
Если ваше устройство поддерживается разработчиками прошивки, вам придется всего лишь выполнить команды lunch
и build
, в противном случае все будет намного сложнее (придется добавить поддержку устройства, наложить множество патчей и так далее…)
Я предполагаю, что ваше устройство поддерживается, как и мой телефон LG G3, поэтому вам придется выполнить аналогичную последовательность команд:
lunch cm_d855-userdebug
(в данной команде выделено кодовое имя устройства; в моем случае это d855)
make otapackage -j#
(вместо символа решетки должно использоваться числовое значение, соответствующее количеству ядер центрального процессора вашего компьютера)
Позвольте дать краткие пояснения…
- lunch: эта команда необходима для генерации файлов конфигурации, соответствующих вашему устройству; что же касается кодового имени вашего устройства, вы можете без каких-либо сложностей найти его в данной статье.
- make: эта команда позволяет создать результирующий файл с расширением .zip, который может быть использован для прошивки устройства в режиме восстановления; она может выполняться очень долго, впрочем, все зависит от характеристик вашего компьютера. Если вы используете современное аппаратное обеспечение, ее выполнение займет не больше часа.
После окончания процесса компиляции вы получите результирующий файл прошивки с расширением .zip в поддиректории out
, но будьте осторожны, ведь процесс сборки прошивки не так прост, как может показаться на первый взгляд, поэтому в некоторых случаях вам все же придется решать проблемы компиляции и выполнять дополнительные действия в зависимости от целевого устройства.
1274010cookie-checkСборка собственной Android-прошивкиno
Автор публикации
Путешествие к собственному Android ROM · GitHub
Мотивация
- Упростите тестирование новых выпусков для меня . Нет утомительной переустановки моих общих приложений
- Некоторые графические настройки для nerdcred
- Возможность исправлять вещи
- Более глубокое понимание
План
- Будьте как можно более ванильными для простого обновления версии
- Украсть специфичные для устройства вещи из CyanogenMod, отдать должное, возможно, даже понять это и что-то исправить
- Сохраняйте модульность, чтобы ПЗУ можно было легко переносить на другие устройства
- Собственный ром, на котором установлены все мои приложения по умолчанию (и, возможно, автоматически устанавливает несвободные приложения, если они были куплены?), но список установленных приложений легко настраивается
Тактика защиты от паники
Как оказалось, сложно замуровать устройство до такой степени, что его может спасти только производитель. Прошивая ПЗУ, вы делаете именно это: прошиваете ПЗУ. Рекавери и загрузчик в процессе не трогаются. Поскольку ваше рекавери, скорее всего, ClockworkMod, у вас действительно приятный интерфейс (и adb shell
доступ) если что-то пойдет не так.
Если по какой-то причине вам удалось уничтожить еще и CWM, у вас все равно есть fastboot
. С fastboot
вы все еще можете прошивать образы дисков (но не копировать отдельные файлы, как с CWM и adb
). Обычно можно найти стоковые изображения всех необходимых разделов.
Если вы уничтожите fastboot, вы, скорее всего, облажались, и вам некого винить, кроме себя.
Оборудование
Вот список моего оборудования. Те, что выделены жирным шрифтом, устарели и могут использоваться в качестве тестовых устройств (т. е. не повредят, если их заблокируют).
- Google G1
- HTC Desire (браво)
- Samsung Galaxy SII (i9100g)
- Асус Нексус 7
Разумеется, начальная разработка и тестирование будут выполняться внутри эмулятора.
Загрузка и установка
Первый запуск: Здание AOSP
- Прочтите и следуйте этим инструкциям по загрузке
- Следуйте инструкциям по сборке
Загрузка заняла довольно много времени, но я смог нормально загрузить полученный образ в эмуляторе. В нем отсутствовали все приложения Google, а также Play Store. Я ожидал, что пропадут GApps, а не Play Store.
Интермеццо: автономная копия
Чтобы ускорить и упростить запуск с нуля, создайте локальное зеркало репозитория CM и AOSP.
repo init -u--mirror [-b ветка] синхронизация репо
Для CM выбрал ветку ics
(потому что нет мастера, который стоит по умолчанию). Он сказал, что репо составляет около 10 гигабайт каждый, так что это может занять некоторое время.
По какой-то причине синхронизация иногда зависает на неопределенное время или пропускает некоторые репозитории. Я просто продолжал перезапускать синхронизацию, пока ничего не изменилось.
CM перечисляет только те репозитории в manifest.xml
, которые необходимы для этой конкретной проверяемой ветки. Из-за этого переключение ветвей после клонирования не работает. По этой причине я впал в другую крайность и написал небольшой bash-скрипт для клонирования всех отсутствующих репозиториев CM:
github_forall.sh
Этот сценарий выполняет заданную команду для каждого URL-адреса репозитория Github CyangogenMod. Чтобы клонировать каждое принадлежащее им хранилище, выполните:
./github_forall.sh CyanogenMod git clone --mirror
На момент написания этого потребуется 32 гигабайта и много времени.
Второй запуск: Сборка CM9 (ICS)
репозиторий init -u /home/surma/android/mirros/cm/CyanogenMod/android.git -b ics синхронизация репо . сборка/envsetup.sh обед полный английский сделать -j12
Третий запуск: сборка CM для браво
Начальная процедура остается прежней. Однако после ланча cyanogen_bravo-eng
необходимо подготовить проприетарные файлы и загрузить ROM Manager.
cd-устройство/htc/bravo ./extract-files.sh
Поиск и устранение неисправностей
Ошибки установки и компиляции
инициализация репозитория [...] && синхронизация репо
не удалась при использовании моего локального зеркала Я столкнулся с этой ошибкой, когда некоторые репозитории не были успешно клонированы. Выполните repo sync
на своих локальных зеркалах, пока что-то происходит.
make
терпит неудачу с не может найти -lGL
Эта ошибка указывает на то, что пропущен один конкретный шаг в руководстве по установке AOSP. Простой sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
должен это исправить.
У меня нет лаунчера
У меня такое было с СМ. Просто перезапустите , сделайте
, и все будет в порядке.
Источники
- Тема на XDA, где какой-то парень рассказывает. Он на самом деле не знает, о чем говорит, будь ссылки и команды, содержащиеся внутри, полезными.
- Официальная исходная страница AOSP
- README репозитория CM
Открытые вопросы
- Как создать образ диска, который можно перепрошивать с помощью
fastboot
? - Как изменить характеристики автоматически созданной виртуальной машины?
Глоссарий
ClockworkMod (CWM)
CyanogenMod (СМ)
Проект Android с открытым исходным кодом (AOSP)
ПЗУ
Запас ПЗУ
Мост отладки Android (
adb
)Быстрая загрузка
Восстановление
Пряник (ГБ)
Сэндвич с мороженым (ICS)
Пусковая установка
Утилита обновления ПЗУ (RUU)
Приложения 2 SD (A2SD)
Создание собственного пользовательского ПЗУ Android с помощью Android Open Source Project (AOSP)
Индийский институт информационных технологий и менеджмента Атал Бихари Ваджпаи Гвалиор
Инженерный колледж BMS Басаванагуди, Бангалор
Институт информационных технологий Вишвакармы B. R.A.C.T, Кондхва
Технологический институт Вишвакармы благотворительного фонда Bansilal Ramnath Agarawal, Бибвевади, Пуна
Технологический институт имени Сардара Пателя Бхартия Видья Бхаван, Андхери, Мумбаи
Технологический институт Бхилаи, Дом Бхилаи, Дург
Технологический институт Бирла, Гоа 7 Технологический институт, Хидрабад
Технологический институт Бирла, Месра, Ранчи
Технологический институт Бирла, Пилани, Раджастхан
Технологический институт Чайтанья Бхарати
Технологический институт Коимбатура (автономный)
Инженерный колледж, Пуна
Инженерный колледж Даянанда Сагар Бангалор
Институт информации Дхирубхай Амбани. & Комм. Tech.,
DTU Delhi
Технологический и инженерный факультет (MSU), Вадодара
Технологический и инженерный факультет (GIA), Университет Дхармсин Десаи, (DDU), Nadiad
Govt. Инженерный колледж, Райпур
IIIT Дели
IIIT Hyderabad
Индийский институт инженерных наук и технологий, Шибпур
Индийский институт информационных технологий (IIIT) Пуна
Индийский институт информационных технологий (IIIT)Кота, Раджастхан
Индийский институт информационных технологий Сурат
Индийский институт of Information Technology (IIIT) Kilohrad, Sonepat, Haryana
Индийский институт информационных технологий (IIIT), Vadodara, Gujrat
Индийский институт информационных технологий, дизайна и производства, Kancheepuram
Индийский технологический институт (BHU) Варанаси
Индийский технологический институт (ISM) Дханбад
Индийский технологический институт Бхилаи
Индийский технологический институт Бхубанешвар
Индийский технологический институт Бомбея
Индийский технологический институт Дели Индийский технологический институт Дхарвад
Индийский технологический институт Гандинагар
Индийский технологический институт Гоа
Индийский технологический институт Гувахати
Индийский технологический институт Хайдарабад
Индийский технологический институт Индор
Индийский технологический институт Джамму
Индийский технологический институт Джодхпур
Индийский технологический институт Канпур
Индийский технологический институт Харагпур
Индийский технологический институт Мадрас
Индийский технологический институт Манди
Индийский технологический институт Палаккад
Индийский технологический институт Патна
Индийский технологический институт Рурки
Индийский технологический институт Ропар
Индийский технологический институт Тирупати
Инженерно-технологический институт, Лакхнау (0052)
Технологический институт, Университет науки и технологий Нирма, Ахмадабад
Международный Институт информационных технологий, Бхубанешвар
Международный институт информационных технологий, Ная Райпур
Университет Джадавпур
JSS Научно-технический университет (ранее SJCE) Майсур
L. D. College of Engineering, Ahmedabad
M S Ramaiah Institute of Technology Бангалор
Малавийский национальный технологический институт Джайпур
Maulana Azad National Institute of Technology Bhopal
Morutil
Maulana Azad National Institute of Technology Bhopal Технологический институт Аллахабада
Национальный технологический институт Каликут
Национальный технологический институт Дели
Национальный технологический институт Дургапур
Национальный технологический институт Хамирпур
Национальный технологический институт Карнатака, Сураткал
Национальный технологический институт Патна
Национальный технологический институт Райпур
Национальный технологический институт Андхра-Прадеш
Национальный технологический институт Джамшедпур
7 Институт
7 Technology Rourkela
Национальный технологический институт Silchar
Национальный технологический институт Tiruchirappalli
National Institute of Technology Warangal
Netaji Subhas University of Technology, New Delhi (NSUT Delhi)
PES University (Electronic City Campus) Bangalore
PES University (Campus Ring Road) Bangalore
Pandit Deendayal Petroandhina University,
Pandit Deendayal Petroandhina University
Образовательный фонд Пимпри Чинчвад, Инженерный колледж Пимпри Чинчвад, Пуна
Pt.