Android

Android Debug Bridge
Пишем, собираем и запускаем HelloWorld для Android в блокноте
Как Android запускает MainActivity
Droidcon NYC 2015 - How the Main Thread works

Путь к Android SDK

~/Library/Android/sdk

Android Debug Bridge (ADB)

/путь/к/sdk/platform-tools/adb

Работает так. Клиент ADB (на хосте запускающего) подключается к серверу ADB (на хосте запускающего). Если сервер не запущен, то он запустится. При запуске сервер привязывается к TCP-порту 5037 локального хоста. Сервер ищет подключенные устройства и эмуляторы и подключается к демону ADB (adbd, на устройстве или эмуляторе).

процесс сборки приложения

Приложение

В языке Java выполняющееся приложение представляет объект android.app.Application, экземпляр которого создаётся при запуске и уничтожается при завершении приложения (т.е. время существования экземпляра класса Application совпадает со временем существования соответствующего процесса Linux). Когда процесс завершается и перезапускается, создаётся новый экземпляр класса Application.

Компоненты

Основными составными частями любого Android-приложения являются компоненты, управляемые средой выполнения: Activity, Service, BroadcastReceiver и ContentProvider. Конфигурация и взаимодействие этих компонентов определяют поведение приложения. Перечисленные выше компоненты имеют разные области ответственности и жизненные циклы, но все они являются точками входа, посредством которых можно запускать приложения. После начала работы, любой компонент может активировать другой компонент и т.д. на протяжении всего времени выполнения приложения. Запуск компонента в текущем, либо в другом приложении производится с помощью объекта Intent. Объект Intent определяет операции, запрашиваемые у принимающей стороны (или получателя, receiver), например, отправка электронной почты или фотографирование, и может передавать данные от отправителя (sender) получателю. Объект Intent может быть явным или неявным:

  • явный объект Intent - определяет полностью классифицированное имя компонента, известное внутри приложения во время компиляции;
  • неявный объект Intent - среда выполнения создаёт связь с компонентом, для которого определён набор характеристик в IntentFilter. Если Intent обнаруживает совпадение характеристик компонента с IntentFilter, такой компонент может быть активирован.

Компоненты и их жизненные циклы относятся к терминологии, специализированной для ОС Android, поэтому нельзя установить однозначное соответствие с объектами языка Java, лежащими в их основе. Объект Java может существовать дольше соответствующего ему компонента, а среда выполнения может содержать несколько Java-объектов, относящихся к одному и тому же активному компоненту. Из-за этого могут возникать некоторые недоразумения и такая ситуация увеличивает вероятность утечек памяти.

Реализация компонента в приложении осуществляется созданием производного класса, и все компоненты в приложении должны быть зарегистрированы в файле AndroidManifest.xml.

Активность (Activity)

Сервис (Sevice)

ContentProvider

Если возникает необходимость использовать большие объёмы данных внутри одного приложения или совместно с другими приложениями, можно воспользоваться компонентом ContentProvider. Он способен обеспечить доступ к любому источнику данных, но наиболее часто применяется в связке с базами данных SQLite, которые всегда принадлежат только одному приложению. С помощью компонента ContentProvider любое приложение может предоставлять свои данные другим приложениям, выполняющимся в удалённых процессах.

BroadcastReceiver

Этот компонент имеет узкую специализацию: он принимает сообщения, отправляемые другими компонентами внутри приложения, удалёнными приложениями или программной платформой. Входящие сообщения фильтруются, чтобы выделить предназначенные для данного экземпляра BroadcastReceiver. Компонент BroadcastReceiver должен зарегистрироваться, чтобы начать приём сообщений, и отменить регистрацию по завершении. Если этот компонент статически зарегистрирован в файле AndroidManifest.xml, он автоматически будет получать сообщения, пока приложение установлено в системе. Т.е. BroadcastReceiver может активировать связанное с ним приложение, если Intent обнаружит совпадение в отфильтрованных сообщениях.

Дополнительно

Потоки
SQLite
Ресурсы
Файлы

Архитектура Android
Как работает OTA-обновление