Статья Обзор современных средств для разработки мобильных приложений. Автор: Забавина Анна Александровна

Автор: Забавина Анна Александровна
В данной статье рассматриваются общие понятия разработки мобильных приложений, плюсы и минусы нативной разработки, особенности мобильной разработки под  Android, преимущества приложений для Android, а также сравнительный анализ мобильных операциооных систем и современных средств для разработки мобильных приложений.

 

 

 

 


Автор: Забавина Анна Александровна
Программирование под ОС Андроид
Начало работы с Android
Введение в платформу Android
Бурное развитие информационных технологий в последнее время привело к тому, что появилось много новых устройств и технологий, таких, как планшеты, смартфоны, нетбуки, другие гаджеты. Они все более прочно входят в нашу жизнь и становятся привычным делом. Лидирующей платформой среди подобных гаджетов на сегодняшний день является ОС Андроид.
Android используется на самых разных устройствах. Это и смартфоны, и планшеты, и телевизоры, и смарт-часы и ряд других гаджетов. По разным подсчетам за 2017 год этой операционой системой пользуются около 85% владельцев смартфонов, а общее количество пользователей сматрфонов на ОС Android оценивается в 1,5 млрд. человек по всему миру.
Установка средств разработки
Java
В первую очередь для создания приложений загрузим и установим пакет JDK 8, который необходим для разработки на языке Java. JDK 8 можно найти на сайте компании Oracle:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Установка Android Studio
Существуют разные среды разработки для Android. Можно использовать для разработки такие среды как NetBeans, Eclipse, Visual Studio. Рекомендуемой средой разработки являетсяAndroid Studio.
Настройка Android SD
Все, что мы делаем на Android с помоью Java, зависит от Android SDK - если мы создаем приложение под определенную версию, например, для Android Nougat, то у нас должны быть установлены соответствующие иструменты SDK. Это надо учитывать при разработке.
Откроем Android Studio. По умолчанию, если мы запускаем программу в первый раз, то нам открывается некоторое начальное меню. В самом низу стартового экрана программы найдем кнопку "Configure" и нажмем на нее:
Далее в выпадающем меню нажмем на пункт "SDK Manager". После этого откроется окно с настройками для Android SDK Manager:
Для более детального просмотра всех компонентов по каждой платформе нажмем внизу окна на ссылкуShow Package Details.
Здесь мы детально можем посмотреть, какие пакеты для каждой платформы установлены. Все компоненты сгруппированы по определенной версии SDK, например, Android API 27, Android 8.0 (Oreo), Android 7.1.1 (Nougat) и так далее. Каждая версия SDK фактически представляет определенную версию или подверсию ОС Android. Но каждая версия SDK предполагает широкий круг компонентов, это в том числе и инструменты для разработки под телевизоры, под смарт-часы и т.д. Не все эти инструменты могут понадобиться, поэтому нет смысла все версии SDK абсолютно полностью устанавливать.
В данном случае нас прежде всего будет интересовать пунктAndroid SDK Platform. Android SDK Platform содержит весь основной функционал, который используется при разработке. Данный пункт можно выделить для всех тех платформ, под которые мы собираемся компилировать приложение. В частности, рекомендую выбрать последние платформы - Android 8.0/7.1, а также те, которые будут использоваться в качестве минимальных платформ, например, Android 5.0 / 5.1.
Кроме SDK Platform каждая платформы, как правило, содержит еще ряд компонентов, которые предназначены для тестирования приложения на эмуляторе:
Android TV Intel x86 Atom System Image
Android Wear Intel x86 Atom System Image
Google APIs Intel x86 Atom System Image
Google Play Intel x86 Atom System Image
Для более ранних платформ список компонентов может отличаться.
Если не планируется использование эмулятора, то данные компоненты не столь важны. И наоборот, если тестирование будет происходить на эмуляторе, то следует установить для этого образ системыGoogle APIs Intel x86 Atom System ImageилиGoogle Play Intel x86 Atom System Image.
Далее в этом же окне перейдем на вкладкуSDK Tools. Здесь перечислены дополнительные пакеты:
Здесь для нас прежде всего важны такие пакеты как:
Android Support Repository
Android Support Library
Google Play Services
Google Repository
Google Usb Driver
Эти пакеты устанавливают репозитории android и сервисы google play. Кроме того, если вы хотите использовать для тестирования приложений смартфон от Google - Nexus 5/5X и 6/6P или Google Pixel, то обязательно надо установить пакетGoogle Usb Driver, который представляет драйвер для работы с данными смартфонами. Если же предполагается использовать смартфон другого производителя, то в этом случае надо будет установить USB-драйвер непосредственно от этого производителя. Как правило, при подключении смартфона система сама пытается установить драйвер.
Если планируется использование эмулятора, то также следует установить пакетIntel x86 Emulator Accelerator (HAXM installer).
И если в процессе разработки или тестирования будут возникать проблемы с какими-то версиями ОС Android, то вполне вероятно корень проблем заключается в отсутствии нужных компонентов для определенных платформ. В этом случае можно будет из Android Studio запустить SDK Manager и вручную установить недостающие компоненты.
Впоследствии при каждом запуске Android Studio будут появляться всплывающие уведомления о доступности обновлений по платформам, что довольно удобно и что позволит проектам не отставать от последних обновлений от Google.
Если впоследствии нам потребуется вызвать SDK Manager, то мы можем сделать это из самой Android Sudio через панель инструментов:
Android Studio и создание первого проекта
Теперь создадим первое приложение в среде Android Studio для операционной системы Android. Откроем Android Studio и на начальном экране выберем пунктStart new Android Project:
(Если Android Studio уже запускалась, то в меню надо выбрать пунктFile -> New-> New Project...). После этого отобразится диалоговое окно создания нового проекта:
В окне создания нового проекта мы можем установить его начальные настройки:
В полеApplication Nameвводится название приложения. Укажем в качестве имени названиеHelloApplication
В полеCompany Domainуказывается домен приложения или тот пакет классов, где будет размещаться главный класс приложения. Лучше также сразу задать какое-нибудь свое значение в поле Company Domain. Дело в том, что когда вы будете размещать приложение в магазине Google Play, то значение для этого поля должно быть уникальным для всего магазина. Хотя для тестовых проектов, как в данном случае, можно оставить в этом поле значение по умолчанию.
В полеProject Locationможно установить расположение файлов проекта на жестком диске
Далее нажмем на кнопку Next и перейдем к следующему шагу:
На этом шаге будет предложено установить минимальную поддерживаемую версию проекта. По умолчанию устанавливается версия Android 4.1, что покрывает более 95% устройств Android. Оставим по умолчанию и нажмем на кнопку Next.
На следующем шаге надо выбрать шаблон проекта:
Android Studio предоставляет ряд шаблонов для различных ситуаций, но самыми распространенными являютсяBasic ActivityиEmpty Activity. Это самые удобные шаблоны для старта для создания большинства приложений. В данном случае мы выберем шаблонEmpty Activity.
При выборе Empty Activity на следующем шаге надо установить ряд настроек проекта:
Activity Name: название главного класса приложения
Layout Name: название файла xml, в котором будет храниться определение визуального интерфейса
Generate Layout File: надо ли генерировать файл xml с определением визуального интерфейса
Backwards Compatibility (AppCompat): в отмеченном состоянии позволяет установить обратную зависимость между различными версиями Android
Оставим все настройки по умолчанию и нажмем на кнопку Finish. И через некоторое время Android Studio создаст и откроет проект:
Структура проекта
После создания проекта структура проекта Android отображается в следующем виде:
Проект Android может состоять из различных модулей. По умолчанию, когда мы создаем проект, создается один модуль -app. Модуль имеет три подпапки:
manifests: хранит файл манифеста AndroidManifest.xml, который определяет конфигурацию
java: хранит файлы кода на языке java, которые структурированы по отдельным пакетам
res: содержит используемые в приложении ресурсы
Отдельный элементGradle Scriptsсодержит ряд скриптов gradle (как для модуля app или других возможных модулей, так и для всего проекта), которые используются при построении приложения.
Перейдем к полной структуре проекта. Для этого можно двойным щелчком нажать на название проекта. После этого проект откроется полностью:
Рассмотрим полную структуру проекта приложения под ОС Android, которая создается по умолчанию. Здесь также мы увидим единственный модуль проекта - модуль app. Собственно весь код, с которым мы будем работать, располагается внутри этого модуля.
Все модули в проекте описываются файломsetting.gradle. По умолчанию он имеет следующее содержимое:
Файлbuild.gradleсодержит информацию, которая используется при построении проекта.
Каждый модуль имеет свой файлbuild.gradle, который определяет конфгурацию построения проекта, специфичную для данного модуля. Так, если мы посмотрим на содержимое папки app, то как раз найдем в ней такой файл. На начальном этапе данные файлы не столь важны, достаточно лишь понимать, для чего они нужны.
В модулеappмы можем увидеть несколько папок и файлов, из которых для нас важнейшими являются:
каталогlibs- предназначен для хранения библиотек, используемых приложением
каталогsrc- предназначен для хранения исходного кода. Он содержит ряд подкаталогов. КаталогиandroidTestиtestпредназначены для хранения файлов тестов приложения. А собственно исходные коды располагаются в папкеmain.
Папка main имеет сложную структуру:
AndroidManifest.xmlпредставляет файл манифеста, который описывает фундаментальные характеристики приложения, его конфигурацию и определяет каждый из компонентов данного приложения.
javaсодержит исходные файлы приложения. По умолчанию в нем находится файл классаMainActivity, который запускается по умолчанию при старте приложения.
Папкаresсодержит каталоги с ресурсами. В частности, она содержит следующие каталоги:
папкаdrawableпредназначена для хранения изображений, используемых в приложении
папкаlayoutпредназначена для хранения файлов, определяющих графический интерфейс. По умолчанию здесь есть файлactivity_main.xml, который определяет интерфейс для единственной в проекте activity - MainActivity
папкиmipmap-xxxxсодержат файлы изображений, которые предназначены для создания иконки приложения при различных разрешениях экрана. И для каждого вида разрешения здесь имеется свой каталог
папкаvaluesхранит различные xml-файлы, содержащие коллекции ресурсов - различных данных, которые применяются в приложении
Первое приложение
Стандартный проект, который был создан в прошлой теме, уже содержит некоторый функционал. Правда, этот функционал почти ничего не делает, только выводит на экран строку "Hello world!".
В студии по умолчанию должен быть открыт файлactivity_main.xml, который содержит определение графического интерфейса приложения.
Если файл открыт в режиме дизайнера, а в центре Android Studio отображается дизайн приложения, то нам надо переключить вид файла в текстовый. Для переключения режима - из текстового в графический и обратно внизу есть две кнопки Design и Text.
Теперь изменим код приложения, чтобы оно выводило на экран строку "Привет Андроид". Для этого изменим код в файлеactivity_main.xml, который сейчас выглядит примерно так:
Изменим в этом файле определение элемента TextView, который и отвечает за вывод текстовой информации на экран мобильного аппарата. Сам выводимый текст задается с помощью атрибутаandroid:text. Поэтому изменим весь код в файлеactivity_main.xmlследующим образом:
После сохранения файла мы можем переключиться к графическому виду и увидим, что графический дизайнер автоматически обновится и будет выводить уже строку, которую мы только что определили.
Режим разработчика на телефоне
Для запуска и тестирования приложения мы можем использовать эмуляторы или реальные устройства. Но в идеале лучше тестировать на реальных устройствах.
Для использования мобильного устройства для тестирования на рабочую машину необходимо установить драйвер. Если смартфон от Google - Nexus 5/6/5x/6P или Google Pixel, то для его поддержки необходимо через SDK Manager установить пакетGoogle Usb Driver. Если же производитель аппарата - другой вендор, то надо установить то USB-драйвер, который поставляется данным вендором. Если ОС - Windows 10, то там, как правило, система сама может найти через центр обновлений драйвер и установить его.
По умолчанию опции разработчика на смартфонах скрыты. Чтобы сделать их доступными, надо зайти вSettings > About phone (Настройки > О телефоне)и семь раз нажатьBuild Number (Номер сборки).
Вернитесь к предыдущему экрану и там вы увидите доступный пунктDeveloper options (Для разработчика).
Перейдем к пунктуДля разработчикови включим возможность отладки по USB:
Запуск приложения
Подключим устройство с ОС Android (если мы тестируем на реальном устройстве) и запустим проект, нажав на зеленую стрелочку на панели инструментов.
Затем начнется построение проекта. Данный процесс может занять некоторое время, после чего отобразится диалоговое окно для выбора устройства для запуска. Здесь мы можем выбрать подключенный к компьютеру гаджет, либо эмулятор:
Выберем устройство и нажмем на кнопку OK. И после запуска мы увидим наше приложение на экране устройства:
Класс Activity и ресурсы
В прошлой теме мы рассмотрели создание простейшего приложения, изменили содержимое файла activity_main.xml и вывели на экран строку. Однако мы еще не говорили, как файл activity_main.xml связан с графическим интерфейсом. Поэтому рассмотрим класс Activity и файлы ресурсов, которые определяют визуальный интерфейс.
Activity является классом, который по сути представляет отдельный экран (страницу) приложения или его визуальный интерфейс. Отдельные activity, которые уже непосредственно используются в приложении, являются наследниками этого класса. Приложение может иметь одну activity, а может и несколько. Каждая отдельная activity задает отдельное окно для отображения.
Рассмотрим код Activity, использованной в прошлой теме, код которой генерируется автоматически в Android Studio (файл кода можно найти в проекте в папкеsrc/main/java):
Класс MainActivity представляет обычный класс java, в начале которого идут определения пакета и импорта внешних пакетов. По умолчанию он содержит только один методonCreate(), в котором фактически и создается весь интерфейс приложения.
В методеOnCreate()идет обращение к методу родительского класса и установка ресурса разметки дизайна:
Впоследствии мы подробнее рассмотрим все эти выражения, а пока достаточно понимать, для чего они нужны. И в итоге получается примерно следующий визуальный интерфейс:
Чтобы установить ресурс разметки дизайна, вызывется метод setContentView, в который передается идентификатор ресурса.
Обратите внимание на то, как выглядит идентификатор ресурса:R.layout.activity_main. Фактически это и есть ссылка на файлactivity_main.xml, который находится в каталогеres/layout:
Весь интерфейс представлен элементом-контейнеромRelativeLayout, который содержит один компонент - текстовое поле TextView. Текстовое поле устанавливает текст с помощью атрибутаandroid:text.
Таким образом, при запуске приложения сначала запускается класс MainActivity, который в качестве графического интерфейса устанавливает разметку из файла activity_main.xml.
Однако в классе MainActivity мы используем не файлы, а идентификаторы ресурсов:R.layout.activity_main.
Все идентификаторы ресурсов определены в классеR, который автоматически создается утилитойapptи находится в файлеR.javaв каталогеbuild/generated/source/r/debug:
КлассRсодержит идентификаторы для всех ресурсов, расположенных в каталогеres. Для каждого типа ресурсов в классе R создается внутренний класс (например, для всех графических ресурсов из каталогаres/drawableсоздается классR.drawable) и для каждого ресурса данного типа присваивается идентификатор. По этому идентификатору впоследствии можно извлечь ресурс в файле кода.
При обновлении ресурсов во время компиляции этот файл также обновляется.
Например, по умолчанию есть ресурс разметки интерфейсаactivity_main.xml, который передается через идентификаторR.layout.activity_main. Но если мы добавим в папку res/layout новый ресурс разметки, например,my_layout.xml, то класс R автоматически перекомпилируется, и мы сможем сразу же использовать этот ресурс:setContentView(R.layout.my_layout);
Создание графического приложения
Графический интерфейс пользователя основывается на иерархии объектовViewиViewGroup. ОбъектыViewпредставляют виджеты, такие как кнопки или текстовые поля. ОбъектыViewGroupпредставляют собой контейнеры для виждетов, управляют их расположением и компоновкой.
Итак, создадим новый проект приложения по тому способу, который мы использовали ранее. Либо используем предыдущий проект.
Создание линейной разметки
Выбранный при создании проекта для activity шаблон EmptyActivity добавляет все определение графического интерфейса в файлactivity_main.xml, которые находятся в проекте в папкеres/layout, поэтому изменим файл activity_main.xml следующим образом:
Здесь определяется элементLinearLayout, который является подклассом ViewGroup и который располагает дочерние элементы в горизонтальный или вертикальный ряд. Ориентация элементов указывается в атрибутеandroid:orientation. Каждый элемент в контейнере LinearLayout отображается на экране в том порядке, в каком он объявлен в файле XML.
Другие два атрибута -android:layout_widthиandroid:layout_heightтребуются для всех виджетов для определения размеров. ПосколькуLinearLayoutявляется корневым элементом компоновки, он должен заполнить все пространство экрана, поэтому для его высоты и ширины указывается значение "match_parent". Данное значение растягивает виджет до границ родителького контейнера.
Добавление текстового поля
Для добавления текстового поля внутри элементаLinearLayoutсоздадим элементEditText. Как и для любого объекта View, дляEditTextтакже надо объявить определенные xml-атрибуты:
Итак, мы определили следующие атрибуты:
android:id: обеспечивает уникальный идентификатор виджета, по которому мы можем ссылаться на объект
Знак (@) для ссылки на ссылочный объект в файле XML. После него идет тип ресурса (в данном случаеid), слеш и затем имя ресурса (edit_message).
Знак плюса (+) перед типом ресурса необходимо, когда в первый раз определяется ID ресурса. При компиляции приложения SDK использует имя ID для создания нового ресурса ID в файлеgen/R.java. После этого больше не требуется употреблять знак плюса.
android:layout_widthиandroid:layout_height: для этих свойств устнавливаем значениеwrap_content, которое задаст для виджетов величины, достаточные для отображения в контейнере
android:layout_weight: позволяет определить занимаемую полем ширину. Значение 1 в данном случае позволяет растянуть поле на всю ширину.
android:hint: указывает на текст, который будет отображаться в текстовом поле по умолчанию, когда оно пустое.
Добавление кнопки
Теперь добавим в файл activity_main.xml кнопку - элементButtonсразу после элементаEditText:
В случае с кнопкой ее высота и ширина также имеют значениеwrap_content, поэтому кнопка будет иметь те размеры, которые достаточны для вывода на ней ее текста. Для кнопки не нужно указывать атрибутandroid:id, поскольку мы не будем на нее ссылаться в коде MainActivity
В итоге файл будет иметь следующий вид:
И на данный момент приложение будет иметь следующий интерфейс:
Запуск второй Activity
В предыдущей теме мы создали приложение с использованием визуальных элементов: добавили к activity текстовое поле для ввода сообщения и кнопку. Теперь продолжим предыдущий проект и добавим запуск новой activity по нажатию на кнопку.
Обработка нажатия кнопки
Для подключения обработчика кнопки откроем файлactivity_main.xmlи добавим в элементButtonатрибутandroid:onClick:
Значение "sendMessage", присвоенное атрибутуandroid:onClick, представляет собой имя метода, определенного в классе activity, который вызывает система при нажатии пользователем на кнопку. Далее мы определим этот метод.
Создание объекта Intent
Затем перейдем к классу MainActivity, который находится в проекте в папкеapp/src/main/java/[название_пакета], и изменим этот класс следующим образом:
Здесь как раз и добавлен методsendMessage(), который будет вызываться по нажатию на кнопку. Обработчик нажатия кнопки должен принимать в качестве параметра объект View, который представляет саму нажатую кнопку:
Далее для запуска второй activity необходим объектIntent. ОбъектIntentпредставляет некоторую задачу приложения, которую надо выполнить (например, запуск activity):
Конструктор этого объекта принимает два параметра:
Первый параметр представляет контекст - объектContext(ключевое словоthisупотребляется здесь, так как классMainActivityявляется подклассом классаContext)
Вторым параметром идет класс компонента, которому мы передаем объект Intent. В качестве него будет выступать объект DisplayMessageActivity, который мы создадим чуть позже
Внутри методаsendMessage()используем методfindViewById, чтобы получить элементEditTextи передать значение его текста в объектintent:
Затем полученный из текстового поля текст передается в запускаемую activity:
Параметр "EXTRA_MESSAGE" указывает на ключ передаваемых данных. То есть мы можем в новую activity передать множество данных, и чтобы их можно было разграничить, для них устанавливается ключ. В данном случае ключ EXTRA_MESSAGE - эта обычная строка "EXTRA_MESSAGE":
Для запуска activity нужно вызвать методstartActivity()и передать ему в качестве параметра объектIntent:
После вызова этого метода система получит сигнал и запустит новый объектActivity, определенный объектомIntent.
Создание второго объекта Activity
Теперь добавим саму новую activity -DisplayMessageActivity. Для этого нажмем правой кнопкой мыши в структуре проекта на папку пакета, в котором находится класс MainActivity, и затем в контекстном меню выберемNew->Activity->Empty Activity:
После этого откроется диалоговое окно создания новой activity:
В этом окне введем следующие данные:
Activity Name:DisplayMessageActivity
Layout Name:activity_display_message
И затем нажмем Finish.
Итак, у нас была создана новая activity: в папкуapp/src/main/java/[название_пакета]добавляется новый классDisplayMessageActivity, а в каталогapp/src/main/res/layoutфайлactivity_display_message.xmlс определением интерфейса для новой activity.
Откроем класс DisplayMessageActivity и изменим его следующим образом:
Также, как и в MainActivity (и в других activity), создание текущей activity происходит в методеonCreate(). Все подклассы Activity должны реализовать методonCreate, так как система вызывает его при создании новой activity. Именно в этом методе задается компоновка нового объекта activity с помощью методаsetContentViewи именно здесь происходит начальная настройка компонентов.
Вывод сообщения на экран
Итак, как мы помним, вначале мы передавали из нашей первой и главной activity в DisplayMessageActivity текстовое сообщение, которое было введено в текстовое поле. Теперь получим его в DisplayMessageActivity и выведем на экран
Каждый объектActivityвызывается объектомIntent. Мы можем получить вызывающий объектIntentс помощью методаgetIntentи, таким образом, получить переданные с ним данные.
Для вывода сообщения на экран создадим виджетTextViewи с помощью его свойстваsetTextустановим его текст. А затем добавим новый виджет в DisplayMessageActivity при помощи методаsetContentView.
После запуска приложения на эмуляторе мы увидим опять же текстовое поле с кнопкой, но после ввода текста и нажатия на кнопку будет запущена новая activity и отобразится другой экран с введенным ранее в текстовое поле сообщением.
Скачать работу
comments powered by HyperComments
Пожалуйста, подождите.
x