DOI: 10.24412/2413-2527-2021-226-19-25
Разработка клиент-серверного Java-приложения на платформе Android для контроля пребывания студента в вузе
Н. Д. Дергунов, к.т.н. Г. И. Кожомбердиева, к.т.н. Д. П. Бураков Петербургский государственный университет путей сообщений Императора Александра I
Санкт-Петербург, Россия piculiwar@gmail.com, kgi-liizht@yandex.ru, burakovdmitry8@gmail.com
Аннотация. В статье кратко обсуждаются особенности функционирования мобильных приложений на платформе Android и их разработки с использованием языка программирования Java. Описываются особенности виртуальной машины среды выполнения Android, содержимое архива мобильного приложения, жизненный цикл объектов Activity, обеспечивающих выполнение приложения, а также базовые классы Google Android API, предоставляющие методы сетевого взаимодействия и геолокации. В качестве примера приложения, функциональность которого лежит в русле современных тенденций создания программ для мобильных устройств, в статье представлено клиент-серверное Java-при-ложение для контроля пребывания студента в вузе в учебное время. Отмечается возможность использования мобильных приложений для решения сходных задач на транспорте.
Ключевые слова: Android, Dalvik, Java, мобильное приложение, клиент-серверное приложение, жизненный цикл Activity, геолокация.
Введение
В последнее десятилетие в области программной инженерии наблюдается уверенная тенденция, связанная с переносом программных продуктов на мобильные платформы. Поскольку мобильные устройства широко доступны и имеются практически у каждого, конечный пользователь все больше отдаляется от персональных компьютеров и переходит на сторону мобильных устройств. В результате в настоящее время мобильные приложения активно используются не только для развлечения, но и для решения насущных задач бизнеса: так, например, работа курьеров службы доставки «Яндекс.Еда» полностью обеспечивается использованием соответствующего приложения для смартфонов. К преимуществам смартфонов как средств для исполнения приложений относится не только их компактность, совмещенная с вычислительной мощностью, сопоставимой с мощностью персонального компьютера, но и тот факт, что они всегда находятся там, где находится пользователь приложения. Данное обстоятельство может иметь решающее значение для приложений, логика работы которых ориентирована на использование сведений о местоположении пользователя.
В настоящей статье кратко рассматриваются особенности функционирования и разработки приложений для мобильных устройств, работающих под управлением операционной системы (ОС) Android. Поскольку по состоянию на январь 2021 года более 70 % мобильных устройств работает именно на этой платформе [1], создание приложений для Android является востребованным.
Основой среды выполнения приложений на платформе Android изначально является реализация виртуальной машины Java (Java Virtual Machine, JVM), чем обусловлено использование языка программирования Java при создании программ для Android. Несмотря на продвижение в последнее время компанией Google языка Kotlin, работающего поверх JVM, говорить о вытеснении языка Java из области разработки мобильных приложений было бы преждевременно.
В качестве примера приложения, функциональность которого лежит в русле современных тенденций создания программ для мобильных устройств, в статье представлено клиент-серверное Java-приложение, позволяющее автоматизировать процесс контроля пребывания студента в вузе в учебное время на основе геолокационных данных, предоставляемых мобильным устройством студента.
Статья содержит результаты выпускной квалификационной бакалаврской работы Н. Д. Дергунова. Приложение разработано в среде разработки Android Studio с использованием сервера Apache Tomcat, СУБД PostgreSQL и может рассматриваться как действующий прототип реальной системы.
Среда выполнения приложений для платформы Android
Приложения для платформы Android пишутся с использованием языков программирования Java и Kotlin, причем Kotlin представляет собой, по мнению разработчиков этого языка, усовершенствованный вариант Java. Вследствие этого для исполнения мобильных приложений платформа Android предоставляет среду выполнения Android Runtime (ART) с реализацией виртуальной машины Java. Среда выполнения ART пришла на смену применявшейся ранее специализированной виртуальной Java-машине Dalvik, которая использовала перекомпиляцию байт-кода приложения в машинные команды устройства во время выполнения приложения (JIT-компиляция). В отличие от нее ART перекомпилирует байт-код приложения в машинные команды во время его установки на устройство. Это позволило ускорить запуск и выполнение приложений, переключение между ними и освободить больше оперативной памяти. При этом ART обеспечивает обратную совместимость с Dalvik [2].
Несмотря на то, что Dalvik и ART являются виртуальными машинами Java, они отличаются от стандартной JVM, использующей для выполнения арифметических и логических операций специальный операционный стек.
В ART и Dalvik для этого используются регистры процессора. Размер кода в ART увеличивается, так как операнды должны включаться в состав самой инструкции, но производительность устройства при таком способе кодирования команд повышается, что является существенным плюсом из-за ограниченной вычислительной мощности мобильных устройств [3].
Состав архива мобильного приложения для Android
Приложения для платформы Android распространяются в виде специальных подписанных архивов Android Package (APK), аналогичных подобным архивам для других систем (APPX для Microsoft Windows, DEB для ОС Linux, основанных на Debian) и JAR-архивов, используемых для распространения Java-приложений. APK-файл формируется автоматически на этапе сборки приложения в Android Studio [4]. Он содержит скомпилированный байт-код классов приложения в формате Dalvik executable (в виде файлов *.dex), а также дополнительные данные — ресурсы приложения и его описание (манифест).
Архив APK включает в себя следующие папки и файлы:
• Папка META-INF, содержащая файлы:
- MANIFEST.MF — файл описания архива (Java-мани-фест);
- <name>.SF — файл подписи со списком хеш-значений соответствующих записей из файла MANIFEST.MF;
- <name>.DSA (или RSA) — файл блока подписи приложения, включающий сертификат открытого ключа, парный закрытый ключ которого использовался при создании подписи.
• Папка lib, содержащая код библиотек Android, используемых приложением, в зависимом от платформы скомпилированном виде.
• Папка res, содержащая ресурсы приложения, которые не были скомпилированы в файл resources.arsc.
• Папка assets, содержащая активы, которые приложение может получить в процессе своей работы с помощью объекта AssetManager.
• Файл AndroidManifest.xml — дополнительный файл манифеста ОС Android, описывает имя приложения, его версию, права доступа и библиотеки ОС Android, используемые в приложении.
• classes.dex — классы приложения, скомпилированные в формате DEX, используемые ART;
• resources.arsc — файл, содержащий предкомпилиро-ванные ресурсы.
Выполнение приложений на платформе Android
Для работы мобильного приложения и его взаимодействия с сервисами ОС предоставляются специальные классы Google Android API. Для реализации необходимой функциональности приложение создает объекты требуемых классов. Базовые классы, предоставляемые Google Android API для использования в мобильных приложениях:
• View — базовый класс всех компонентов пользовательского интерфейса. Интерфейс Android образуется потомками этого класса.
• Activity — базовый класс, содержащий логику взаимодействия с компонентами пользовательского интерфейса некоторого окна приложения (производным классам обычно принято давать название <screen>Activity.java, где
<screen> — название окна или экрана, поведением которого управляет этот класс).
• ContentProvider — класс, предназначенный для работы с моделями данных, чаще всего — с СУБД SQLite.
• Service — класс, предназначенный для создания сервисов, то есть действий, которые должны выполняться в фоновых потоках приложения.
• Intent — класс, используемый для создания объектов сообщений, которые используются для запроса действий от других компонентов приложения. В частности, он может быть использован для запуска Activity и передачи информации службам.
• BroadcastReceiver — класс, который получает и отправляет объекты Intent [5].
Классы типа Activity — это классы активного окна приложения. Каждый такой класс описывает логику пользовательского интерфейса некоторого окна приложения. Классы Activity приложения создаются как производные от класса Activity, предоставляемого Google Android API. Объекты типа Activity взаимодействуют с пользователем и создают окна, в которых разработчик размещает свой пользовательский интерфейс с помощью метода setCon-tentView(). Чаще всего объекты Activity представляют собой полноэкранные окна, но их также можно использовать и другими способами: всплывающие окна, многоэкранный режим или встроенное окно [6].
Выполнение приложения начинается с создания и запуска первого объекта Activity, класс которого отмечен специальным образом в файле AndroidManifest.xml. Этот объект Activity последовательно, в соответствии с логикой работы приложения и действиями пользователя, может передавать управление другим объектам Activity, вызывая их путем направления ОС соответствующего уведомления типа Intent. Каждый объект Activity в процессе своего существования обладает собственным жизненным циклом. Приложение выполняется, пока не завершены жизненные циклы всех объектов Activity.
Жизненный цикл объекта типа Activity жестко контролируется системой и зависит от доступных ресурсов, нужд пользователя и т. д. При работе с определенным окном система дает приоритет тому приложению, которое с ним ассоциировано. И наоборот, если пользователь не работает с окном приложения в течение определенного периода времени, система приостанавливает владеющее им приложение, чтобы освободить занятые им ресурсы. Так как Android — операционная система, разработанная специально для мобильных устройств, вычислительные и энергетические ресурсы которых ограничены, она жестко контролирует работу приложений [6, 7].
Перечислим методы жизненного цикла Activity как основной функциональной составляющей приложения:
• onCreate() — вызывается при создании (запуске) данного объекта Activity. В этом методе создаются статические элементы, загружаются и инициализируются элементы графического интерфейса, связываются данные с элементами управления и т. д. В этом методе разработчику не следует прописывать процесс долгой инициализации — это может привести к ошибке.
• onStart() — вызывается системой вслед за onCreate(), в этом методе выполняются действия, которые Activity
производит перед показом пользователю экрана, с которым этот объект ассоциирован.
• onRestart() — вызывается, если окно получит приоритет после вызова метода onStop(). Используется для специальных действий, которые нужно выполнить после повторного запуска Activity.
• onResume() — вызывается после onStart(). В этот момент пользователь взаимодействует с этим окном и ему передается приоритет. В нем можно запускать анимацию, видео и т. д.
• onPause() — вызывается, когда пользователь начинает работу с другим окном. Сохраняет незафиксированные данные, освобождает ресурсы.
• onStop() — вызывается при уничтожении окна или при переходе пользователя к другому окну. Остановленные объекты Activity хранятся в памяти и восстанавливаются при запуске. В этом методе выполняют сложные операции по сохранению данных.
• onDestroy() — вызывается по окончании работы Activity, при вызове метода finish() или в случае, когда система уничтожает данный экземпляр Activity для освобождения ресурсов.
Диаграмма, иллюстрирующая состояния объекта типа Activity в процессе работы мобильного приложения и возможные переходы между ними, приведена на рисунке 1.
Рис. 1. Диаграмма состояний объекта Activity
Ресурсы приложения Ресурсы приложения — это дополнительные файлы и данные, используемые в приложении, такие как строки, изображения, разметка интерфейса, цвета и т. д. Ресурсы предназначены для увеличения независимости приложения от его окружения. В частности, разработчик может указывать альтернативные наборы ресурсов, используемые приложением при его выполнении, например в средах с различными языками пользовательского интерфейса [8].
Как и файл AndroidManifest.xml, ресурсы хранятся в APK приложения в виде файлов, использующих разметку XML [9]. Одним из самых важных видов ресурсов является описание макетов окон, используемых приложением. Макет окна, ассоциированного с некоторым объектом <screen>Activity, описывается в файле с именем activ-ity_<screen>.xml, где <screen> — название этого окна. В файле макета определяются все элементы интерфейса и их свойства. Макет содержит корневой элемент, для которого все остальные элементы интерфейса являются дочерними. Описание каждого элемента интерфейса представляет собой XML-элемент, содержащий данные о его имени, содержимом, родительских элементах, нахождении на экране и т. д.
Описание пользовательского интерфейса в отдельных файлах макетов позволяет отделить его от непосредственно самого кода приложения, что обеспечивает возможность изменения описания пользовательского интерфейса без изменения кода классов Java. В файлах макетов может быть определен вид экрана для разных ориентаций устройства, различных размеров экрана, различных языков и т. д. [10].
APK-файл приложения для ОС Android должен обязательно включать в себя файл AndroidManifest.xml, содержащий всю необходимую информацию о приложении, формируемую и используемую инструментами сборки Android, ОС Android и магазином приложений Google Play. В этом файле манифеста обязательно должно быть указано:
• Название пакета приложения. Инструменты сборки Android используют эту информацию для нахождения элементов кода при сборке приложения.
• Компоненты приложения: все файлы Activity, Service, BroadcastReceiver и ContentProvider. Каждый компонент должен быть описан простейшими свойствами, такими как имя класса Java.
• Разрешения, которые требуются приложению для доступа к защищенным частям системы.
• Программные и аппаратные требования приложения [11].
Поскольку мобильные приложения, работающие в
среде Android, выполняются на личном устройстве пользователя, для использования системных функций, предоставляющих доступ к личной информации пользователя (например, доступ к записной книжке или SMS) или к устройствам смартфона (например, доступ к камере или доступ в Интернет), приложение должно, с одной стороны, явно задекларировать разрешения, которые ему необходимо получить для своей работы, а с другой стороны, явно получить эти разрешения. Каждое требуемое приложению разрешение также указывается специальной записью в файле манифеста ОС Android. Существует несколько видов прав доступа:
• Install-Time Permissions — определяют доступ приложения во время установки. Такие разрешения обычно затрагивают функции, минимально влияющие на пользователя.
• Normal Permissions — позволяют получить доступ к данным и действиям, выходящим за пределы изолированной программной среды приложения. Однако эти данные и действия представляют очень небольшой риск для конфиденциальности пользователя и работы других приложений.
• Runtime Permissions — предоставляют приложению дополнительный доступ к ограниченным данным и позволяют приложению выполнять ограниченные действия, которые более существенно влияют на систему и другие приложения. Эти разрешения приложение должно запросить во время выполнения, прежде чем оно сможет получить доступ к ограниченным данным или выполнить ограниченные действия. Когда приложение запрашивает такое разрешение во время выполнения, система выдает запрос разрешения в виде всплывающего окна.
Взаимодействие с сетью
Любое взаимодействие с сетью Интернет в современной версии Android (начиная с 3.0) должно происходить вне основного потока, обслуживающего взаимодействие
пользователя с интерфейсом приложения. Одним из способов выполнения асинхронных операций является использование объектов класса AsyncTask.
Этот класс предназначен для выполнения задач в фоновом режиме. Когда операции завершатся, он также позволяет обновлять представления в основном потоке событий. Если задача представляет собой серию повторяющихся операций, объект этого класса также может использоваться для публикации информации о прогрессе задачи во время ее выполнения [12].
Для создания собственной асинхронной операции разработчик должен создать производный класс и соответствующим образом переопределить его методы.
AsyncTask определяется тремя обобщенными параметрами: Params — тип объекта, используемого для передачи произвольных параметров задачи методу doInBackground(), Progress — тип объекта, используемый для передачи информации о прогрессе задачи, и Results — тип результата задачи. Если некоторый из этих параметров не используется, вместо него можно указать экземпляр класса Void [12]. Класс AsyncTask содержит следующие методы:
• onPreExecute() — вызывается до начала фоновой операции и используется для ее подготовки.
• doInBackground() — запускается в фоновом режиме сразу после завершения метода onPreExecute(). Разработчик определяет тип параметров, которые должны передаваться задаче и тип возвращаемого значения. В этом методе выполняются долгие и сложные операции, которые не могут выполняться в главном потоке приложения.
• onProgressUpdate() — вызывается в главном потоке и служит для оповещения о процессе выполнения фоновой задачи.
• onPostExecute() — вызывается по завершению фоновой задачи. Получает результат выполнения из метода doInBackground() и может взаимодействовать с главным потоком.
Используя объекты типа AsyncTask, разработчик может организовать клиент-серверное сетевое взаимодействие с использованием как стандартных средств Java, таких как HttpURLConnection, так и средств, предоставляемых сторонними библиотеками, например OkHttp.
Получение данных о местоположении устройства
Для получения данных о местоположении устройства Google предоставляет специальный API — Fused Location Provider API. Это геолокационный программный интерфейс, использующий сигналы разных датчиков, таких как GPS и Wi-Fi, для определения местоположения устройства. Fused Location Provider берет на себя ответственность за низкоуровневые технологии определения геолокации и предоставляет простые средства взаимодействия с ними [13].
Главная точка, через которую программа может взаимодействовать с Fused Location Provider API — это класс Fus-edLocationProviderClient [14]. Для получения и обновления данных местоположения FusedLocationProviderClient использует асинхронные операции Task [15]. Это класс, объект которого выполняет некоторую операцию. К объекту этого класса можно добавить различные приемники событий, такие как OnSuccessListener (если заданная операция
успешно выполнилась) и OnFailureListener (если заданная операция не была выполнена).
Основные методы взаимодействия с геолокационными данными, представленные в классе FusedLocationProvider-Client:
• getLastLocation() — возвращает лучшее и самое новое местоположение устройства.
• requestLocationUpdates() — запрашивает обновления геолокации.
• removeLocationUpdates() — останавливает обновления геолокации.
Инициализация экземпляра этого класса производится путем получения результата работы метода getFusedLoca-tionProviderClient() класса LocationServices, который является частью Google Mobile Services. Для добавления в приложение функциональности получения геолокации разработчик должен реализовать обработку процесса и результата выполнений операций типа Task, созданных выполнением методов класса FusedLocationProviderClient.
Клиент-серверное приложение для контроля пребывания студента в вузе в учебное время
В качестве примера использования рассмотренных выше средств, предоставляемых платформой Android для разработки мобильных приложений, рассмотрим приложение, осуществляющее контроль пребывания студентов в вузе в учебное время. Принцип работы этого приложения заключается в следующем.
На основании сведений о времени и месте проведения занятий, извлекаемых из учебного расписания группы, устанавливается, в каком месте должен находиться студент в определенное время. С учетом того, что геолокация не может достоверно гарантировать безошибочное определение местоположения устройства, считается, что студент находится в месте проведения учебного занятия, если в момент начала занятия географические координаты его устройства попадают внутрь прямоугольника, включающего в себя учебный корпус, в котором по расписанию проводится занятие.
Очевидно, что поскольку местоположение студента требуется определять в течение учебного дня периодически, то необходимо использовать устройство, постоянно находящееся при студенте и имеющее возможность определять его местоположение. Поэтому клиентская часть приложения размещается в мобильном устройстве (смартфоне) студента в виде программы, работающей в фоновом режиме. Учитывая большое количество потенциальных пользователей-студентов и однородность операций, которые должны производиться над данными, отправляемыми клиентской частью приложения, функционирующей на мобильных устройствах студентов, для разрабатываемого приложения целесообразно использовать клиент-серверную архитектуру.
В силу специфики решаемой задачи серверная часть приложения должна предоставлять клиентской части доступ к сведениям о расписании занятий и к списочному составу групп студентов для сохранения сведений об их нахождении в вузе в учебное время. Поскольку эти данные должны храниться и обновляться централизованно, серверная часть включает в себя соответствующую базу данных.
Для организации обмена данными между клиентской и серверной частями приложения в настоящее время наиболее часто используется протокол HTTP. Вследствие этого серверная часть работает на базе веб-сервера. Одной из стандартных технологий обработки HTTP-запросов является технология Jakarta Servlet. Ее выбор обосновывается тем, что эта технология также использует язык Java, который использован и для разработки клиентской части.
Таким образом, структура приложения имеет вид, представленный на рисунке 2.
Рис. 2. Структура клиент-серверного приложения
При первом запуске на мобильном устройстве студента клиентская часть приложения запрашивает аутентифика-ционные данные студента и отправляет их на проверку серверу с целью санкционированного получения от сервера расписания занятий и формирования графика проверок нахождения студента в вузе в соответствии с его расписанием.
После получения нужной информации от сервера клиентская часть приложения устанавливает график проверок нахождения студента в вузе в учебное время, ориентируясь при этом на расписание и время начала занятий, чтобы предотвратить проверки в иное время.
По наступлении времени начала очередного занятия клиентская часть приложения отправляет серверной части запрос на получение геолокационного прямоугольника, содержащего учебный корпус, в котором по расписанию должен находиться студент, и, получив его, проверяет, находится ли мобильное устройство студента в границах этого прямоугольника, используя геолокационные данные устройства. При этом обеспечивается приватность данных о реальном месте, в котором находится студент. В случае пребывания студента вне ожидаемого места его нахождения, его реальное местоположение не раскрывается и не фиксируется ни клиентской, ни серверной частью приложения. Результат выполненной проверки отправляется на сервер.
Кроме того, клиентская часть приложения позволяет студенту отказаться от участия в периодических проверках его нахождения в вузе. В этом случае серверной части будет отправляться сообщение о том, что местоположение студента неизвестно.
Серверная часть приложения получает запросы от клиентской части и обрабатывает их в зависимости от типа запроса:
• Аутентификация — проверка логина и хеша пароля, введенных студентом, на основании сведений об учетной
записи, хранящейся в базе данных, и отправка результата этой проверки клиентской части.
• Расписание — получение расписания из базы данных на текущий день и отправка его клиенту.
• Время начала пар — получение времени начала пар из базы данных и отправка клиенту этой информации.
• Геолокационный прямоугольник — определение корпуса вуза, в котором должен находится студент в момент проверки по графику и отправка географических координат описывающего его прямоугольника клиентской части.
• Запись сведений о нахождении — получение от клиентской части сведений о нахождении студента в геолокационном прямоугольнике корпуса в момент проверки (присутствие/отсутствие/неизвестно) и запись этого результата в базу данных.
Сведения, хранящиеся в базе данных:
• Расписание занятий.
• Геолокационные прямоугольники, содержащие корпуса университета.
• Список групп студентов и учетные записи студентов с логином и хешем их пароля.
• Время начала учебных пар по расписанию.
• Таблица записей о нахождении студента в вузе в учебное время.
В качестве логина и пароля студента приложение использует, например, логин и пароль, выданные студенту для доступа в систему дистанционного образования СДО ПГУПС, поскольку они уникальны для каждого из студентов ПГУПС.
Таким образом, разработанное приложение, с одной стороны, позволяет снизить нагрузку на преподавателей и старост групп, связанную с обязательным контролем посещения студентами занятий, а с другой — позволяет студенту самостоятельно отслеживать свое текущее расписание и просматривать свою индивидуальную статистику посещения занятий.
Поскольку серверная часть приложения реализована на базе стандартного веб-сервера, она может быть дополнена соответствующим веб-приложением, которое позволит преподавателям просматривать и при необходимости корректировать сведения о реальной посещаемости занятий студентами с целью ее правильного учета и использования при проведении промежуточных аттестаций.
Заключение
В статье рассмотрены особенности функционирования мобильных приложений для платформы Android, а также их разработки с использованием языка программирования Java. Кратко описаны особенности виртуальной машины среды выполнения Android, содержимое архива мобильного приложения, жизненный цикл объектов Activity, обеспечивающих выполнение приложения, и базовые классы Google Android API, предоставляющие методы сетевого взаимодействия и геолокации. Приведен пример разработанного клиент-серверного мобильного приложения, предназначенного для контроля пребывания студента в вузе в учебное время.
Приложение разработано и отлажено при подготовке выпускной квалификационной бакалаврской работы
Н. Д. Дергунова в среде разработки Android Studio с использованием сервера Apache Tomcat, СУБД PostgreSQL и может рассматриваться как действующий прототип реальной системы.
Промежуточные результаты работы прошли апробацию на кафедральном заседании LXXXI Всероссийской научно-технической конференции студентов, аспирантов и молодых ученых «Транспорт: проблемы, идеи, перспективы», состоявшейся в ПГУПС в рамках фестиваля «Неделя науки — 2021». Материалы доклада Н. Д. Дергунова, подготовленного под руководством его соавторов, рекомендованы к публикации кафедрой «Информационные и вычислительные системы».
Полученные в процессе выполнения исследовательской работы результаты можно использовать при разработке приложений для платформы Android с использованием языка программирования Java, в том числе мобильных приложений, которые могут найти применение на транспорте. Так, по мнению авторов, на железных дорогах возможно использование мобильных приложений, например, для экспедиционного обслуживания грузов, а также для контроля работы путевых обходчиков или мобильных бригад электромехаников, обслуживающих устройства СЦБ на перегонах.
Литература
1. Статистика Android vs iOS в 2021 году. Разбираем актуальные цифры и факты // Где Трафик? — 2021. — 03 июня. URL: http://gdetraffic.com/Analitika/ Android_vs_iOS (дата обращения 04.06.2021).
2. Frumusanu, A. A Closer Look at Android RunTime (ART) in Android L // AnandTech. — 2014. — 01 July. URL: http://www.anandtech.com/show/8231/a-closer-look-at-android-runtime-art-in-android-l (дата обращения 29.05.2021).
3. What Is the Difference Between DVM and JVM? // Baeldung. — Last updated 17 January 2021. URL: http://www.baeldung.com/java-jvm-vs-dvm (дата обращения 29.05.2021).
4. Meet Android Studio // Android Developers. — Last updated 17 May 2021. URL: http://developer.android.com/ studio/intro (дата обращения 29.05.2021).
5. Application Fundamentals // Android Developers. — Last updated 23 February 2021.
URL: http://developer.android.com/guide/components/funda-mentals (дата обращения 29.05.2021).
6. Activity // Android Developers. — Last updated 14 May 2021. URL: http ://developer. android. com/reference/android/ app/Activity (дата обращения 29.05.2021).
7. Филлипс, Б. Android. Программирование для профессионалов. Третье издание = Android Programming: The Big Nerd Ranch Guide. Third Edition / Б. Филлипс, К. Стюарт, К. Марсикано; пер. с англ. Е. Матвеева. — Санкт-Петербург: Питер, 2017. — 688 с. — (Для профессионалов).
8. App resources overview // Android Developers. — Last updated 14 May 2021. URL: http://developer.android.com/ guide/topics/resources/providing-resources (дата обращения 29.05.2021).
9. Friesen, J. Java XML and JSON: Document Processing for Java SE. Second Edition. — Berkeley (CA): Apress, 2019. — 546 p. DOI: 10.1007/978-1-4842-4330-5.
10. Бурнет, Э. Привет, Android! Разработка мобильных приложений / пер. с англ. А. Заики, А. Севостьяновой. — Санкт-Петербург: Питер, 2012. — 256 с.
11. App Manifest Overview // Android Developers. — Last updated 15 May 2021. URL: http://developer.android.com/ guide/topics/manifest/manifest-intro (дата обращения 29.05.2021).
12. Гриффитс, Дэвид Head First. Программирование для Android. Второе издание / Дэвид Гриффитс, Дон Гриффитс; перевод с английского Е. Матвеева. — Санкт-Петербург: Питер, 2018. — 912 с. — (Head First O'Reilly).
13. Fused Location Provider API // Google Developers. URL: http://developers.google.com/location-context/fused-lo-cation-provider (дата обращения 29.05.2021).
14. FusedLocationProviderClient // Google Developers. — Last updated 18 February 2021.
URL: http://developers.google.com/android/reference/com/ google/android/gms/location/FusedLocationProviderClient (дата обращения 29.05.2021).
15. Task // Android Developers. — Last updated 03 March 2021. URL: http://developer.android.com/reference/com/google/ android/play/core/tasks/Task (дата обращения 29.05.2021).
DOI: 10.24412/2413-2527-2021-226-19-25
Development of a Client-Server Java Application on the Android Platform for Monitoring the Student's Stay at the University
N. D. Dergunov, PhD G. I. Kozhomberdieva, PhD D. P. Burakov Emperor Alexander I St. Petersburg State Transport University Saint Petersburg, Russia piculiwar@gmail.com, kgi-liizht@yandex.ru, burakovdmitry8@gmail.com
Abstract. The paper briefly discusses the features of the functioning of mobile applications on the Android platform and their development features using the Java programming language. It describes the features of the Android runtime virtual machine, the contents of the mobile application archive, the lifecycle of Activity objects that ensure application execution, as well as the base classes of the Google Android API that provide methods of network interaction and geolocation. As an example of an application whose functionality is in line with modern trends in development programs for mobile devices, the paper presents a client-server Java application for monitoring a student's stay at a university in study time. The possibility of using mobile applications for solving similar problems in the field of transport is noted.
Keywords: Android, Dalvik, Java, mobile application, clientserver application, Activity lifecycle, geolocation.
References
1. Android vs iOS statistics in 2021. Analyzing the actual figures and facts [Statistika Android vs iOS v 2021 godu. Raz-biraem aktual'nye tsifry i fakty], Gdetraffic [Gde Trafik?]. Published online at 03 June 2021. Available at: http://gdetraffic.com/Analitika/Android_vs_iOS (accessed 04 June 2021).
2. Frumusanu A. A Closer Look at Android RunTime (ART) in Android L, AnandTech. Published online at 01 July 2014. Available at: http://www.anandtech.com/show/8231/ a-closer-look-at-android-runtime-art-in-android-l (accessed 29 May 2021).
3. What Is the Difference Between DVM and JVM? Baeldung. Last updated 17 Jan 2021. Available at: http://www.baeldung.com/java-jvm-vs-dvm (accessed 29 May 2021).
4. Meet Android Studio, Android Developers. Last updated 17 May 2021. Available at: http://developer.android.com/ studio/intro (accessed 29 May 2021).
5. Application Fundamentals, Android Developers. Last updated 23 Feb 2021. Available at: http://developer.android.com/ guide/components/fundamentals (accessed 29 May 2021).
6. Activity, Android Developers. Last updated 14 May 2021. Available at: http://developer.android.com/reference/android/ app/Activity (accessed 29 May 2021).
7. Phillips B., Stewart C., Marsicano K. Android Programming: The Big Nerd Ranch Guide. Third Edition [Android. Pro-grammirovanie dlya professionalov. Tret'ye izdanie]. St. Petersburg, Piter Publishing House, 2017, 688 p.
8. App resources overview, Android Developers. Last updated 14 May 2021. Available at: http://developer.android.com/guide/ topics/resources/providing-resources (accessed 29 May 2021).
9. Friesen J. Java XML and JSON: Document Processing for Java SE. Second Edition. Berkeley (CA), Apress, 2019, 546 p. DOI: 10.1007/978-1-4842-4330-5.
10. Burnette E. Hello, Android! Development of mobile applications [Privet, Android! Razrabotka mobil'nykh prilozheniy]. St. Petersburg, Piter Publishing House, 2012, 256 p.
11. App Manifest Overview, Android Developers. Last updated 15 May 2021. Available at: http://developer.android.com/ guide/topics/manifest/manifest-intro (accessed 29 May 2021).
12. Griffiths David, Griffiths Dawn, Head First Android Development. Second Edition [Head First. Programmirovanie dlya Android. Vtoroe izdanie]. St. Petersburg, Piter Publishing House, 2018, 912 p.
13. Fused Location Provider API, Google Developers. Available at: http://developers.google.com/location-context/ fused-location-provider (accessed 29 May 2021).
14. FusedLocationProviderClient, Google Developers. Last updated 18 Feb 2021. Available at: http://developers.google.com/ android/reference/com/google/android/gms/location/ FusedLocationProviderClient (accessed 29 May 2021).
15. Task, Android Developers. Last updated 03 Mar 2021. Available at: http://developer.android.com/reference/com/google/ android/play/core/tasks/Task (accessed 29 May 2021).
HHmmneKmyaxbHbie техноnогии Ha mpaHcnopme. 2021. № 2
25