- A pop of color and more: updates to Android’s brand
- Android Q is Android 10
- Identifying an Android Device – Available Identifiers
- Android ID via Settings.Secure
- Android Build.SERIAL
- Android Build.MODEL
- Android Build.BRAND
- Android Build.MANUFACTURER
- Android Build.DEVICE
- Android Build.PRODUCT
- IMEI (International Mobile Equipment Identity)
- Phone Number
- ICCID (Sim Serial Number)
- Как получить информацию о модели телефона в Android
- Загрузка и сборка AOSP
- Загружаем AOSP
- Сборка
- Готовим IDE для отладки
- Запускаем отладку
- Строим Android x86
- Установка окружения для сборки
- Загрузка дерева исходных кодов
- Загрузка файлов
- Сборка ядра
- Построение Android
- Настройка VirtualBox
- Эмулятор Jelly Bean
A pop of color and more: updates to Android’s brand
Over the last decade, Android’s open platform has created a thriving community of manufacturers and developers that reach a global audience with their devices and apps. This has expanded beyond phones to tablets, cars, watches, TVs and more—with more than 2.5 billion active devices around the world. As we continue to build Android for everyone in the community, our brand should be as inclusive and accessible as possible—and we think we can do better in a few ways.
Android Q is Android 10
First, we’re changing the way we name our releases. Our engineering team has always used internal code names for each version, based off of tasty treats, or desserts, in alphabetical order. This naming tradition has become a fun part of the release each year externally, too. But we’ve heard feedback over the years that the names weren’t always understood by everyone in the global community.
For example, L and R are not distinguishable when spoken in some languages. So when some people heard us say Android Lollipop out loud, it wasn’t intuitively clear that it referred to the version after KitKat. It’s even harder for new Android users, who are unfamiliar with the naming convention, to understand if their phone is running the latest version. We also know that pies are not a dessert in some places, and that marshmallows, while delicious, are not a popular treat in many parts of the world.
As a global operating system, it’s important that these names are clear and relatable for everyone in the world. So, this next release of Android will simply use the version number and be called Android 10. We think this change helps make release names simpler and more intuitive for our global community. And while there were many tempting “Q” desserts out there, we think that at version 10 and 2.5 billion active devices, it was time to make this change.
Источник
Identifying an Android Device – Available Identifiers
Here are various IDs can be obtained programmatically on Android that can be used to identify a device or installation. I’ve tried to provide a little bit of information about each one and what permissions are required to obtain it.
Identifier | Example Value | Permission Required |
---|---|---|
Android ID via Settings.Secure | 2fc4b5912826ad1 | NONE |
Android Build.SERIAL | HT6C90202028 | NONE |
Android Build.MODEL | Pixel XL | NONE |
Android Build.BRAND | NONE | |
Android Build.MANUFACTURER | NONE | |
Android Build.DEVICE | marlin | NONE |
Android Build.PRODUCT | marlin | NONE |
IMEI | 352698276144152 | READ_PHONE_STATE |
Phone Number | 2028675309 | READ_PHONE_STATE or READ_SMS |
ICCID (Sim Serial Number) | 311477629513071 | READ_PHONE_STATE |
Android ID via Settings.Secure
This is a 64-bit quantity that is generated and stored when the device first boots. It is reset when the device is wiped. It is unique device-wide per OS install, but only unique per application starting with Android O (with old applications grandfathered in).
Android Build.SERIAL
Since Android 2.3 (“Gingerbread”) this is available via android.os.Build.SERIAL. Devices without telephony are required to report a unique device ID here; some phones may do so also.
A hardware serial number, if available. Alphanumeric only, case-insensitive.
Android Build.MODEL
The end-user-visible name for the end product.
Android Build.BRAND
The consumer-visible brand with which the product/hardware will be associated, if any.
Android Build.MANUFACTURER
The manufacturer of the product/hardware.
Android Build.DEVICE
The name of the industrial design.
Android Build.PRODUCT
The name of the overall product.
IMEI (International Mobile Equipment Identity)
Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available.
Phone Number
Returns the phone number string for line 1, for example, the MSISDN or a GSM phone. Return null if it is unavailable.
ICCID (Sim Serial Number)
Returns the serial number of the SIM, if applicable. Return null if it is unavailable.
Источник
Как получить информацию о модели телефона в Android
В Android есть полезный класс android.os.Build, который предоставляет полную информацию о модели телефона, на котором запущено приложение.
К примеру, следующий код на смартфоне Gigabyte G1345 отображает в консоли следующую информацию:
Другие возможные константы класса Build:
- BOARD — название основной платы, например «goldfish»;
- BRAND — имя бренда, например «GSmart»;
- CPU_ABI — название набора команд машинного кода, например «armeabi»;
- DEVICE — название промышленного образца, например «msm1234_sku8»;
- DISPLAY — идентификатор сборки, предназначенный для отображения пользователю;
- FINGERPRINT — строка, которая однозначно идентифицирует это устройство;
- HOST — в документации нет информации по этой константе;
- ID — или номер списка изменений, при котором было выпущено устройство, или метка вроде «M4-rc20»;
- MANUFACTURER — производитель устройства;
- MODEL — название продукта, видимое для пользователя;
- PRODUCT — имя продукта;
- TAGS — теги, разделенные запятыми, описывающие сборку, например, «unsigned,debug»;
- TIME — в документации нет информации по этой константе. Судя по всему, дата производства;
- TYPE — тип сборки, например «user» или «eng»;
- USER — в документации нет информации по этой константе. Чаще всего возвращается строка «android».
Источник
Загрузка и сборка 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 фреймворка
Весь список доступных проектов можно посмотреть в
Открываем сгенерированный 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 x86
Установка окружения для сборки
Для сборки Android потребуется 64 битная версия Linux. Еще один важный момент: обратите внимание на версию GCC, которая установлена на системе. Google поддерживает версию GCC 4.4 и выше. Так же на системе должна быть установлена реализация Java от Oracle.
Установка дополнительных зависимостей для Ubuntu 12.04:
Установите символьную ссылку для устранения конфликта имен:
Загрузка дерева исходных кодов
Установка Repo
Repo — утилита управления репозиториями, упрощающая работу с Git для Android. Более подробную информацию можно прочесть здесь (http://source.android.com/source/version-control.html)
Для установки, инициализации и настройки Repo выполните следующие шаги:
• Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:
• Загрузите Repo скрипт и выставите права на выполнение:
Инициализация Repo клиента
После установки Repo, настройте доступ к репозиториям исходных кодов Android:
• Создайте пустую директорию для исходных файлов и перейдите в нее. Например, это может выглядеть так:
• Запустите скрипт repo init, чтобы обновить версию самого Repo.
Эта команда подключит ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:
Для просмотра всех доступных веток введите команду:
Нас интересуют наиболее последние версии Android от Google:
- Jelly Bean: remotes/origin/android-4.1.1_r6
- Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1
Можно выбрать любую на ваш вкус, дальнейшие шаги не будут отличаться. Для демонстрации процесса сборки под VirtualBox возьмем версию Jelly Bean (JB).
В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo
Загрузка файлов
Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию выполните команду:
Начальная синхронизация может занять больше часа времени.
Сборка ядра
Android разработан прежде всего для устройств, управляемых жестами и он не поддерживает мышь по умолчанию. Поэтому, в качестве примера, пересоберем ядро из исходников с включенной поддержкой мыши.
Создадим директорию для хранения исходников ядра:
Воспользуемся заранее подготовленной версией ядра от Intel:
Перейдем в директорию ядра:
Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и пересобрать. Чтобы сократить время на полную настройку ядра, воспользуемся конфигурационным файлом, который подготовили для на разработчики. Важный момент — не забывайте указать архитектуру для которой происходит сборка ядра, в нашем случае это x86.
Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» вы можете передвигаться по пунктам меню, «Enter» чтобы зайти в подменю. Все точно так же как с обычным ядром Linux.
Чтобы включить поддержку мыши:
• Зайдите в «Device Drivers»
• Выберите «Input device Support»
• Отметьте «Mice»
Вы можете зайти в подменю «Mice» и посмотреть дополнительные настройки драйверов.
Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки, когда меню конфигурации предложит это сделать.
Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).
При успешной компиляции вы увидите сообщение:
Путь до нового ядра указан в последней строке.
Подмена ядра
Путь к ядру, которое будет использовано в сборке для VirtualBox можно определить следующим образом:
Должно вывестись примерно следующее:
Скопируем bzImage по найденному пути:
Построение Android
Установим окружение для сборки:
Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:
После выполнения команды вы увидите информацию о предстоящей сборке:
Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.
Процесс сборки может занять значительное время, конкретные цифры зависят от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток.
При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:
Далее необходимо собрать загрузочный образ для VirtualBox:
Если сборка прошла успешно, в консоли должна появиться запись:
Настройка VirtualBox
Эмулятор Jelly Bean
Сборка эмулятора мало чем отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Для чистоты эксперимента, будет процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.
Загрузка исходных кодов
Выбор сборки эмулятора
В случае успеха вы увидите:
Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.
Теперь сборка эмулятора завершена.
Самый простой способ запустить его:
Например, можно запустить с только что собранным ядром, с разрешением 480×800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.
Более подробно о возможностях и настройках эмулятора можно прочитать здесь
Источник