За короткое время Android стал самым успешным проектом для мобильных устройств. Платформа Android представляет собой программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного уровня (middleware), а также основные пользовательские приложения, входящие в состав мобильного устройства календарь, карты, браузер, базы данных контактов и др.

Архитектуру Android принято делить на четыре уровня:

  • уровень ядра;
  • уровень библиотек и среды выполнения;
  • уровень каркаса приложений;
  • уровень приложений.

Ядро является слоем абстракции между оборудованием и остальной частью программного стека. Android основан на ядре Linux версии 2.6 , но не является Linux-системой в чистом виде.

Следующий уровень над ядром Linux включает в себя набор библиотек С/С++, используемых различными компонентами ОС. Системная библиотека базируется на Berkeley Software Distribution. Компания Google разработала собственную версию системной библиотеки libc - Bionic специально для мобильных устройств на основе Linux.

Среда выполнения обеспечивает библиотеки ядра Dalvik Virtual Machine, которые предоставляют требуемую функциональность для Java-приложений. Dalvik относится к классу регистровых машин, идеально подходящих для работы на процессорах RISC архитектуры (В отличии от стековой JVM) .

Всего в Android-приложениях существуют четыре типа компонентов:

  • Activity;
  • Service;
  • Broadcast Receiver;
  • Content Provider.

Взаимодействие компонентов осуществляется с помощью объектов Intent.

Основы построения приложений.

Приложение обычно состоит из активности (activity) и макета (layout):

  Активность представлена экземпляром Activity — классом из Android SDK.
Она отвечает за взаимодействие пользователя с информацией на экране.
Чтобы реализовать функциональность, необходимую приложению, разработчик
пишет субклассы Activity . В простом приложении бывает достаточно одного
субкласса, а в сложном приложении их может потребоваться несколько.
 
 Макет определяет набор объектов пользовательского интерфейса и их расположение
на экране. Макет формируется из определений, написанных на языке XML. Каждое
определение используется для создания объекта, выводимого на экране
(например, кнопки или текста).

  Макет активности по умолчанию определяет два виджета (widgets):ConstraintLayout и TextView . 
  Виджеты — это структурные элементы, из которых составляется пользовательский
интерфейс. Виджет может выводить текст или графику, взаимодействовать  с  пользователем или размещать другие виджеты на экране.
Кнопки, текстовые поля, флажки — все это разновидности виджетов.
Android SDK включает множество виджетов, которые можно настраивать для получения
нужного оформления и поведения. Каждый виджет является экземпляром класса View или одного из его субклассов (например, TextView или Button ).

  Каждый элемент обладает набором атрибутов XML. Атрибуты можно рассматривать как инструкции по настройке виджетов.
  Атрибуты android:layout_width и android:layout_height , определяющие ширину и
высоту, необходимы практически для всех разновидностей виджетов. Как правило, им задается значение match_parent(размеры представления определяются размерами родителя) или wrap_content(размеры представления определяются размерами
содержимого).  Иногда в разметке встречается значение fill_parent .  Это устаревшее значение эквивалентно match_parent .
  Порядок определения потомков устанавливает порядок их отображения на экране.

   Виджеты входят в иерархию объектов View , называемую иерархией представлений.
LinearLayout наследует от субкласса View с именем ViewGroup . Виджет ViewGroup
предназначен для хранения и размещения других виджетов.   
LinearLayout используется в тех случаях, когда вы хотите выстроить виджеты в один столбец или строку.

  Макет представляет собой ресурс. Ресурсом называется часть приложения, которая не
является кодом, — графические файлы, аудиофайлы, файлы XML и т. д.
Ресурсы проекта находятся в подкаталоге каталога app/res .  Строковый файл, содержащий строковые ресурсы, находится в res/values/ .
Для обращения к ресурсу в коде используется его идентификатор ресурса.

  Строковый ресурс — строка, находящаяся в отдельном файле XML, который называется строковым файлом. Виджету можно назначить фиксированную строку (например, android:text="Other text" ), но так делать не стоит. Лучше размещать строки в
отдельном файле, а затем ссылаться на них, так как использование строковых
ресурсов упрощает локализацию. Каждый проект включает строковый файл по умолчанию  с именем strings.xml .Проект может содержать несколько строковых файлов.
Если файл находится в каталоге res/values/ , содержит корневой элемент resources
и дочерние элементы string , ваши строки будут найдены и правильно использованы
приложением.