Приложение на Java: стек, цена от 500 000 ₽ и что делать, когда пропал заказ
Мобильные приложения на Java пишут для Android: платформа поддерживает язык полностью, хотя Google для нового кода рекомендует Kotlin. Java разумно выбирать, если в команде уже есть Java-разработчики или готовый код. На iOS Java нативно не работает: там нужен Swift или кроссплатформенный фреймворк. Разработка в UKVED начинается от 500 000 ₽.
🤔 Почему возникает выбор «Java или Kotlin» и чем он грозит бюджету
Директор оптовой компании в Москве получает две сметы на приложение для торговых представителей. В одной написано «Java», в другой «Kotlin», цены близки, а каждый подрядчик уверен, что второй ошибается.
Спор появился в 2019 году, когда Google объявил Kotlin приоритетным языком для Android. Java никуда не делась: Android SDK, библиотеки Jetpack вроде Room и ViewModel, Retrofit для запросов к серверу работают из Java без оговорок. Но новый инструмент построения интерфейсов, Jetpack Compose, пишется только на Kotlin, а свежие примеры в документации Google всё чаще даются на нём. Поэтому новые экраны в Java-проекте приходится собирать по старой схеме, через XML-разметку.
Если выбрать язык по привычке подрядчика, а не по вашей ситуации, рано или поздно вы получите код, который некому поддерживать: разработчик ушёл, а новому придётся разбираться в чужой архитектуре. Вы заплатите второй раз за то, что уже работало.
Java оправдана в двух случаях. В компании уже есть Java-бэкенд и разработчики, которые смогут вести и приложение. Либо есть готовое Java-приложение, и его дешевле доработать, чем переписывать. Для нового проекта с нуля и без Java-команды чаще разумнее Kotlin. Оба языка живут в одном проекте, поэтому переход можно делать по частям.
⚙️ Как устроена разработка на Java: стек и этапы
Инструменты и библиотеки
Проект собирают в Android Studio с системой сборки Gradle. Запросы к серверу отправляет Retrofit поверх OkHttp, локальную базу на SQLite ведёт Room, фоновую отправку данных берёт на себя WorkManager. Экраны строят на ViewModel и LiveData по схеме MVVM: логика отделена от интерфейса, и её можно проверять тестами без запуска телефона.
Этапы работы
- ✓Разбор задачи и прототип экранов: кто пользуется приложением и что оно делает без связи.
- ✓Проектирование API и обмена с учётной системой.
- ✓Разработка клиента и серверной части.
- ✓Тестирование на реальных устройствах, включая недорогие модели с небольшим объёмом памяти.
- ✓Публикация в RuStore; для внутренних приложений ещё и установка APK-файлом или через MDM.
- ✓Поддержка и обновления под новые версии Android.
Дольше всего обычно идёт не вёрстка экранов, а согласование обмена: какие поля передавать, как часто, что делать при конфликте правок. Если приложению нужны данные из 1С, этот этап стоит проектировать сразу вместе с интеграцией приложения с 1С, а не добавлять в конце.
📊 Java, Kotlin или кроссплатформа: что выбрать под задачу
Выбор начинается с вопроса, на каких платформах будут работать сотрудники или клиенты. Если только на Android-устройствах, например на терминалах сбора данных, нативный подход даёт больше всего контроля над оборудованием. Если нужен ещё и iPhone, вариантов больше.
| Подход | Платформы | Когда подходит | Слабое место |
|---|---|---|---|
| Java, нативно | Android | Есть Java-команда или готовый код, интерфейс классический | Нет Jetpack Compose, новые примеры чаще на Kotlin |
| Kotlin, нативно | Android | Новое приложение с нуля, современный интерфейс | Нужны разработчики на Kotlin, старый Java-код придётся стыковать |
| Flutter или React Native | Android и iOS | Нужны оба магазина при ограниченном бюджете, интерфейс типовой | Сканеры, Bluetooth и фоновая работа часто требуют нативных модулей |
| Два нативных проекта (Kotlin или Java и Swift) | Android и iOS | Высокие требования к скорости и работе с оборудованием | Два кода, два бюджета, две команды |
| 1С:Мобильная платформа | Android и iOS | Приложение продолжает базу 1С, команда знает 1С | Интерфейс и функции ограничены возможностями платформы |
Если приложение по сути окно в базу 1С (остатки, заказы, согласование документов), посмотрите разработку на 1С:Мобильной платформе: такой вариант иногда обходится дешевле Java-проекта, потому что команда пишет один код на языке 1С. Когда нужны нестандартный интерфейс, сканер с особым SDK или сложная работа в фоне, нативная Java или Kotlin надёжнее.
🐞 Почему Java-приложения виснут и теряют данные без связи
Торговый представитель спускается в подвальный склад клиента, связь пропадает, а в корзине уже тридцать позиций. Нажатие на «Отправить заказ» замораживает экран, и Android предлагает закрыть приложение. Представитель соглашается, открывает приложение снова, а корзина пуста.
Первая причина — тяжёлая работа в главном потоке. Он отвечает за отрисовку, поэтому если занят около 5 секунд, система показывает окно «Приложение не отвечает» (ANR). Вторая — заказ жил только в оперативной памяти и исчез вместе с закрытым экраном. Третья характерна именно для Java: анонимный внутренний класс держит неявную ссылку на внешний Activity, но Activity уже закрыт, поэтому сборщик мусора не может его освободить, и приложение постепенно съедает память.
Каждый потерянный заказ — это звонок клиенту и повторный ввод. После нескольких таких случаев представители возвращаются к Excel и мессенджеру, а приложение, которым не пользуются, не окупится, сколько бы в него ни вложили.
🔧 Как исправить зависания и потерю заказов
Убрать тяжёлую работу из главного потока
Сетевые запросы и работу с Room переносят в фоновые потоки через ExecutorService или WorkManager; в главном потоке остаётся только отрисовка. В старых проектах часто встречается AsyncTask: Google объявил его устаревшим в Android 11, и заменить его стоит в первую очередь.
Сохранять заказ локально до отправки
Нажатие кнопки сначала записывает заказ в таблицу Room со статусом «ожидает отправки». WorkManager повторяет отправку, когда появляется сеть. Чтобы повтор не создал в 1С второй документ, у заказа есть собственный идентификатор, и сервер отбрасывает запрос с тем же номером.
Найти и закрыть утечки памяти
Библиотека LeakCanary, подключённая к отладочной сборке, показывает, какой экран остался в памяти и кто на него ссылается. Типовое лечение: заменить анонимные классы на статические вложенные, хранить ссылки на Activity через WeakReference и отписываться от слушателей в onDestroy.
🔁 Что делать, если ошибка повторяется после исправления
Значит, вы чините симптом. Начните со сбора данных, а не с догадок: подключите сбор аварийных остановок, например AppMetrica или самостоятельно развёрнутый Sentry, и сгруппируйте сбои по версии приложения, версии Android и модели устройства.
Часто выясняется, что падает одна модель: производитель агрессивно закрывает фоновые процессы, и WorkManager не успевает отправить заказ. Тогда в инструкции для сотрудников появляется пункт про исключение приложения из экономии заряда, а в коде — проверка очереди неотправленных заказов при запуске.
Если трассировка ведёт в сетевой слой, смотрите на время ответа сервера. Приложение ждёт 1С, а 1С отвечает слишком долго, потому что обработчик запроса делает тяжёлую выборку. Исправлять нужно HTTP-сервис в базе, переписывание клиента здесь ничего не изменит.
🛡 Как предотвратить сбои ещё на этапе разработки
- ✓Включите StrictMode в отладочной сборке: он сразу сообщает о работе с диском и сетью в главном потоке.
- ✓Покрывайте бизнес-логику тестами JUnit, а главные сценарии, например «оформить заказ без сети», проверяйте UI-тестами Espresso.
- ✓Запускайте сборку и тесты автоматически при каждом коммите.
- ✓Проверяйте приложение на нескольких бюджетных телефонах, потому что сотрудникам выдают именно такие.
Отдельно проверьте юридическую сторону. Если приложение собирает персональные данные граждан России, 152-ФЗ требует записывать и хранить их в базах на территории РФ. Токены доступа храните в Android Keystore, а не открытым текстом в SharedPreferences.
И закладывайте поддержку. Android меняет правила каждый год: с версии 13 приложению нужно отдельно запрашивать разрешение на уведомления, а ограничения фоновой работы ужесточаются. Без ежегодного обновления целевой версии SDK приложение однажды перестанет проходить проверку магазина.
💼 Сколько стоит приложение на Java и как мы его делаем
Разработка мобильных приложений у нас начинается от 500 000 ₽. Итоговая смета зависит от числа экранов, офлайн-режима, оборудования (сканер штрихкодов, принтер этикеток) и объёма обмена с учётной системой. Условия собраны на странице цены и тарифы, а точную цену мы называем после разбора задачи.
Мы работаем с 1С как с основной системой заказчика, поэтому обмен проектируем вместе с приложением, а не после него. Заказы, остатки и цены идут из базы через HTTP-сервис без ручных выгрузок, а офлайн-очередь и защиту от дублей закладываем в проект с самого начала. Если нужен кабинет для клиентов, где они сами оформляют заказ из актуальных остатков, посмотрите B2B-приложение с 1С.
Если Java вам не нужна, мы так и скажем: для части задач дешевле Kotlin или мобильная платформа 1С. Опишите, кто будет пользоваться приложением и что оно должно делать без связи, и мы вернёмся с выбором стека и сметой.
❓ Частые вопросы
Можно ли писать мобильное приложение на Java в 2026 году?
Да. Android полностью поддерживает Java, и на ней работают действующие корпоративные приложения. Google рекомендует Kotlin для нового кода, а часть новых инструментов, например Jetpack Compose, доступна только из него. Для приложения с классическим интерфейсом и готовой Java-командой язык остаётся рабочим выбором.
Java или Kotlin: что выбрать для нового корпоративного приложения?
Kotlin берут для нового приложения с нуля: он короче, безопаснее при работе с пустыми значениями и совместим с Jetpack Compose. Java выбирают, когда нужно доработать существующий код или в компании есть Java-разработчики. Оба языка работают в одном проекте, поэтому переход можно делать постепенно.
Можно ли на Java сделать приложение сразу для Android и iOS?
Нативно нет: на iOS Java не работает, там пишут на Swift. Варианты: отдельный iOS-проект, кроссплатформенный фреймворк вроде Flutter или React Native либо 1С:Мобильная платформа, если приложение продолжает базу 1С. Выбор зависит от того, нужны ли приложению сканер штрихкодов, Bluetooth и фоновая работа.
Сколько стоит разработка мобильного приложения на Java в Москве?
Разработка мобильных приложений в UKVED начинается от 500 000 ₽. Итоговая смета зависит от числа экранов, офлайн-режима, подключаемого оборудования, например сканера штрихкодов, и объёма обмена с 1С. Точную стоимость называем после разбора задачи: какие роли у пользователей и что приложение должно делать без связи.
Как приложение на Java подключается к 1С?
Приложение обращается к 1С через HTTP-сервисы или веб-сервисы, которые публикуются на стороне базы. Заказы, остатки и цены передаются в формате JSON, а при обрыве связи приложение хранит данные локально и отправляет их позже. Повторная отправка не создаёт дубль документа, если у заказа есть собственный идентификатор.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

