Статья опубликована в рамках: LVII Международной научно-практической конференции «Инновации в науке» (Россия, г. Новосибирск, 30 мая 2016 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции часть 1, Сборник статей конференции часть 2
дипломов
ОБЗОР И АНАЛИЗ ИНСТРУМЕНТОВ РАЗРАБОТКИ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ДЛЯ ОС ANDROID
REVIEW AND ANALYSIS OF DEVELOPMENT TOOLS FOR MOBILE APPLICATIONS FOR ANDROID OS
Alexander Shmatko
associate Professor, PhD, associate professor of Kharkiv National University of Economics,
Ukraine, Kharkiv
Vladimir Fedorchenko
аssociate Professor, PhD, associate professor of Kharkiv National University of Economics,
Ukraine, Kharkiv,
АННОТАЦИЯ
В статье предлагается анализ и обзор существующих инструментальных средств для разработки программного обеспечения для платформы Android.
Выполнен обзор официальных средств разработки и средств разработки, представленных сторонними разработчиками. Проведенный анализ показал, что разработка приложений для платформы Андроид может производится не только с использованием языка программирования Java, но и с использованием других языков программирования, что делает процесс разработки еще более доступны для большего количества разработчиков.
Проведенный анализ показал, что платформа Android становиться все более популярной как среди разработчиков, так и среди пользователей благодаря наличию свободно распространяемых либо условно-бесплатных средств программирования.
ABSTRACT
The article offers an analysis and review of existing tools to develop software for the Android platform.
A review of official development tools and development tools provided by third-party developers is proposed. The analysis showed that the development of applications for Android platform can be made not only with the use of the Java programming language, but also with other programming languages, making the development process more accessible to more developers.
The analysis showed that the Android platform is becoming increasingly popular among developers, and among users thanks to the open source or shareware software.
Ключевые слова: Anroid, Linux, Andriod API Miner, Android Debug Bridge, средства разработки, IDE
Keywords: Anroid, Linux, Andriod API Miner, Android Debug Bridge, development tools, IDE
Android – это полноценная операционная система, в основе которой положено ядро Linux® V3.6. Самые первые версии Android нашли свое применение в сегменте мобильных телефонов, включая смартфоны и более дешевые раскладные устройства. Однако полный спектр вычислительных сервисов и богатые функциональные возможности Android позволяют создавать приложения, которые далеко выходят за рамки только сегмента мобильных телефонов. Операционная система Android становится все более популярной и в других платформах и приложениях.
По состоянию на 2013 год, более чем один миллион приложений были разработаны для Android, с более чем 25 млрд. загрузок приложений [10]. Анализ, который проводился на протяжении 2011 года, показал, что более 67 % мобильных разработчиков использовали платформу Android для разработки и публикации приложений [3; 11] В 1 квартале 2015 года Android доминировал на рынке мобильных телефонов с долей в 78 % [24].
Таким образом, разработка приложений под ОС Android является наиболее актуальным процессом в разработке мобильных приложений. Поэтому актуальным является и тема работы, связанная с анализом и использованием инструментов программирования для ОС Android
Операционная система Android работает поверх ядра Linux. Для создания Android-приложений изначально использовался язык программирования Java, а исполнялись приложения в виртуальной машине (VM). Необходимо обратить внимания на то, что виртуальная машина – это не виртуальная машина Java (JVM), а открытая технология Dalvik Virtual Machine. При запуске приложения Android создается и запускается отдельный экземпляр Dalvik VM, который, в свою очередь заключен в пределах управляемого ядром Linux процесса, как показано на рисунке 1.
Рисунок 1. Dalvik VM
Android-приложение может запускаться для обработки элемента данных или реагирования на события, например, на получение текстового сообщения.
Приложение для Android развертывается на устройстве вместе с файлом AndroidManifest.xml. Этот файл содержит необходимую информацию о конфигурации, которая позволяет правильно установить приложение на устройстве. Он включает также необходимые имена классов и типы событий, которые может обрабатывать приложение, и разрешения, требуемые для его работы. Так, если приложению нужен доступ к сети – например, чтобы загрузить файл, – соответствующее разрешение должно быть явно указано в файле манифеста. Это конкретное разрешение могут иметь многие приложения. Такая защита путем декларирования помогает уменьшить вероятность повреждения устройства по вине некорректно написанного приложения.
Комплект разработки программного обеспечения Android (SDK), включает в себя полный набор инструментов разработчика [27]. Он включает в себя отладчик, библиотеки, эмулятор мобильного устройства, основанный на QEMU, документацию, образцы кода и учебники. В настоящее время поддерживаются платформы разработки, которые работают на операционной системе Linux (любой современный рабочий стол Linux), Mac OS X 10.5.8 или более поздней версии, и Windows XP или более поздней версии. По состоянию на март 2015 года, SDK не доступна на Android, но разработка программного обеспечения возможна при помощи специализированных приложений для Android [2; 14; 15]
Таблица 1.
SDK Android
Разработчик (и) |
|
Первый выпуск |
октябрь 2009 года; 5 лет назад |
Стабильная версия |
24.0.2 / декабрь 2014 года; 6 месяцев назад |
Язык программирования |
Java |
Операционная система |
Кросс-платформенная |
Язык |
английский |
Тип |
IDE, SDK |
Сайт |
developer.android.com/tools/sdk/eclipse-adt.html, developer.android.com/sdk/index.html |
Примерно до конца 2014 года, официально поддерживаемой интегрированной средой разработки (IDE) была Eclipse (рис. 2), которая предлагала для разработки мобильных приложений специальный плагин – инструменты разработки Android (ADT), хотя среда IntelliJ IDEA (рис. 3) полностью поддерживает Android разработку из коробки [26]. NetBeans IDE (рис. 4) также поддерживает Android разработку при помощи плагина [19].
Рисунок 2. IDE Eclipse
Рисунок 3. IntelliJ IDEA
Рисунок 4. NetBeans IDE
В 2015 году, Google совместно с IntelliJ представили официальную IDE от Google Android Studio [5]. Однако, разработчики могут использовать другие интегрированные среды разработки. Кроме того, разработчики могут использовать любой текстовый редактор для редактирования XML и Java-файлов, а затем использовать инструменты командной строки (комплект разработки Java и Apache Ant), чтобы создать, скомпилировать и отладить приложения Android, а также управлять подключенными устройствами Android (например, вызвав перезагрузку, установка программного обеспечения, удаление пакетов) [8].
Улучшения в SDK Android идут рука об руку с общим развитием Android платформы. SDK также поддерживает старые версии Android платформы, если разработчики хотят запускать свои приложения на старых устройствах. Средства разработки являются загружаемыми компонентами, так что после загрузки последней версии и платформы, старые платформы и инструменты разработки также могут быть загружены для тестирования совместимости [22].
Приложения Android упаковываются в файлы в формате.apk и хранятся в папке /data/app на устройстве Android (папка доступна только для суперпользователя по соображениям безопасности). Пакеты apk содержат файлы.dex [9] (исполняемый байт-код приложения для Dalvik VM), файлы ресурсов и т. д.
Клиент-серверное приложение, которое предоставляет доступ к работающему эмулятору или устройству (рис. 5). С его помощью можно копировать файлы, устанавливать скомпилированные программные пакеты и запускать консольные команды. Используя консоль, вы можете изменять настройки журнала и взаимодействовать с базами данных SQLite, которые хранятся на устройстве. В старых версиях SDK программа находилась в папке tools, теперь находится в папке platform-tools.
Состоит из трех компонентов: фоновой службы (демона), работающей в эмуляторе, сервиса, запущенного на компьютере разработчика, и клиентской программы (наподобие DDMS), которая связывается со службой через Сервис.
Рисунок 5. Установка пакета apk с использованием adb
Fastboot является диагностическим протоколом, который идет в комплекте с SDK и используется в первую очередь для изменения флэш файловой системы через USB-соединение с компьютером. Fastboot требует, чтобы устройство запускалось загрузчиком или в режиме Second Program Loader, в котором выполняются только самые основные инициализации оборудования. После включения протокола на самом устройстве, оно будет принимать определенный набор команд, посылаемых к нему через USB, используя командную строку.
Библиотеки, написанные на C, C ++ и других языках могут быть скомпилированы в ARM, MIPS или x86 машинный код и устанавливаться на устройство с использованием набора Android Native Development Kit (NDK). Родные классы могут быть вызваны из Java-кода, выполняемого под Dalvik VM, используя вызов System.loadLibrary, который является частью стандартных классов Java в Android [13; 18].
Таблица 2.
Android Native Development Kit (NDK Android)
Разработчик (и) |
|
Первый выпуск |
июнь 2009 года; 6 лет назад |
Стабильная версия |
10d / декабрь 2014 года; 6 месяцев назад |
Язык программирования |
C и C ++ |
Операционная система |
Кросс-платформенная |
Доступна |
Английском |
Тип |
IDE, SDK |
Сайт |
developer.android.com/tools/sdk/ndk/index.html |
Разработанные приложения могут быть скомпилированы и установлены с помощью традиционных инструментов разработки [4]. Тем не менее, в соответствии с Android документации, NDK не должен использоваться исключительно для разработки приложений только потому, что разработчик предпочитает программировать на C/C++, так как использование NDK увеличивает сложность приложения, что не пойдет ему на пользу.
ADB отладчик дает права root в Android Emulator, что позволяет загружать и выполнять программный код, оптимизированный под ARM, MIPS или x86 процессоры. Машинный код может быть скомпилирвоан с использованием GCC или Intel C ++ Compiler на стандартном ПК. Запуск машинный кода на Android платформе осложняется использованием нестандартной библиотеки C (Libc, известной как Bionic). Графическая библиотека Android которая используется для арбитража и контроля доступа к данному устройству называется Graphics Library Skia (SGL), и она выпущена под открытой лицензией. Skia имеет движки для обоих Win32 и Unix платформ, позволяя развивать кросс-платформенные приложения. Skia также имеет графический движок, лежащий в основе веб-браузера Google Chrome [23; 30].
В отличие от разработки приложений Java, основанных на использовании IDE, таких как Eclipse, NDK основан на командной строке и требует ввода команд вручную для компилирования, развертывания и отладки приложений. Некоторые инструменты сторонних разработчиков позволяют интегрировать NDK в Eclipse и Visual Studio.
ADK – это устройство, поддерживающее Android Open Accessory Protocol. ADK – это Arduino совместимая платформа, подключаемая к Android устройству посредством USB или Bluetooth и содержащая множество датчиков, сенсоров и индикаторов.
Google предлагает два направления применения ADK:
Коммерческое – аудио док-станции, интеграция в спортивные тренажеры и т. д.
Хобби – контроллеры роботизированной техники.
Платформа дает возможность воспроизводить аудио с Android устройства по USB соединению. Требования – Android 4.1 (API Level 16 и выше).
Сам комплект ADK 2012 имеет вид законченного устройства в форме будильника и функцией аудио дока.
Начиная с версии 2.4 для программистов, пишущих Android приложения на языке программирования Go, включена поддержка языка без какого-либо Java-кода, хотя и с ограниченным набором интерфейсов Android.
Android-APIMiner – это платформа, которая является инструментом автоматической генерации и извлечения документации Javadoc из реальных приложений Android c открытым исходным кодом c примерами использования. Для улучшения качества извлеченных примеров, APIMiner использует внутри-процессуальный статический алгоритм извлечения [16].
Tcl (Tool Command Language) является очень мощным, но легко изучаемым динамическим языком программирования, который подходит для очень широкого спектра применения, в том числе для сетевых и настольных приложений, сетевого программирования, тестирования и многого другого. Tcl имеет открытый исходный код и действительно является кросс-платформенным, который легко разворачивается и расширяется.
Тк инструментарий для создания графического пользовательского интерфейса, который поднимает разработку настольных приложений на более высокий уровень, чем обычные подходы. Тк является стандартом интерфейса не только для Tcl, но и для многих других динамических языков, и позволяет создавать насыщенные приложения, которые работают без изменений под ОС Windows, Mac OS X, Linux.
AndroWish позволяет запускать настольные Tcl и Tk программ почти в неизменном виде на Android платформе [6].
12 июля 2010 года, Google объявила о доступности App Inventor для Android. App Inventor это веб-ориентированная визуальная среды разработки для начинающих программистов, основанная на библиотеке Open Blocks Java Массачусетского технологического института (MIT). Среда обеспечивает доступ к GPS, акселерометру, данным позиционирования устройства, телефонным функциям, обмену текстовыми сообщениями, преобразованию речи в текст, контактам, данным постоянного хранения и веб-службам.
Последняя версия, которая была создана в результате сотрудничества Google и MIT, выпущена в феврале 2012 года, в то время как первая версия, созданная исключительно MIT был запущена в марте 2012 и обновлена до App Inventor 2 в декабре 2013 года. С 2014 года App Inventor поддерживается исключительно MIT [7].
Basic4Android – это простой и мощный инструмент разработки приложений для устройств, работающих под управлением операционной системы Android. Язык Basic4Android очень похож на популярный язык Visual Basic. При разработке приложений используется множество различных дополнительных библиотек. Для выполнения созданных программ никаких дополнительных runtime-средств не требуется.
Corona SDK является комплектом разработки программного обеспечения (SDK), созданным Вальтером Лухом, основателем Corona Labs Inc. Corona SDK позволяет программистам создавать мобильные приложения для iPhone, IPAD и Android устройств.
Corona позволяет разработчикам создавать графические приложения, используя интегрированный Lua язык, который наслаивается поверх C++/OpenGL. SDK распространяется на основе модели продажи по подписке, не требует каких-либо отчислений от продажи разработанных приложений и не навязывает никаких требований брендинга.
Delphi также может быть использован для создания Android приложений с использованием языка Object Pascal. Последняя версия Delphi XЕ8, разработана Embarcadero Studio.
Embarcadero® RAD Studio XЕ8является законченным решением для разработки программного обеспечения для Windows, Mac, IOS, Android и IoT. RAD Studio позволяет строить готовые решения, которые разрабатываются не только для клиентских платформ, но также и для мобильных устройств, смарт-устройств, таких как смарт-часы и другие гаджеты IoT [1; 21].
Lazarus можно использовать для разработки приложений Android, на языке Pascal с компилятором Free Pascal, начиная с версии 3.7.2.
Qt для Android, начиная с версии Qt 5, создавать приложения для запуска на устройствах с Android v3.3.3 (уровень API 10) или более поздней версии. Qt является основой для кросс-платформенных приложений, которые могут запускаться на целевых платформах, таких как Android, Linux, IOS, Sailfish OS и Windows. Разработка Qt приложений выполняется с использованием языка C++ и QML, требуя при этом установленных Android NDK и SDK. Qt Creator является интегрированной средой разработки и совместно с Qt Framework используется для разработки мульти-платформенных приложений.
RFO BASIC! это диалект Dartmouth Basic и представляет собой интерпретатор с набором библиотек для доступа к аппаратному оборудованию, датчикам, звуку, графике, мультитачу, файловой системы, SQLite, сети, HTML интерфейсу, шифрованию, SMS, функциям телефона, электронной почте, преобразованию текста в речь, распознаванию голоса, GPS и другим функциям. Это программное обеспечение с открытым исходным кодом может компилировать автономные APK файлы. RFO Basic активно развивается с марта 2015.
RubyMotion является набором инструментов для создания мобильных приложений на языке Ruby. Поддержка Android появилась в версии RubyMotion 3.0. Приложения Android, созданные с использованием RubyMotion, можно назвать в целом набором Java API от Ruby, при этом возможно использование сторонних библиотек Java.
Saphir является ответвлением с открытым исходным кодом от проекта Rebol3 (R3). Вся функциональность R3, в том числе GUI, графика, доступ к сети, доступ к файлам, парсинг и другие особенности портируются на основные портативные ОС Android, Windows, Mac, Linux без каких-либо изменений в исходном коде. Saphir позволяет использовать шаблоны диалектных моделей (DSL) для построения графических пользовательских интерфейсов и выполнения общих вычислительных операций. Небольшой размер компилятора (0,5–1,5 мегабайт) дополняется простым утилитарным дизайном Saphir.
Библиотека SDL предлагает, кроме возможности разработки с использованием Java, возможность разработки с использованием C с последующим простым переносом существующих SDL и собственных приложений C. Применение Java-инъекций и прокладок JNI позволяет использовать родную библиотеку SDL при портировании на устройства Android, например, как в видео игре Jagged Alliance 3.
Цель The Simple project является обеспечение разработчика простым в понимании и использовании языком для разработки приложений для платформы Android [20]. The Simple project является основным диалектом для разработки приложений Android. Он нацелен на профессиональных и непрофессиональных программистов, и позволяет программистам быстро создавать приложения для Android.
Подобно Microsoft Visual Basic 6 The Simple project определяет формы (которые содержат компоненты) и код (который содержит логику программы). Взаимодействие между компонентами и программной логики происходит через события, вызванные компонентами. Логика программа состоит из обработчиков событий, которые содержат код реагирования на события.
The Simple project не очень активен [12] последнее обновление исходный код претерпевал в августе 2009 года.
Visual Studio 2015 поддерживает разработку кросс-платформенных приложений, позволяя разработчикам C ++ создавать проекты из шаблонов для Android-приложений, или создавать динамические высокопроизводительные разделяемые библиотеки для включения их в другие решения. Функционал среды включает в себя интеллектуальный подсказчик IntelliSense, точки останова, развертывание устройств и эмуляции [29].
WinDev Mobile собственная IDE созданная PC SOFT и используется для создания графического интерфейса пользователя (GUI) приложений для смартфонов и планшетов (включая устройства Android). Она использует в качестве языка программирования WLanguage, и доступна на английском, французском и китайском языках [17; 28].
Разработчики на C# могут использовать Xamarin для создания приложений для платформ IOS, Android, Windows. Xamarin используют более 505,000 разработчиков в более чем 120 странах по всему миру по состоянию на февраль 2014 года [25].
X11 Basic является диалектом языка программирования Basic с графическими возможностями, который объединяет функции, такие как оболочки сценариев, программирование CGI и полной графической визуализации. Синтаксис в основном похож на старый GFA Basic, который использовался на компьютерах Atari ST.
Заключение
В данной работе проведен анализ и обзор существующих инструментальных средств для разработки программного обеспечения для платформы Android.
Проведенный анализ показал, что платформа Android становиться все более популярной как среди разработчиков, так и среди пользователей.
В работе выполнен обзор официальных средств разработки и средств разработки, представленных сторонними разработчиками. Проведенный анализ показал, что разработка приложений для платформы Андроид может производится не только с использованием языка программирования Java, но и с использованием других языков программирования, что делает процесс разработки еще более доступны для большего количества разработчиков. Также в обзоре присутствуют средства разработки, которые ориентированы на начинающих разработчиков или которые могут использоваться в учебных целях. Большинство рассмотренных средств программирования являются либо свободно распространяемыми, либо условно-бесплатными, что тоже повышает популярность платформы Андроид.
Таким образом, можно сделать вывод, что платформа Андроид и инструменты программирования для этой платформы будут пользоваться большой популярностью в ближайшее время.
Список литературы:
- 15 Apps for Programming on Android – [Электронный ресурс] – Режим доступа: http://android.appstorm.net/roundups/developer/15-apps-for-programming-on-android/ (Дата обращения: 25.05.2016).
- AIDE- IDE for Android Java C++ – [Электронный ресурс] – Режим доступа: https://play.google.com/store/apps/details?id=com.aide.ui (Дата обращения: 25.05.2016).
- Android App Stats. – [Электронный ресурс] – Режим доступа: http://www.androlib.com/appstats.aspx (Дата обращения: 25.05.2016).
- Android NDK – [Электронный ресурс] – Режим доступа: https://developer.android.com/tools/sdk/ndk/index.html (Дата обращения: 25.05.2016).
- Android Studio – [Электронный ресурс] – Режим доступа: http://developer.android.com/sdk/index.html (Дата обращения: 25.05.2016).
- AndroWish – [Электронный ресурс] – Режим доступа: http://www.androwish.org/index.html/home (Дата обращения: 25.05.2016).
- App Inventor Book, Classic version – [Электронный ресурс] – Режим доступа: http://www.appinventor.org/book (Дата обращения: 25.05.2016).
- Backup & restore Android apps using adb – [Электронный ресурс] – Режим доступа: http://jonwestfall.com/2009/08/backup-restore-android-apps-using-adb/ (Дата обращения: 25.05.2016).
- Dalvik Executable format – [Электронный ресурс] – Режим доступа: https://source.android.com/devices/tech/dalvik/dex-format.html (Дата обращения: 25.05.2016).
- Google Play Hits 1 Million Apps – [Электронный ресурс] – Режим доступа: http://mashable.com/2013/07/24/google-play-1-million/ (Дата обращения: 25.05.2016).
- Google: 3 Billion Android Apps Installed; Downloads Up 50 Percent From Last Quarter – [Электронный ресурс] – Режим доступа: http://techcrunch.com/2011/04/14/google-3-billion-android-apps-installed-up-50-percent-from-last-quarter/ (Дата обращения: 25.05.2016).
- How To Write A Simple Application – [Электронный ресурс] – Режим доступа: https://code.google.com/p/simple/wiki/HowToWriteASimpleApplication (Дата обращения: 25.05.2016).
- Invoke JNI Based Methods (Bridging C/C++ And Java) – [Электронный ресурс] – Режим доступа: https://davanum.wordpress.com/2007/12/09/android-invoke-jni-based-methods-bridging-cc-and-java/(Дата обращения: 25.05.2016).
- Java Editor – [Электронный ресурс] – Режим доступа: https://play.google.com/store/apps/details?id=air.JavaEditor (Дата обращения: 25.05.2016).
- JavaIDEdroid – [Электронный ресурс] – Режим доступа: https://play.google.com/store/apps/details?id=ch.tanapro.JavaIDEdroid (Дата обращения: 25.05.2016).
- João Eduardo Montandon, Hudson Borges, Daniel Felix, and Marco Tulio Valente Documenting APIs with Examples: Lessons Learned with the APIMiner Platform – [Электронный ресурс] – Режим доступа: http://homepages.dcc.ufmg.br/~mtov/pub/2013_wcre_apiminer.pdf (Дата обращения: 25.05.2016).
- List of IDEs for Android App Development, Which is Best for You? – [Электронный ресурс] – Режим доступа: http://tekeye.biz/2014/list-of-android-app-development-ides (Дата обращения: 25.05.2016).
- Native C applications for Android – [Электронный ресурс] – Режим доступа: http://benno.id.au/blog/2007/11/13/android-native-apps (Дата обращения: 25.05.2016).
- NBAndroid – [Электронный ресурс] – Режим доступа: http://plugins.netbeans.org/plugin/19545/nbandroid (Дата обращения: 25.05.2016).
- Programming Made Simple – [Электронный ресурс] – Режим доступа: https://code.google.com/p/simple/ (Дата обращения: 25.05.2016).
- RAD Studio XE8 – [Электронный ресурс] – Режим доступа: https://www.embarcadero.com/products/rad-studio (Дата обращения: 25.05.2016).
- SDK Tools – [Электронный ресурс] – Режим доступа: http://developer.android.com/tools/sdk/tools-notes.html (Дата обращения: 25.05.2016).
- SKIA graphics library in chrome: first impressions – [Электронный ресурс] – Режим доступа: http://www.atoker.com/blog/2008/09/06/skia-graphics-library-in-chrome-first-impressions/ (Дата обращения: 25.05.2016).
- Smartphone OS Market Share, Q1 2015 – [Электронный ресурс] – Режим доступа: http://www.idc.com/prodserv/smartphone-os-market-share.jsp (Дата обращения: 25.05.2016).
- The Perfect Platform for Game Developers: Android – [Электронный ресурс] – Режим доступа: http://www.developer.com/ws/android/client/the-perfect-platform-for-game-developers-android.html (Дата обращения: 25.05.2016).
- The Professional Android IDE – [Электронный ресурс] – Режим доступа: http://www.jetbrains.com/idea/features/android.html (Дата обращения: 25.05.2016).
- Tools Overview – [Электронный ресурс] – Режим доступа: http://developer.android.com/tools/help/index.html (Дата обращения: 25.05.2016).
- Top 10 Android Apps and IDE for Java Coders and Programmers – [Электронный ресурс] – Режим доступа: https://blog.idrsolutions.com/2014/12/android-apps-ide-for-java-coder-programmers/ (Дата обращения: 25.05.2016).
- Visual C++ Cross-Platform Mobile – [Электронный ресурс] – Режим доступа: https://www.visualstudio.com/en-us/features/cplusplus-mdd-vs.aspx (Дата обращения: 25.05.2016).
- What you should know about Hypernext Android Creator (HAC)? – [Электронный ресурс] – Режим доступа: https://sites.google.com/site/androidappdevsindia/what-you-should-know-about-hypernext-android-creator-hac (Дата обращения: 25.05.2016).
дипломов
Оставить комментарий