Расписание пар, заметки, личный кабинет БАРС и крутая карта для студентов и преподавателей НИУ МЭИ. Самое функциональное, легковесное и стабильное МЭИшное приложение.
Фичи приложения:
- Просмотр расписаний групп и преподавателей
- Переключение между ТЁМНОЙ ТЕМОЙ и светлой темой.
- Переключение между русским и английским языком в приложении.
- Дашборд с ближайшими парами, заметками, расписанием сессии и объявлениями.
- Карта корпусов, общежитий, мест общепита, ключевых мест кампуса МЭИ и кучи других мест.
- Добавление заметок к парам.
- Поиск по заметкам, карте, группам и преподавателям.
- Предпросмотр расписаний групп и преподавателей прямо с экрана поиска.
- Кэширование расписаний и геометок на устройстве.
- Самый маленький вес приложения по сравнению с конкурентами.
- Открiтый исходнiй код.
- Меми.🤗💪😸😃
Мы все еще работаем над тем, чтобы вернуть личный кабинет БАРС.
Пулл реквесты приветствуются.
- Android 5.0 Lollipop и выше (Api V21+)
- Доступ к интернету
- Многомодульная, упрощенная Clean Architecture с активным использованием DI Koin.
- Vivid Money Elmslie
- Самописная навигация
- Retrofit + RxJava для REST Api
- Vanilla SQLite для хранения в БД заметок и избранных расписаний
- Firebase
- Crashlytics
- Analytics
- Remote Config
- Для подгрузки изображений используется Picasso (из-за соотношения веса и скорости работы)
- Для тестирования используется JUnit 5 + Kotest
Для слоя представления используется паттерн ELM на базе Vivid Money Elmslie. Подробнее про устройство читайте в репозитории по ссылке. Разделение на common, domain, feature модули.
- common - могут зависеть от других common-модулей
- domain - могут зависеть от других common-модулей и domain-модулей
- feature - могут зависеть от common-модулей и domain-модулей, но ни в коем случае не зависят от feature-модулей.
Сделано это для ускорения билда и уменьшения связности кода. Также повсюду выпилен kapt. Везде, где можно, используются обычные kotlin-модули вместо android-модулей. В android-модулях подключено минимум зависимостей, минимум плагинов. Используются обыкновенные groovy gradle скрипты вместо buildSrc и KTS.
- Пришлось мигрировать на RxJava, потому что она
помогает выявить таких же дидов как явсем понятна, существует давно и все ее подводные камни известны. Для корутин теперь есть аналог Rx - называется Flow, однако StackTrace кода на корутинах в крашлитике вообще не позволяет понять, где именно произошла проблема. - Elmslie написан для RxJava
Потому что сколько-нибудь большое количество экранов превращало визуальный граф приложения в кашу/вермишель (что вам больше нравится). И вообще эта штука предназначена для использования в связке с ViewModel. Текущая реализация навигации от гугла очень странно работает с жизненным циклом фрагментов и не имеет никаких преимуществ для проектов, построенных не на базе плюшек из Android Jetpack.
Room, к сожалению, оставаясь типичным ORM, требует кодогенерации (и плагина kapt). Во всех модулях, в которых объявляются сущности для Room, используются аннотации Room и, собственно, kapt. Это очень негативно влияет на время сборки проекта. Плюс, изначально БД была спроектирована не правильно, отчего стало невозможным тестировать миграции.
Теперь в приложении универсальная запускалка SQL скриптов AppDatabase#fetch
и класс LiquidSchema
, производящий миграции путем выявления разницы между старой и новой схемой.
-
Добавьте
google-services.json
от Firebase в корень модуляapp
и вapp/src/debug
(можно один и тот же). Инструкция по получениюgoogle-services.json
. -
В глобальный
gradle.properties
добавьте полеmpeiapp_google_maps_api_key="{SECRET}"
, где{SECRET}
- ключ от API Google Maps. Инструкция по получению ключа. -
Скачайте и установите JDK 11 версии, укажите в настройках проекта java 11 по умолчанию для Gradle и компилятора Kotlin:
Preferences -> Other Settings -> Kotlin Compiler -> Target JVM version
Project Structure... -> SDK Location -> JDK Location
-
Установите плагин Kotest, с ним будет проще гонять тесты.
После первых двух пунктов проект соберется, после двух других начнут работать тесты. В связи со скорым выходом Gradle 7.0 и AGP 7.0 проект перешел на Java 11.
По понятным причинам в репозитории не будут опубликованы оригинальные ключи от Google Maps API и Firebase API. Используйте свои ключики.