Razrabotka_prilozheniy_dlya_OS_Android.pptx
- Количество слайдов: 70
Разработка приложений для ОС Android
ОС Android - операционная система для мобильных устройств: смартфонов, планшетных компьютеров, КПК. В настоящее время именно Android является самой широко используемой операционной системой для мобильных устройств. Подтверждение этого факта можно найти в таблице, составленной по данным аналитической компании Gartner (2013 г. ).
Операционная Продано Доля рынка (%) система (тыс. ед. ) III кв. 2013 Android 205022, 7 81, 9 Продано Доля рынка (%) (тыс. ед. ) III кв. 2012 124552, 3 72, 6 i. OS 30330, 0 12, 1 24620, 3 14, 3 Microsoft 8912, 3 3, 6 3993, 6 2, 3 Black. Berry 4400, 7 1, 8 8946, 8 5, 2 Bada 633, 3 0, 3 4454, 7 2, 6 Symbian 457, 5 0, 2 4401, 3 2, 6 другие 475, 2 0, 2 683, 7 0, 4
Внимательное изучение таблицы позволяет увидеть подавляющую популярность смартфонов под управлением ОС Android в мире, доля таких устройств не первый год превышает половину от общего числа купленных смартфонов. Кроме всего прочего, эта популярность продолжает расти. Очевидно, что армия пользователей смартфонов под управлением Android будет искать дополнительные приложения для своих устройств, в связи с этим умение разрабатывать эти самые приложения может принести много пользы своему владельцу. Например, можно разрабатывать для себя полезные, интересные приложения, а можно, разведав обстановку и осмотревшись, сделать разработку мобильных приложений своей профессиональной деятельностью, основной или дополнительной.
Устройство платформы Android Платформа Android объединяет операционную систему, построенную на основе ядра ОС Linux, промежуточное программное обеспечение и встроенные мобильные приложения. Разработка и развитие мобильной платформы Android выполняется в рамках проекта AOSP (Android Open Source Project) под управлением OHA (Open Handset Alliance), руководит всем процессом поисковый гигант Google. Android • поддерживает фоновое выполнение задач; • предоставляет богатую библиотеку элементов пользовательского интерфейса; • поддерживает 2 D и 3 D графику, используя Open. GL стандарт; • поддерживает доступ к файловой системе и встроенной базе данных SQLite. С точки зрения архитектуры в системе Android можно выделить следующие уровни: • • Базовый уровень (Linux Kernel) - уровень абстракции между аппаратным уровнем и программами пользователя; Набор библиотек и среда исполнения (Libraries & Android Runtime) обеспечивает важнейшую базовую функциональность для приложений, содержит виртуальную машину Dalvik и базовые библиотеки Java, необходимые для запуска Android приложений; Уровень каркаса приложений (Application Framework) обеспечивает разработчикам доступ к API, предоставляемым компонентами системы уровня библиотек; Уровень приложений (Applications) - набор предустановленных базовых приложений.
В основании компонентной иерархии лежит ядро ОС Linux 2. 6 (несколько урезанное), служит промежуточным уровнем между аппаратным и программным обеспечением, обеспечивает функционирование системы, предоставляет системные службы ядра: управление памятью, энергосистемой и процессами, обеспечение безопасности, работа с сетью и драйверами. Уровнем выше располагается набор библиотек и среда исполнения. Библиотеки реализуют следующие функции: • предоставляют реализованные алгоритмы для вышележащих уровней; • обеспечивают поддержку файловых форматов; • осуществляют кодирование и декодирование информации (например, мультимедийные кодеки); • выполняют реализацию графики и т. д. Библиотеки разработаны на языке С/С++ и скомпилированы под конкретное аппаратное обеспечение устройства, вместе с которым они и поставляются производителем в предустановленном виде.
Рассмотрим некоторые библиотеки Surface Manager Media Framework SQLite - композитный менеджер окон. Поступающие команды отрисовки собираются в закадровый буфер, где они накапливаются, составляя некую композицию, а потом выводятся на экран - библиотеки, реализованные на базе Packet. Video Open. CORE. Используются для записи и воспроизведения аудио и видео контента, а также для вывода статических изображений. Поддерживаются форматы: MPEG 4, H. 264, MP 3, AAC, AMR, JPG и PNG. - легковесная и производительная реляционная СУБД, используется в Android в качестве основного инструмента для работы с базами данных.
3 D библиотеки Lib. Web. Core SGL (Skia Graphics Engine) SSL Libc - используются для высокооптимизированной отрисовки 3 D -графики. - библиотеки браузерного движка Web. Kit, используемого также в известных браузерах Google Chrome и Apple Safari. - Библиотека для работы с 2 D-графикой. Она является продуктом Google и часто используется в других программах. - библиотеки для поддержки одноименного криптографического протокола. - стандартная библиотека языка С, а именно ее BSD реализация, настроенная для работы на устройствах на базе Linux.
Среда исполнения включает в себя библиотеки ядра, обеспечивающие большую часть низкоуровневой функциональности, доступной библиотекам ядра языка Java, и виртуальную машину Dalvik, позволяющую запускать приложения. Каждое приложение запускается в своем экземпляре виртуальной машины, тем самым обеспечивается независимость работающих приложений от ОС и друг от друга. Поэтому код с ошибками или вредоносное ПО не смогут испортить Android и устройство на его базе, когда сработают. Для исполнения на виртуальной машине Dalvik Java-классы компилируются в исполняемые файлы с расширением . dex с помощью инструмента dx, входящего в состав Android SDK. DEX (Dalvik EXecutable) - формат исполняемых файлов для виртуальной машины Dalvik, оптимизированный для использования минимального объема памяти. При использовании IDE Eclipse и плагина ADT (Android Development Tools) компиляция классов Java в формат. dex происходит автоматически.
Каркас приложений На еще более высоком уровне располагается каркас приложений (Application Framework), архитектура которого позволяет любому приложению использовать уже реализованные возможности других приложений, к которым разрешен доступ. В состав каркаса входят следующие компоненты: • богатый и расширяемый набор представлений (Views), который может быть использован для создания визуальных компонентов приложений, например, списков, текстовых полей, таблиц, кнопок или даже встроенного webбраузера; • контент-провайдеры (Content Providers), управляющие данными, которые одни приложения открывают для других, чтобы те могли их использовать для своей работы; • менеджер ресурсов (Resource Manager), обеспечивающий доступ к ресурсам без функциональности (не несущим кода), например, к строковым данным, графике, файлам и другим; • менеджер оповещений (Notification Manager), позволяющий приложениям отображать собственные уведомления для пользователя в строке состояния; • менеджер действий (Activity Manager), управляющий жизненными циклами приложений, предоставляющий систему навигации по действиям;
Уровень приложений И, наконец, самый высокий, самый близкий к пользователю уровень приложений. Именно на этом уровне пользователь взаимодействует со своим устройством, управляемым ОС Android. Здесь представлен набор базовых приложений, который предустановлен на ОС Android. Например, браузер, почтовый клиент, программа для отправки SMS, карты, календарь, менеджер контактов и др. Список интегрированных приложений может меняться в зависимости от модели устройства и версии Android. К этому уровню также относятся все пользовательские приложения.
Разработчик обычно взаимодействует с двумя верхними уровнями архитектуры Android для создания новых приложений. Библиотеки, система исполнения и ядро Linux скрыты за каркасом приложений. Повторное использование компонентов других приложений приводит к идее задач в Android. Приложение может использовать компоненты другого Android приложения для решения задачи, например, если разрабатываемое приложение предполагает использование фотографий, оно может вызвать приложение, управляющее фотографиями и зарегистрированное в системе Android, выбрать с его помощью фотографию и работать с ней.
Для установки приложения на устройствах с ОС Android создается файл с расширением *. apk (Android package), который содержит исполняемые файлы, а также вспомогательные компоненты, например, файлы с данными и файлы ресурсов. После установки на устройство каждое приложение "живет" в своем собственном изолированном экземпляре виртуальной машины Dalvik.
Обзор сред программирования Прежде чем начать разрабатывать приложения под Android, рассмотрим существующие инструменты, подходящие для этих целей. Можно выделить необходимые инструменты, без которых разработка мобильных приложений под Android просто невозможна. С другой стороны, существует большое количество вспомогательных систем, в какой-то мере упрощающих процесс разработки. К обязательным инструментам относится Android SDK - набор средств программирования, который содержит инструменты, необходимые для создания, компиляции и сборки мобильного приложения.
• SDK Manager - инструмент, позволяющий загрузить компоненты Android SDK. Показывает пакеты Android SDK и их статус: установлен (Installed), не установлен (Not Installed), доступны обновления (Update available). • Android Emulator (emulator) - виртуальное мобильное устройство, которое создается и работает на компьютере разработчика, используется для разработки и тестирования мобильных приложений без привлечения реальных устройств. • AVD Manager - предоставляет графический интерфейс для создания виртуальных Android устройств (AVDs), предусмотренных Android Emulator, и управления ими. (В ЛР№ 1 подробно рассматривается создание и использование виртуального устройства). • Android Debug Bridge (adb) - гибкий инструмент, позволяющий управлять состоянием эмулятора или реального Android устройства, подключенного к компьютеру. Также может использоваться для установки Android приложения (. apk файл) на реальное устройство.
В современных условиях разработка ПО в большинстве случаев ведется с использованием интегрированных сред разработки (IDE). IDE имеют несомненные достоинства: процесс компиляции, сборки и запуска приложения обычно автоматизирован, в связи с чем для начинающего разработчика создать свое первое приложение труда не составляет. Но чтобы заниматься разработкой всерьез, необходимо потратить силы и время на изучение возможностей самой среды. Рассмотрим IDE, пригодные для разработки под Android 1). Android IDE - среда разработки под Android, основанная на Eclipse. Предоставляет интегрированные инструменты для разработки, сборки и отладки мобильных приложений. В данном курсе Android IDE выбрана в качестве основной среды разработки. Возможности этой среды более подробно рассмотрены в первой лабораторной работе. Также там даны рекомендации по установке и настройке среды, созданию и запуску первого приложения как на эмуляторе, так и на реальном устройстве. Android Studio - среда разработки под Android, основанная на Intelli. J IDEA. Подобно Android IDE, она предоставляет интегрированные инструменты для разработки и отладки. Дополнительно ко всем возможностям, ожидаемым от Intelli. J, в Android Studio реализованы: • • поддержка сборки приложения, основанной на Gradle; специфичный для Android рефакторинг и быстрое исправление дефектов; lint инструменты для поиска проблем с производительностью, с юзабилити, с совместимостью версий и других; возможности Pro. Guard (утилита для сокращения, оптимизации и обфускации кода) и подписи приложений; основанные на шаблонах мастера для создания общих Android конструкций и компонентов; WYSIWYG редактор, работающий на многих размерах экранов и разрешений, окно предварительного просмотра, показывающее запущенное приложение сразу на нескольких устройствах и в реальном времени; встроенная поддержка облачной платформы Google.
Эмуляция. Стандартный эмулятор Android Эмуляция (англ. emulation) в вычислительной технике - комплекс Эмуляция программных, аппаратных средств или их сочетание, предназначенное для копирования (или эмулирования) функций одной вычислительной системы (гостя) на другой, отличной от первой, вычислительной системе (хосте) таким образом, чтобы эмулированное поведение как можно ближе соответствовало поведению оригинальной системы (гостя). Целью является максимально точное воспроизведение поведения. Эмулятор - виртуальное мобильное устройство, которое запускается на компьютере. При помощи эмулятора можно разрабатывать и тестировать приложения без использования реальных устройств.
Основное окно
Создание приложения Чтобы создать приложение, нам нужно в Android Studio создать проект. При создании проекта, в нем создается модуль. В этом модуле мы проектируем формы приложения и пишем код. При запуске этого модуля мы получаем готовое приложение. Поэтому модуль по сути и является приложением. А проект - контейнер для модуля. Таким образом, в самом простом случае структура проекта такова:
Есть проект, и в нем есть модуль. При запуске проекта запускается модуль и мы получаем Androidприложение, которое создано в этом модуле. В этом случае: один проект = одно Androidприложение (один модуль).
Но в одном проекте может быть несколько модулей.
Создание проекта Выбираем пункт основного окна Start a new Android Studio Project
Создание модуля Итак, вы создали свой первый проект. Конечно, это всего лишь встроенное в среду приложение для проверки корректной установки инструментария, однако множество приложений создаются именно из него. Итак, проект создан. Теперь создадим в проекте свой модуль (приложение). Эта процедура будет частично похожа на создание проекта, но с небольшими отличиями. Чтобы создать модуль, в меню выбираем File -> New module Тип модуля выбираем Phone and Tablet Application
Настройка активности Большинство приложений на Android имеют свой экран (форму, окно), которое называется активностью или деятельностью (Activity).
Blank Activity - шаблон, предназначенный для мобильных телефонов. Fullscreen Activity - шаблон, позволяющий растянуть приложение на весь экран (без навигационной панели и статус-бара). Master/Detail Flow - шаблон, предназначенный для планшетных компьютеров.
Переименование активности
Структура проекта
Структура модуля Можно раскрыть этот модуль и посмотреть его содержимое. Вкратце пройдемся по интересующим нас элементам Файл Android. Manifest. xml – манифест конфигурационный файл приложения или В папке java и ее подпапках будет весь написанный нами, код приложения Папка res используется для файлов-ресурсов различного типа.
Запуск приложения Запустим наше первое приложение! Для этого надо выбрать соответствующий ему модуль в выпадающем списке сверху и нажимаем (чуть правее списка) кнопку с зеленым треугольником
Выбор эмулятора Чтобы запустить приложение, нужно иметь какое-нибудь реальное Android-устройство или эмулятор. Нам предлагают запустить эмулятор
XML-файл. Графический редактор В папке res в подпапке layout находится xmlфайл, который является оболочкой нашей активности. Именно этот файл будет виден на экране устройства.
Запуск проекта на эмуляторе устройства В первую очередь нужно создать эмулятор устройства. Это можно сделать, нажав на кнопку на панели инструментов, изображающую смартфон. Если кнопки нет на панели, ее можно найти в меню Window.
Откроется Android Virtual Device Manager. Пока в нем нет ни одного виртуального устройства.
Чтобы запустить приложение, нужно какоенить реальное Android-устройство или эмулятор. Нам предлагают запустить эмулятор Нажимаем ОК. Через какое-то время (до пары минут) появится эмулятор и начнет загружаться
В итоге эмулятор должен заработать и мы попадаем на экран блокировки. Снимаем блокировку и видим наше приложение, которое мы называли First. Project (поле Application name).
Элементы экрана и их свойства Если проводить аналогию с Windows, то приложение состоит из окон, называемых Activity. В конкретный момент времени обычно отображается одно Activity и занимает весь экран, а приложение переключается между ними. В качестве примера можно рассмотреть почтовое приложение. В нем одно Activity – список писем, другое – просмотр письма, третье – настройки ящика. При работе вы перемещаетесь по ним. Содержимое Activity формируется из различных компонентов, называемых View. Самые распространенные View - это кнопка, поле ввода, Check. Box и т. д. Примерно это можно изобразить так:
Необходимо заметить, что View обычно размещаются в View. Group. Самый распространенный пример View. Group – это Layout бывает различных типов и отвечает за то, как будут расположены его дочерние View на экране (таблицей, строкой, столбцом …)
В нашем модуле нам интересен файл: res > layout > activity_main. xml Это layout-файл. В нем мы определяем набор и расположение элементов View, которые хотим видеть на экране. При запуске приложения Activity читает этот файл и отображает нам то, что мы добавили. Скорее всего, он у вас уже открыт на редактирование, но на всякий случай давайте еще раз откроем его двойным кликом и посмотрим, какой набор View он содержит по умолчанию.
Слева видим список View, разделенный на группы. Здесь отображены все Viewэлементы, которые вы можете использовать в своих приложениях. Обратим внимание на белый экран. Мы видим, что на экране сейчас присутствует элемент с текстом Hello world! Чтобы узнать, что это за View нажмите на этот текст. Справа во вкладке Component Tree вы видите все элементы, которые описаны в этом layoutфайле.
Видим, что выделенный нами элемент – это Text. View. Это элемент, который умеет отображать текст. Обратите внимание, что он вложен в элемент Relative. Layout – это один из видов View. Group. Добавим еще элементов на экран, пусть это будут Button и Check. Box. Для этого просто найдите в списке слева и перетащите на экран вашего будущего приложения. Также можно перетащить их на Relative. Layout во вкладке Component Tree, результат будет почти тот же. Кроме Button и Check. Box, добавим еще на экран Plain Text из группы Text Fields. После этих манипуляций ваш экран будет выглядеть примерно так:
В Component Tree они появятся под названиями button, check. Box и edit. Text.
Это ID, которые им были присвоены автоматически. Пока оставим их такими, позднее научимся их менять и будем делать более осмысленными.
Теперь изменим надписи на компонентах нашего экрана. Во вкладке Component Tree жмем на text. View. Теперь нам нужна вкладка Properties. Она отображает свойства выделенного в Component Tree или на экране View элемента. Располагается она обычно сразу под Component Tree. Найдем во вкладке Properties свойство text. Сейчас там стоит ссылка на текстовую константу. Напишем сюда свой текст: «Some text»
Аналогично измените свойство text для элементов button, check. Box и edit. Text на свои придуманные тексты (можно на русском языке). Вся эта конфигурация экрана сохранится в файле activity_main. xml.
Запуск приложения Теперь давайте запустим приложение.
Написание кода Мы попросили создать Activity и среда разработки создала нам соответствующий класс. Посмотрим этот класс: откроем двойным кликом файл: java. . . Main. Activity. java
Смотрим java-код. Нас интересует метод on. Create – он вызывается, когда приложение создает и отображает Activity Посмотрим код реализации on. Create. Нас сейчас интересует строка: set. Content. View(R. layout. activity_main); Метод set. Content. View(int) устанавливает содержимое Activity из layout-файла. Но в качестве аргумента мы указываем не путь к layout-файлу (res/layout/activity_main. xml), а константу, которая является ID файла. Это константа генерируется автоматически в классе R. java. В этом классе будут храниться сгенерированные ID для всех ресурсов проекта (из папки res/*), чтобы мы могли к ним обращаться. Имена этих ID-констант совпадают с именами файлов ресурсов (без расширений).
Предположим, что у нас есть Activity с двумя кнопками Ok и Cancel и Text. View Мы сделаем так, чтобы по нажатию кнопки менялось содержимое Text. View. По нажатию кнопки OK – будем выводить текст: «Нажата кнопка ОК» , по нажатию Cancel – «Нажата кнопка Cancel» . Открываем Main. Activity. java. Описание объектов вынесем за пределы метода on. Create. Это сделано для того, чтобы мы могли из любого метода обращаться к ним. В on. Create мы эти объекты заполним с помощью уже пройденного нами метода find. View. By. Id. В итоге должен получиться такой код:
Чтобы обратиться к элементу экрана из кода, нам нужен его ID. Он прописывается либо в Properties, либо в layout-файлах, как вам удобнее. Для ID существует четкий формат - @+id/name, где + означает, что это новый ресурс и он должен добавиться в R. java класс, если он там еще не существует
Для того, чтобы обратиться к элементу View из кода, надо вызвать метод find. View. By. Id. Он по ID возвращает View. Давайте напишем вызов этого метода. Напомню, что пока мы пишем наш код в методе on. Create. Это метод, который вызывается при создании Activity Откроем Main. Activity. java и после строки с вызовом метода set. Content. View напишем: View my. Text. View = find. View. By. Id(R. id. my. Text); Если View подчеркнуто красным, то скорей всего этот класс не добавлен в секцию import. Нажмите CTRL+SHIFT+O для автоматического обновления импорта. Теперь my. Text. View (типа View) – это наш Text. View на экране. Но тип View – это предок для Text. View (и остальных View-элементов). И он нам не подходит, если мы хотим проделывать операции соответствующие Text. View. Поэтому нам необходимо преобразование View в Text. View. Изменим наш код на следующий: Text. View my. Text. View = (Text. View) find. View. By. Id(R. id. my. Text); Теперь my. Text. View имеет тип Text. View, а результат метода find. View. By. Id мы преобразуем из View в Text. View. Теперь мы можем применять к my. Text. View методы класса Text. View. Для примера возьмем метод set. Text. Сейчас отображаемый текст = Hello World, Main. Activity!. Мы его программно поменяем на New text in Text. View my. Text. View. set. Text("New text in Text. View"); Сохраняем, запускаем и видим, что текст изменился
• Открываем Main. Activity. java. Описание объектов вынесем за пределы метода on. Create. Это сделано для того, чтобы мы могли из любого метода обращаться к ним. В on. Create мы эти объекты заполним с помощью уже известного нами метода find. View. By. Id. В итоге должен получиться такой код:
Научим кнопку реагировать на нажатие. Для этого у кнопки есть метод set. On. Click. Listener (View. On. Click. Listener l). На вход подается объект с интерфейсом View. On. Click. Listener. Именно этому объекту кнопка поручит обрабатывать нажатия. Давайте создадим такой объект. Код продолжаем писать в on. Create: On. Click. Listener ocl. Btn. Ok = new On. Click. Listener() { @Override public void on. Click(View v) { // TODO Auto-generated method stub } }; On. Click. Listener подчеркивается красной линией, т. к. пока не знает его. Необходимо обновить секцию import. Жмем CTRL+SHIFT+O, Нам показано, что имеется два интерфейса с именем on. Click. Listener и предлагает выбрать. Нам нужен View. On. Click. Listener, т. к. метод кнопки set. On. Click. Listener принимает на вход именно его.
Итак, мы создали объект ocl. Btn. Ok, который реализует интерфейс View. On. Click. Listener. Объект содержит метод on. Click – это как раз то, что нам нужно. Именно этот метод будет вызван при нажатии кнопки. Мы решили, что по нажатию будем выводить текст: «Нажата кнопка ОК» в Text. View (tv. Out). Реализуем это. В методе on. Click пишем: tv. Out. set. Text("Нажата кнопка ОК"); Обработчик нажатия готов. Осталось связать его с кнопкой с помощью метода set. On. Click. Listener. btn. Ok. set. On. Click. Listener(ocl. Btn. Ok);
В итоге должен получится такой код: public class Main. Activity extends Activity { Text. View tv. Out; Button btn. Ok; Button btn. Cancel; /** Called when the activity is first created. */ @Override public void on. Create(Bundle saved. Instance. State) { super. on. Create(saved. Instance. State); set. Content. View(R. layout. main); // найдем View-элементы tv. Out = (Text. View) find. View. By. Id(R. id. tv. Out); btn. Ok = (Button) find. View. By. Id(R. id. btn. Ok); btn. Cancel = (Button) find. View. By. Id(R. id. btn. Cancel);
// создаем обработчик нажатия On. Click. Listener ocl. Btn. Ok = new On. Click. Listener() { @Override public void on. Click(View v) { // Меняем текст в Text. View (tv. Out) tv. Out. set. Text("Нажата кнопка ОК"); } }; // присвоим обработчик кнопке OK (btn. Ok) btn. Ok. set. On. Click. Listener(ocl. Btn. Ok); } } Все сохраняем и запускаем. Жмем на кнопку ОК и видим, что текст изменился
Нажатие на Cancel пока ни к чему не приводит, т. к. для нее мы обработчик не создали и не присвоили. Давайте сделаем это аналогично, как для кнопки OK. Сначала мы создаем обработчик: On. Click. Listener ocl. Btn. Cancel = new On. Click. Listener() { @Override public void on. Click(View v) { // Меняем текст в Text. View (tv. Out) tv. Out. set. Text("Нажата кнопка Cancel"); } }; Потом присваиваем его кнопке: btn. Cancel. set. On. Click. Listener(ocl. Btn. Cancel); Сохраняем, запускаем, проверяем. Обе кнопки теперь умеют обрабатывать нажатия.
Еще раз повторим механизм обработки событий на примере нажатия кнопки. Сама кнопка обрабатывать нажатия не умеет, ей нужен обработчик (его также называют слушателем - listener), который присваивается с помощью метода set. On. Click. Listener. Когда на кнопку нажимают, обработчик реагирует и выполняет код из метода on. Click. Это можно изобразить так:
Соответственно для реализации необходимо выполнить следующие шаги: - создаем обработчик - заполняем метод on. Click - присваиваем обработчик кнопке и система обработки событий готова.
Razrabotka_prilozheniy_dlya_OS_Android.pptx