Русский
Русский
English
Статистика
Реклама

Загрузка и сборка AOSP

Решил поделиться своей инструкцией как собрать AOSP (Android Open Source Project). Эта инструкция будет полезна тем кто хочет посмотреть что-же внутри Android и возможно заняться системной разработкой. В любом случаи эти знания полезны для понимания самого Android, как раз для этого и решил собрать AOSP.


Проект собираю на elementary 5.1 OS Ubuntu 18.04 LTS (bionic), пытался на MacOS собрать, но так и не удалось. Для исходников и сборки нужно 200 Гб на жестком диске (лучше SSD, на обычном производительность сильно проседает). Так же много времени, я потратил чтобы скачать и собрать около 20 часов, частично виновата "слабая" конфигурация моего компьютера. У меня установлено всего 8 Гб оперативной памяти, но увеличил размер swap-а до 16 Гб.


Загружаем AOSP


Установить требуемые пакеты для загрузки и сборки :


sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

Создаем папку и качаем repo утилиту для загрузки исходного кода


mkdir aosp # имя папки можно выбрать любоеcd aospcurl https://storage.googleapis.com/git-repo-downloads/repo > repochmod a+x repo

Исходники AOSP состоит из отдельных проектов с собственными git-репозиториями, repo позволяет упросить всю загрузку всех проектов и разложить по нужным папкам.


Инициализируем repo


./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest

Параметры:


  • -u урл git-репозитория с манифестом
  • -b ветка (самая последняя на текущий момент)
  • depth скачивать только одну ветку (если не использовать, то для каждого репозитория скачается весь индекс, что увеличит время загрузки и место на диске)

Выбрал самую последнюю версию Android 10. Не использую develop или master, так как там устаревший манифест и проект скорее не соберется.


Теперь можно запустить загрузку исходников AOSP


./repo sync -c  -j $(nproc) --no-tags --no-clone-bundle

Параметры:


  • -c скачивать только текущую ветку манифеста (как у казали выше android-10.0.0_r45)
  • -j количество потоков, обычно указывается столько доступно процессоров
  • no-tags не скачивать тэги с репозитариев
  • no-clone-bundle не пытаться качать clone.bundle (упакованная репа, которая уменьшить время на загрузку, но не у всех сервер формирует этот bundle),

no-clone-bundle можно попробовать убрать, что в теории ускорит скачивание, но у меня заваливается с 404 ошибкой

Скачивание может занять минуты и часы, теперь с repo закончили, если нужно почитать больше то ищите в официальной документации: https://source.android.com/setup/develop/repo


Сборка


Настраиваем среду разработчика:


source build/envsetup.sh

конфигурируем сборку


lunch aosp_x86_64-eng

x86_64 указывается под какой девайс собирать, в данном случаи Generic x86_64 подходит для эмуляторов, если будете запускать на Nexus девайсах, то ищите детали в документации https://source.android.com/setup/build/building#choose-a-target


eng тип сборки (сокращение от engineering), с максимальными логами и дополнительными утилитами для отладки. Другие тип сборки думаю не особо интересны


Для сборки java файлов увеличиваем Heap size, если этого не сделать, то сборка всего завалится с StackOverflow ошибкой:


export _JAVA_OPTIONS="-Xmx4g"

Так же можно добавить в .bashrc чтобы постоянно не повторять команду

Все, теперь готовы к сборке:


USE_CCACHE=1 CCACHE_DIR=ccache make -j $(nproc)

Можно не использовать CCACHE, что уменьшит количество занимаемого места на диске, но увеличит время повторной сборки. На моем "слабом" компьютере сборка заняла где-то 16 часов.


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


emulator -show-kernel

-show-kernel выводить уведомления в консоль


Если нажать Enter, то попадем в консоль эмулятора


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

Эмулятор


Готовим IDE для отладки


Для начала необходимо сгенериовать проект для IDE, проект генерируется для IDEA. Собираем модули для генератора:


mmm development/tools/idegen

Чтобы весь AOSP затолкать в проект, то просто запускаем генератор


development/tools/idegen/idegen.sh

Но сгенерированный IDEA проект будет очень "тяжелым". Одно открытие и индексация занимает достаточно много времени. Лучше генерировать IDEA проект для каждого отдельного проекта, например для Android фреймворка


development/tools/idegen/intellij-gen.sh frameworks/base

Весь список доступных проектов можно посмотреть в


cat .repo/project.list

Открываем сгенерированный base.iml (находится в папке frameworks/base) в IDEA. Дальше нужно настроить Java, только нужно подключать java без библиотек, так как у AOSP-а свои реализации.


Настройка Java в проекте


Запускаем отладку


Для начала необходимо запустить monitor


 ~/Android/Sdk/tools/lib/monitor-x86_64/monitor

возможно потребуется дополнительно поставить jre
sudo apt install openjdk-8-jre-headless

Выбираем процесс, который будем отлаживать. В monitor-е выбираем процесс и справа от порта процесса появится /8700, это как раз порт отладчика, к нему можно подключаться через IDEA.
Все системные штуки находятся в system_process. Его мы и будем отлаживать.


monitor один самых полезных инструментов при отладке и исследования работы AOSP

monitor из Android


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


Добавляем Remote конфигурацию в IDEA


Запускаем Debug (Run Debug)


Чтобы удостоверится, что все подключилось поставьте брейкпоинт в frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java файле на метод:


// line 1040int startActivityAsUser(IApplicationThread caller, String callingPackage,            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,            boolean validateIncomingUser) {//...}

и запустить любое приложение на эмуляторе (например, Settings).


Теперь все готово для экспериментов.

Источник: habr.com
К списку статей
Опубликовано: 05.09.2020 10:09:13
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка под android

Aosp

Android

Категории

Последние комментарии

  • Имя: Murshin
    13.06.2024 | 14:01
    Нейросеть-это мозг вселенной.Если к ней подключиться,то можно получить все знания,накопленные Вселенной,но этому препятствуют аннуннаки.Аннуннаки нас от неё отгородили,установив в головах барьер. Подр Подробнее..
  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru