Исходники прошивок для андроид

Загрузка и сборка 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

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

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

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

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

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

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

  • -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

Сборка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Cleo для samp android

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

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

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

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

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

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

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

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

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

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

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

Источник

Сборка бинарных файлов Android с помощью исходников и Android NDK. Прокачиваем утилиту screencap

Я занимаюсь автоматизацией Android устройств и часто SDK или ОС Android не имеют нужного функционала или его работа выполняется медленно/очень медленно.

Используя возможности Native Development Kit (NDK) мы можем написать функционал, который будет выполняться быстрей, чем тот же функционал на Java. За счет данного кита мы можем добавлять в свое приложение код, написанный на C/C++ или создавать свои бинарные файлы под мобильные Android устройства.

В данной статье я расскажу каким образом мы можем настроить компиляцию бинарного файла под ОС Android, а так же покажу процесс, как мы можем дополнить функционал уже существующих бинарных файлов в этой ОС.

Для примера я «прокачаю» screencap, который сможет не только получать скриншот всего экрана или выдавать «сырые данные», но и возвращать цвет пикселя по указанной точки или получать изображение только нужной области. Итак, поехали!

Установка NDK

Скачиваем Android NDK и распаковываем архив или устанавливаем через SDK Manager.

Если еще нет, то можете добавить доп. инструменты:

И создаем «проект» под архитектуру вашего мобильного устройства:

Так как у моего HOMTOM HT16 архитектура armeabi-v7a то я буду использовать команду:

И ждем, пока скрипт создаст все необходимые файлы (до 5 мин. примерно).

Проверка на работоспособонсть

Создадим файл hello_world.c с простым кодом:

И попробуем его скомпилировать:

С помощью атрибута -o указываем имя файла, а с помощью ключа -pie мы указываем, что бинарный файл PIE и все его зависимости загружаются в случайные расположения в виртуальной памяти каждый раз, когда приложение выполняется.

Если компиляция прошла успешно, то заливаем файл на телефон:

И попробуем бинарник:

Если вы увидели вывод фразы «hello world» — значит вы всё сделали правильно!

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

Для определения архитектуры можете выполнить команду

Исходники и библиотеки

Так как анализ скомпилированного бинарного файла очень затратно по времени, а Android является открытой системой, то почему бы не воспользоваться этим качеством!

Заходим сюда и ищем нужную версию Android. Ну а так уже — скачиваем архив и ищем нужный исходник бинарного файла. Хотя, конечно же есть вариант — Google и «правильный запрос».

В моем случае нужный мне файл находится по этой ссылке.

Частично разберем данный код.

DEFAULT_DISPLAY_ID — идентификатор дисплея, с которого необходимо получить скриншот. В нашем случае 0.

flinger2skia и vinfoToPixelFormat — отвечает за определение, в каком формате должно быть изображение.

notifyMediaScanner — после того, как изображение будет создано в файловой системе необходимо послать broadcast, чтобы файл смог корректно отображаться. Если не вызывать данный broadcast, то не все приложении смогут увидеть созданный файл.
Функция main не является сложной для «чтения», поэтому разберем только важные моменты, которые непосредственно отвечают за получение данных о изображении.

Читайте также:  Как убрать режим чтения андроид

/dev/graphics/fb0 — это так называемый framebuffer. Framebuffer — это область видеопамяти для кратковременного хранения одного или нескольких видеокадров. Исходя из кода main видно, что существуют версии Android устройств, которые хранят изображение экрана в этом файле. Таким образом, если вы «счастливчик», то узнав vinfo.xoffset и vinfo.yoffset (в большинстве случаев они будут равны 0) и используя консоль вы с легкостью сможете получить информацию о цвете:

В моём случае оказалось все не так просто и данный файл не содержать какую либо информацию о изображении.

screenshot.update — это второй способ, как можно получить изображение. Данная функция имеет несколько перегруженных методов с которыми можно ознакомиться тут.

Рассмотрим описание функции с самым большим количеством параметров:

display — ссылка на необходимый display.
sourceCrop — кроп выбранной области изображения. Может содержать координаты верхней левой точки и нижней правой (всего 4 параметра xLeft, yTop, xRight, yBottom). Начальная точка координат — верхний левый угол.
reqWidth — ширина возвращаемого изображения
reqHeight — высота возвращаемого изображения
minLayerZ и maxLayerZ — как именно работают данные параметры не удалось понять. Перебор значений выдавал иногда черный кран
useIdentityTransform — Если true, то отключает слой наложения поверх приложений, т.е. тех Activity, которые используют ACTION_MANAGE_OVERLAY_PERMISSION
rotation — поворот изображения.

Таким образом, чтобы нам получить цвет пикселя, нам необходимо задать xLeft и yTop, сдвинув их на 1, т.к. отсчет будет идти с 0, а указанные координаты установить в xRight, yBottom. В reqWidth и reqHeight установить значение равным 1. Изменяя параметры данной функции мы сможем определять границы нужной для нас области.

Компиляция базового screencap.cpp

На самом деле это самая сложная часть, которая может занять несколько дней или целую неделю. К сожалению мне не удалось найти каких-то быстрых решений сборки новой версии screencap в сети, поэтому пришлось конкретно помучаться с clang’ом и его параметрами.

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

Поэтому, первоначально я добавил все файлы, которые отсутствовали в библиотеке NDK. Ошибки дают представления, где примерно должен находиться тот или иной файл. Для этого, вам необходимо добавить недостающие файлы, а чтобы узнать где находится sysroot (директория, где ищет clang), можно воспользоваться следующей «фичей»:

В ошибке будет виден путь до данной директории. Если clang у вас находится в другом месте — измените путь до него.

Обращаемся к Google и ищем все необходимые файлы. В моем случае пришлось добавить следующие директории и файлы:

И казалось бы, что вот он успех, все что надо добавлено. Выполняем компиляцию

и получаем ужасный результат:

По мне, это был реальный ад, т.к. множество файлов имело ошибки, чего по идее быть не должно, ведь содержимое данных файлов не менялось. На данном этапе я на долго «присел» и начал активно гуглить ошибки, но нужного ответа не нашел. Каким образом я решил поизучать туториал по clang я уже не помню, но это решение меня спасло!

Как оказалось, у clang есть параметр (а точнее у ld) —unresolved-symbols, который отвечает за работу с неразрешенными (unresolved) символами. Хотя по самой ошибки и не скажешь, что дело в этом. Добавляем параметр и выполняем компиляцию снова:

Наконец-то компиляция прошла успешно! На самом деле, я уже думал, что большая часть проблем ушла, но не тут то было. Начали появляться ошибки, наподобие следующей:

Читайте также:  Изучение букв для детей андроид

Как оказалось, компилятору было достаточно наших добавленных файлов, но на Android устройстве все эти файлы хранятся в .so библиотеках. Позже разобравший более менее хорошо в этом вопросе, я нашел относительно простой способ поиска необходимых библиотек. Для этого нужно открыть бинарных файл screencap, который находится на Android-устройстве (/system/bin/screencap) в текстовом редакторе и посмотреть все названия .so библиотек, которые используются в данном файле. В моем случае вот эта часть:

Вы можете сравнить данную часть с вашим скомпилированным файлом и найти, каких же библиотек вам не хватает. В данном случае ими оказались: libgui.so, libui.so, libcutils.so, libutils.so, libbinder.so, libskia.so. Ищем их расположение (на самом деле, они находятся в одном и том же месте):

Выполняем копирование на sdcard/libs всех библиотек (пример для libskia.so):

Используя adb pull копируем файлы с моб. устройства на компьютер:

Располагаем их в нужной для вас директории и выполняем компиляцию, но уже с новым параметром *.so, который указывает на то, что нужно так же использовать все .so библиотеки при сборке, а точнее — указать ссылки на них в файле.

Теперь и компиляция пройдет успешно и запуск бинарного файла на моб. устройстве будет без ошибок.

Заключение и результат

Как вы могли заметить, добавление своего функционала «в чужой код» является не очень простым занятием.

Измененный код файла screencap приведен ниже. Сборка его происходит таким же образом, как и оригинального. Добавленные изменения думаю будут понятны большинству читателей, поэтому решил его не комментировать.

Пример получения цвета пикселя:

Пример получения изображения по заданной области:

Данный проект залит на GitHub, так что кому интересно — заходите.

Источник

Исходники прошивок для андроид

Инструкции по сборке Android из исходников

Мануалы в помощь новичку и обсуждение для гуру!
Описание | Старая шапка | Собираем ядро для MTK | Первая помощь | Редактирование системных ресурсов Android | Средство обработки прошивок

Что такое ADB и с чем его едят, читаем тут. Отследить новую версию ADB можно в репо от Google.
ADB для Winodws — Скачать sha1:52b4816990d2d18a34645bbf20a31b38a7859d4c
ADB для Linux — Скачать sha1:31078104e5927d823c28550c01275c437a87def7
ADB для MacOSx — Скачать sha1:1403fa0d1bb57ec31170d7905e8505e3b0ed05ee

Что такое маркет и с чем его едят, читайте в этой теме.

Android 4.1.*: microgapps скачать
Android 4.2.*: microgapps Скачать
Android 4.3.*: microgapps Скачать
Android 4.4 : ART microgapps Скачать
Android 4.4.1: ART microgapps Скачать
Android 4.4.2: ART microgapps Скачать
Android 5.0.2: ART microgapps Скачать
Android 5.0.2: ART microgapps Скачать By Mansi
Android 5.1.0: ART minigapps Скачать faq

microgapps — пакет Google Apps с самым основным, только Google Play и framework. Остальное можно установить из Google Play.
minigapps — Пакет Google Apps с самым основным набором ПО от Google.
ART — совместимы с ART режимом, появился в версиях Android 4.4 KitKat.

FlymeOS 5/6 от rocker123
Скачать Огромная коллекция на XDA 4.x-6.x
Скачать OmniRom + Prebuilts 4.x-6.x От ctavropoholb
Скачать Qualcomm MSM8974 и MSM8939 От acdev
Скачать MIUI PatchRom miui5-7 От ctavropoholb
Скачать CyanogenMod 10.1 — 13 4.х.х-6.х.х От ctavropoholb
Скачать CyanogenMod 12.1 android-5.1.1_r18 От SteelBreaker
Скачать Prebuilts AOSP 5.0.x От assusdan
Скачать MIUI PatchRom KitKat v6 От vgdn1942
Скачать AOSP mirror repo От wladimir_tm
Скачать AOSP, AOKP, CM, MIUI 4.4.4 От vaibhavpandeyvpz
Скачать CyanogenMod 11 4.4.4 От Никита Pro Android
Скачать CyanogenMod 10 4.1 От Scorpio92666
Скачать CyanogenMod 7.2.0 2.3.x От pryanya96
Скачать AOSPA ParanoidAndroid 4.4.4 От mrAlmid
Скачать Ubuntu phablet 4.4.2_r1 От Каточимото
Скачать repo snapshots cm-10.2 — android5.1 От wladimir_tm

После чего, качаем исходники командой repo sync

Источник

Оцените статью