Курсовая работа на тему: "Разработка плагина для Android Studio по оценке энергопотребления кода"
У нас на сайте представлено огромное количество информации, которая сможет помочь Вам в написании необходимой учебной работы.
Но если вдруг:
Вам нужна качественная учебная работа (контрольная, реферат, курсовая, дипломная, отчет по практике, перевод, эссе, РГР, ВКР, диссертация, шпоры...) с проверкой на плагиат (с высоким % оригинальности) выполненная в самые короткие сроки, с гарантией и бесплатными доработками до самой сдачи/защиты - ОБРАЩАЙТЕСЬ!
Курсовая работа на тему:
"Разработка плагина для Android Studio по оценке энергопотребления кода"
Оглавление
Введение 3
1. Цели и задачи 4
3.1. Обзор существующих решений . . . . . . . . . . . . . . . 6
3.1.1. Energy Profiler . . . . . . . . . . . . . . . . . . . . . 6
3.1.2. Плагин AEON . . . . . . . . . . . . . . . . . . . . . 7
3.1.3. Плагин EnSights . . . . . . . . . . . . . . . . . . . . 8
3.2. Navitas Framework . . . . . . . . . . . . . . . . . . . . . . . 8
3.3. Обзор технических средств . . . . . . . . . . . . . . . . . 9
3.3.1. Конфигурационный файл . . . . . . . . . . . . . . 9
3.3.2. Система действий . . . . . . . . . . . . . . . . . . . 9
3.3.3. PSI . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3.4. Пользовательский интерфейс . . . . . . . . . . . . 10
4. Плагин Navitas Profiler 11
4.1. Архитектура . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2. Работа с плагином . . . . . . . . . . . . . . . . . . . . . . . 12
4.2.1. Конфигурирование . . . . . . . . . . . . . . . . . . 12
4.2.2. Профилирование . . . . . . . . . . . . . . . . . . . 13
4.2.3. Проведение анализа . . . . . . . . . . . . . . . . . . 13
4.2.4. Отображение результатов . . . . . . . . . . . . . . 14
4.3. Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5. Проверка работоспособности 15
Заключение 16
Введение
В XXI веке сложно себе представить мир, в котором нет мобиль- ных устройств. Благодаря своим компактным размерам, огромным вы- числительным возможностям и удобству в использовании, смартфо- ны, планшеты, умные часы и прочие “гаджеты” прочно вошли в нашу жизнь. Так, количество пользователей смартфонов, наиболее популяр- ных в среде мобильных устройств, на конец 2019 года по прогнозам ожидается около 3.2 миллиардов [1], а Android продолжает лидировать по распространённости среди мобильных ОС [2].
Однако по-прежнему одной из главных проблем в мобильной инду- стрии остаётся расход батареи, от которого напрямую зависит “время жизни” устройства. Производители не могут обойти это стороной, так как без постоянных улучшений аппаратной и программной частей про- дукт не сможет долго конкурировать на рынке.
Ёмкость литиевых батарей, обычно используемых при производстве мобильных устройств, значительно увеличилась. Также улучшилась и программная составляющая: в частности, за последние пять лет Google сделал множество оптимизаций по повышению энергоэффективности Android (например,ограничения на обработку задач в фоновом режиме и внедрение алгоритмов машинного обучения [3, 4]).
Кроме аппаратной части и ОС не стоит также забывать и о прило- жениях. Зачастую мобильные разработчики не думают о вопросе энер- гопотребления написанного ими кода. Отсюда неэффективный расход батареи и, как следствие, быстрый её разряд. Нужен инструмент, ко- торый позволил бы как можно точнее оценить энергоэффективность работы приложения до его выхода на рынок. Также неплохо бы внед- рить подобный инструмент в среду разработки, что повысит удобство его использования: разработчику можно будет не вносить данные вруч- ную, а выбирать из предлагаемых вариантов в диалоговых окнахсреды. Кроме того, интеграция позволит упростить установку и настройку ин- струмента. В данной работе предложена реализация вышеупомянутого инструмента для ОС Android в рамках проекта “Navitas Framework”.
1. Цели и задачи
Целью данной работы является разработка плагина по оценке энер- гопотребления кода для официальной интегрированной среды разра- ботки под ОС Android — Android Studio. Для достижения цели были поставлены следующие задачи:
1. Провести обзор существующих решений.
2. Провести обзор технических средств по разработке плагинов для Android Studio.
3. Интегрировать “Navitas Framework” в Android Studio в виде пла- гина.
4. Проверить работоспособность плагина на Android-приложении.
2. Термины и определения
• Wake lock — механизм ОС Android, позволяющий приложению управлять состоянием питания устройства. Например, используя wake lock, приложение может удерживать экран или центральный процессор в активном состоянии.
• Alarm — механизм ОС Android, позволяющий выполнять опера- ции в указанное время, даже если ваше приложение не будет за- пущено в этот момент.
• Job — механизм ОС Android, позволяющий выполнять действия при наступлении определённых условий.
• Power Profile — файл, содержащий информацию об энергопотреб- лении различных компонентов устройства за единицу времени в разныхсостояниях. Данный файл должен быть предоставлен про- изводителем устройства.
3. Обзор предметной области
3.1. Обзор существующих решений
Для поиска существующих решений использовался сервис “Google Scholar” и официальные сайты: по размещению плагинов от JetBrains и по Android-разработке от Google. Найденные спомощью “Google Scholar” в июне 2019 статьи1 были рассмотрены на предмет соответствия дан- ной предметной области в рамках системного обзора литературы. В результате было выделено порядка 50 работ, связанных с энергопро- филированием кода на ОС Android, и только в одной из них речь шла об интеграции разработанного инструмента с Android Studio. На офи- циальных сайтах было найдено ещё два решения. Таким образом, по результатам проведённых поисков было обнаружено три схожих реше- ния. Но, как далее станет ясно, каждое из них имеет определённые ограничения.
3.1.1. Energy Profiler
Energy Profiler — инструмент для профилирования энергопотребле- ния Android-приложений, интегрированный в Android Studio [5].
Energy Profiler отслеживает использование центрального процессо- ра, сети и GPS-датчика и визуализирует потребление энергии каждым из этих компонентов. Также Energy Profiler отображает возникновение системных событий (wake locks, alarms, jobs, запросы о местоположе- нии), оказывающих влияние на энергопотребление.
Для того, чтобы начать энергопрофилирование, нужно выполнить несколько шагов: запустить целевое приложение, перейти на вкладку “Profiler” в нижней панели инструментов и кликнуть на область с заго- ловком “Energy”.
Стоит отметить, что Energy Profiler измеряет расход энергии не на- прямую, а использует модель для оценивания. При этом вместо единиц измерения присутствуют абстрактные значения: Light, Medium,Heavy.
1https://docs.google.com/spreadsheets/d/17G31QTGL-tpUSkv96W_JavoJ03bzLDy3swJIfTTLHKA
Рис. 1: Energy Profiler
3.2. Navitas Framework
Navitas Framework3 — проект по оценке энергопотребления Android- приложений, начавшийся в рамках летней школы “Ланит-Терком” в 2019 году. В данный момент участниками проекта являются студенты направления ”Программная инженерия” СПбГУ, а руководит проектом старший преподаватель Станислав Юрьевич Сартасов.
За время летней школы был создан плагин для Gradle, под назва- нием “NaviProf”, выполняющий инструментовку APK, запуск UI-тестов на устройстве и выгрузку собранных логов на компьютер. А осенью, после успешной презентации проделанных работ, стали видны даль- нейшие планы по развитию проекта:
• улучшение качества профилирования Gradle-плагина (например, добавление в логи информации о таких компонентах, как яркость экрана, Wi-Fi и др.);
• создание плагина для Android Studio с целью:
– интеграции процесса профилирования “NaviProf” в процесс разработки Android-приложений;
– проведения анализа собранных логов;
–
визуализации результатов профилирования.
3https://github.com/Stanislav-Sartasov/Navitas-Framework
3.3. Обзор технических средств
Android Studio построена на базе IntelliJ IDEA — среды разработки от компании JetBrains. Поэтому для работы требуется IntelliJ Platform SDK (Software Development Kit) и документация к нему [10]. Далее предлагается краткий обзор ключевых аспектов, касающихся разработ- ки плагина в данной работе.
3.3.1. Конфигурационный файл
Конфигурационный файл plugin.xml — файл, в котором объявляют- ся различные компоненты плагина (в частности, регистрируются дей- ствия), а также хранится дополнительная информация (название пла- гина и его описание, имена разработчиков и др.).
3.3.2. Система действий
IntelliJ Platform предоставляет концепцию действий. Действием яв- ляется класс, унаследованный от класса AnAction. Его метод, под на- званием actionPerformed, выполняется при вызове действия. Благода- ря данной концепции, плагин может добавлять собственные элементы в меню и на панели инструментов. Действия объединяются в группы, причём группы могут быть вложенными. Группа действий может обра- зовывать меню или панель инструментов, а подгруппы внутри группы
— подменю.
В плагине “Navitas Profiler” действия используются для открытия конфигурационного окна, запуска и остановки профилирования, а так- же для навигации.
3.3.3. PSI
Program Structure Interface (PSI) — слой, отвечающий за парсинг файлов и представление кода в виде иерархической модели. Разные языки программирования имеют разные PSI-модели.
В плагине “Navitas Profiler” API данного слоя используется для мо- дификации файлов сборки build.gradle пользовательских проектов.
3.3.4. Пользовательский интерфейс
IntelliJ Platform включает огромное количество собственных Swing- компонентов. Далее будут рассмотрены основные из них, используемые в работе.
Кроме того, Energy Profiler доступен при запуске приложений толь- ко на Android 8.0 и выше, что позволяет охватить около 60% от всех устройств [6].
3.1.2. Плагин AEON
AEON (Automated Android Energy-Efficiency Inspection) — плагин к Android Studio [7], который, согласно предложенному авторами описа- нию, предлагает следующую функциональность:
• cтатический анализ для обнаружения распространённых ошибок при использовании Android API (в частности, wake locks);
• оценка энергопотребления на уровне метода;
• профилирование и визуализация энергии.
Для использования данного плагина требуется установка приложе- ния Trepn Profiler от компании “Qualcomm”, а также наличие Android- устройства с чипсетом серии Qualcomm Snapdragon. Кроме того, на весну 2020 года в доступе находится бета-версия плагина, а последние обновления в репозитории датируются сентябрём 2016 года2.
2https://bitbucket.org/david_gonzalez_samudio/aeon_suite/src/master/
3.1.3. Плагин EnSights
EnSights — плагин к Android Studio, предоставляющий сведения о расходе энергии на основании изменения значений различных метрик между двумя версиями приложения [8]. Дляизмерений энергии исполь- зуется инструмент PowerTutor [9].
На официальном сайте, где размещаются плагины для Android Studio, EnSights не найден. Это может свидетельствовать о том, что данный плагин так и не вышел за пределыисследовательской работы.
• Окна инструментов — окна внутри IDE для отображения инфор- мации, могут иметь свои панели инструментов и отображатьнесколь- ко вкладок. Располагаются вдоль левого, правого и нижнего края главного окна IDE.
• DialogWrapper — базовый класс для создания модальных и неко- торых немодальных окон, умеющий отображать текст ошибки в случае некорректных данных ввода и управлять диалогом при по- мощи “горячих” клавиш.
• WizardDialog — класс, наследуемый от DialogWrapper и позволя- ющий создавать многостраничные диалоги.
• Всплывающие окна — полумодальные окна, не имеющие кнопки закрытия и исчезающие автоматически при потере фокуса.
• Уведомления — немодальные окна, рекомендуемые к использо- ванию вместо модальных окон при уведомлении пользователя об ошибках и в других ситуациях, когда может потребоваться его внимание.
• JBTable, JBLabel, JBList, Tree и многие другие.
“Navitas Profiler” имеет собственное окно инструментов. WizardDialog отлично подходит для окна конфигурации, а JBTable и Tree — для отоб- ражения информации об энергопотреблении.
4. Плагин Navitas Profiler
4.1. Архитектура
Плагин написан на языке Kotlin, с применением таких архитектур- ных шаблонов, как Model-View-ViewModel (MVVM) и Repository. Для подписки на события используется библиотека RxJava 2.
Рис. 2: Диаграмма компонентов Плагин имеет трёхслойную архитектуру:
• В слое domain хранятся модели данных, используемые в бизнес- логике плагина. Обычно такие данные отображаются в пользова- тельском интерфейсе. Также здесь объявлены интерфейсы репо- зиториев.
• В слое data хранятся модели данных, не относящиеся к бизнес- логике напрямую, но при этом используемые в работе плагина. К примеру, из таких данных могут впоследствии создаваться дан- ные для domain-слоя. Так, например, модели собранных логов с устройства из data-слоя в процессе работы анализатора преобразу-
ются в domain-модели с информацией об энергопотреблении. Так- же здесь реализованы интерфейсы репозиториев.
• В слое presentation лежат классы, связанные с пользовательским интерфейсом. Во view содержатся UI-компоненты, распределён- ные по функциональности на пакеты (например, задание конфи- гурации для профилирования и просмотр отчётов по результатам профилирования — это разные функциональности). Во viewmodel хранятся модели представления [11].
Также были выделены следующие компоненты (отдельно от слоёв):
• action — для действий, добавляемых в окно инструментов “Navitas Profiler”;
• extensions — для функций-расширений Kotlin;
• tooling — для различных классов-инструментов, таких как парсер JSON, анализатор собранных с устройства логов и др.
4.2. Работа с плагином
Процесс работы с плагином состоит из четырёх этапов. Вначале пользователь задаёт необходимую конфигурацию и запускает профили- рование. Затем, по его завершении, собранная сустройства информация выгружается на компьютер и анализируется. После этого пользователь видит отчёт по результатам профилирования.
Рис. 3: Процесс работы с плагином
4.2.1. Конфигурирование
Пользователь указывает Android-модуль и тесты из этого модуля, которые будут запущены для профилирования. Также он указывает
Power Profile (данная функциональность — задача другого члена ко- манды).
4.2.2. Профилирование
Для выполнения профилирования используется Gradle-задача из “NaviProf” под названием defaultProfile. Ей в параметры передаётся кон- фигурация, заданная пользователем, а запуск осуществляется благода- ря методу runTask класса ExternalSystemUtil.
Однако, прежде чем запустить эту задачу, сначала нужно подклю- чить “NaviProf” к целевому проекту. Это достигается за счёт модифи- кации файлов build.gradle, через использование определённых методов класса PsiFile, позволяющих менять структуру PSI-модели.
4.2.3. Проведение анализа
На вход анализатору поступает JSON, содержащий собранные с устройства логи, а также Power Profile, выбранный пользователем на этапе конфигурирования. На выходе — информацияоб энергопотребле- нии стека вызовов (только пользовательских методов, без Android API и сторонних библиотек) для каждого теста, с разделением по процессам и потокам.
Рис. 4: Схема преобразования собранных данных
Оценка энергопотребления CPU на протяжении вызова метода вы- числяется по следующей формуле:
ECPU = ∑
∑ (endTimeij − startTimeij) ∗ Cij (1)
i∈cores j∈frequenciesi
где startTimeij и endTimeij — время пребывания ядра i на частоте j в момент входа и выхода из метода соответственно, Cij — коэффициент из Power Profile.
4.2.4. Отображение результатов
Информация об энергопотреблении всех тестов и каждого из них по отдельности представляется как в текстовом формате, так и в графи- ческом (работа над графиками — задача другого членакоманды).
Рис. 5: Пример отчёта об энергопотреблении теста
4.3. Ограничения
1. Не поддерживается инструментовка файлов build.gradle, написан- ных на Kotlin.
2. “NaviProf” поддерживает один формат собираемых логов, однако для некоторых Android-устройств этот формат может бытьиным.
5. Проверка работоспособности
Правильность работы плагина в ходе его разработки проверялась на специально созданном Android-приложении. Во время проверки те- стировались различные сценарии использованияплагина:
• корректное задание конфигурации (например, нельзя выбрать мо- дуль без единого теста);
• выполнение модификации файлов build.gradle;
• правильность переходов между экранами внутри окна инструмен- тов “Navitas Profiler”;
• отображение соответствующей выбранному тесту информации об энергопотреблении;
• достоверность отображаемого стека вызовов для конкретного те- ста.
Заключение
В результате работы были выполнены следующие задачи:
1. Проведён обзор существующих решений.
2. Проведён обзор технических средств по разработке плагинов для Android Studio.
3. Разработан плагин для Android Studio по оценке энергопотребле- ния кода и проведена интеграция с Gradle-плагином по профили- рованию “NaviProf”.
4. Работа плагина проверена на тестовом Android-приложении.
У данной работы имеются дальнейшие перспективы по её развитию: добавление новых компонентов в анализ (Wi-Fi, Bluetooth и др.) и но- вых видов отчётов (например, трассы энергопотребления), а также воз- можности сопоставления результатов профилирования с предыдущими запусками.
Список литературы
[1] Number of smartphone users worldwide from 2016 to 2021. – URL: https://www.statista.com/statistics/330695/ number-of-smartphone-users-worldwide/ (online; accessed: 22.11.2019).
[2] Mobile operating systems’ market share worldwide from January 2012 to July 2019. – URL: https://cutt.ly/Ve6r1RW (online; accessed: 22.11.2019).
[3] Background optimizations. – URL: https://developer.android. com/topic/performance/background-optimization.html (online; accessed: 17.11.2019).
[4] App Standby Buckets. – URL: https://developer.android.com/ topic/performance/appstandby (online; accessed:17.11.2019).
[5] Inspect energy use with Energy Profiler. – URL: https://developer. android.com/studio/profile/energy-profiler (online; accessed: 17.11.2019).
[6] Google kills Android distribution numbers on the web, but we’ve got you covered. – URL: https://9to5google.com/2020/ 04/10/google-kills-android-distribution-numbers-web (online; accessed: 01.05.2020).
[7] AEON: Automated Android Energy-Efficiency Inspection. – URL: https://plugins.jetbrains.com/plugin/ 7444-aeon-automated-android-energy-efficiency-inspection/ (online; accessed: 17.11.2019).
[8] Hareem Sahar. Abdul Bangash. Mirza Beg. Towards Energy Aware Object-Oriented Development of Android Applications. – Sustainable Computing: Informatics and Systems, 2018. – URL: https://doi. org/10.1016/j.suscom.2018.10.005.
[9] PowerTutor: A Power Monitor for Android-Based Mobile Platforms. – URL: http://ziyang.eecs.umich.edu/projects/powertutor/ (online; accessed: 24.11.2019).
[10] IntelliJ Platform SDK. – URL: http://www.jetbrains.org/ intellij/sdk/docs/welcome.html (online; accessed: 24.11.2019).
[11] Model–view–viewmodel. – URL: https://en.wikipedia.org/ wiki/Model%E2%80%93view%E2%80%93viewmodel (online;accessed: 19.05.2020).