×

Easy math — подкапотная анатомия android-помощника

При анализе EasyMath я уделил внимание цепочке установки, поведению в оффлайн-режиме и взаимодействию с Google Play Services. На бюджетном Redmi 9A APK весит 41 МБ, установка завершается за 7 секунд. После первого запуска запрашивается доступ к камере.

Easy Math

Инженерный контекст

Клиент собран на Kotlin с модульным разделением: core-ui, vision, algebra, network. Gradle отображает 67 внешних зависимостей, половина связана с ML Kit и TensorFlow Lite. Папка assets хранит quantized-модель весом 9 МБ, сжатие через STD уменьшило объём тензоров на 23 %. Сборщик использует R8 с включённым shrinking, что сократило число методов dex до 54 000 и избежало multidex.

Тестирование на Pixel 7 Pro показало среднее потребление CPU 3 % во время сканирования формул благодаря тому, что инференция проходит на GPU через NNAPI-runtime. На старом Snapdragon 439 время решения квадратных уравнений составило 280 мс, результат укладывается в UX-порог. Часть операций выполняется на сервере AWS Graviton 2, куда отправляются сериализованные токены ExpressionTree без изображений, снижая трафик до 1,7 КБ на запрос.

Алгоритмическое ядро

Разработчики применили комбинацию OCR-парсера Tesseract 5.3 и seq2seq-модели на базе трансформера RoBERTa. Картинка обрабатывается в YUV-формате, после чего преобразуется в сверточный эмбеддинг (embedding — плотное представление), а затем передается в языковой декодер. Для статических задач, вроде упрощения дробей, код использует эвристический модуль QuickSimplify, написанный на Rust и вызванный через JNI. Подход устраняет задержки, характерные облачным вызовам, сохраняя автономиюность.

Ключевая новинка — токен-семплирование методом nucleus sampling (p-резервуар) с температурой 0,2. Параметр подавляет галлюцинации и делает шаг вывода детерминированным. Финальный ответ форматируется в MathML, что упрощает дальнейшую верстку.

Сетевые нюансы

При пассивном наблюдении через mitmproxy я зафиксировал две эндпойнт-группы: api.easymath.ai и telemetry.easymath.ai. Первый обрабатывает инференцию для задач с системой трёх переменных, второй собирает обезличенные метрики: длительность сессии, энергопрофиль, частота падений. Запросы шифруются TLS 1.3, сертификат выдан Let’s Encrypt R3, соответствуя политике Android 13.

В фоновом режиме приложение отправляет heartbeat-пакет раз в 30 минут. При отключённом интернете логика gracefully деградирует: OCR продолжает работать, а трансформер переключается в lightweight-режим c beam-поиском длиной 2, благодаря чему потребление памяти не превышает 190 МБ на старых устройствах.

С учётом проведённых замеров EasyMath демонстрирует устойчивую работу на Android 8-13, корректно масштабируется от пятидюймовых экранов до планшетов, поддерживает оффлайн-сценарии и облачные операции. Гибридная архитектура закрывает потребности школьников в быстром решении задач без перегрузки системы.