Перейти к содержимому
Назад к проектам

KIMEP Mobile Clients

Неофициальное Android-приложение для расписания и оценок KIMEP.

Неофициальный Android-клиент, не связанный с KIMEP и не одобренный университетом.

Год
2026
Роль
Реверс-инжиниринг, Android-разработка и релиз
Экраны расписания, академического календаря и настроек напоминаний KIMEP Mobile

О проекте

Официальное мобильное приложение университета убрали из App Store, но сервис, на котором оно работало, остался доступен. Я разобрал, как старое приложение общалось с этим сервисом, задокументировал это и построил поверх него нативный Android-клиент с более быстрым интерфейсом, офлайн-кешем и напоминаниями о занятиях. Приложение распространяется подписанным APK через небольшую страницу загрузки, а релизы собираются и проверяются в CI.

Технологии

  • Kotlin
  • Jetpack Compose
  • Material 3
  • Ktor
  • kotlinx.serialization
  • DataStore
  • AlarmManager
  • Python
  • mitmproxy
  • GitHub Actions

На чём всё держится

  1. Расписание мгновенно отображается из кеша и обновляется в фоне. Если обновление не удалось, на экране остаётся сохранённое расписание, а не ошибка.
  2. Время занятий приходит в устаревшем формате дат, привязанном к прежнему смещению UTC+6. В 2024 году Казахстан перешёл на UTC+5, поэтому база часовых поясов сдвинула бы каждую пару на час раньше. Приложение декодирует время с фиксированным смещением.
  3. Напоминания срабатывают за час и за десять минут до занятия. Код каждого будильника вычисляется из занятия, недели и типа, поэтому старые будильники можно отменить, не храня их, а после перезагрузки все будильники восстанавливаются.
  4. Академический календарь берётся из PDF университета. Небольшой Python-скрипт восстанавливает таблицу по координатам слов и встраивает результат в приложение.

Если продолжать

  1. Добавить тесты для декодирования дат и планирования напоминаний, прежде чем расширять приложение дальше.
  2. Сделать напоминания устойчивыми к агрессивной оптимизации батареи на некоторых Android-устройствах, поддержать планшеты и начать iOS-клиент.
Следующий проектSmoke Alarm Telegram Bot