Как я решил войти в Android Developing через вайбкодинг

Или как собрать и довести продукт до релиза без кодинга и почти бесплатно. Или моя попытка разобраться в процессе разработки и далее использовать как учебное пособие не делая скучные "Hello world", калькуляторы. Что-то живое, нужное и настоящее.

тут не будет полного разбора кода, больше сам процесс
1. Идея
2. Поиск решений
3. Реализация

Как я решил войти в Android Developing через вайбкодинг

Я закончил колледж в далеком 2016 году, изучали мы в основном Delphi и чуть чуть C++. Работал я потом в основном в поддержке и администрировании и решил попробовать вернуться в разработку

Идея

Начнем с идеи, с нее все и начинают. А возникла она довольно просто, точнее даже две идеи. Ну и одна более интересная идея в том чтобы попробовать учиться, но не писать скучные калькуляторы, а попробовать собрать целостный продукт и далее шаг за шагом разбирать код, как что работает и так учиться.

Поговорим о специфике. В Берлине есть два крупных "оператора" это BVG, управляет: метро, автобусы, трамваи. И DB(дойче бан, ну как наше РЖД), ему принадлежит сеть городских электричек S-Bahn, есть еще так называемые региональные электрички, там две компании регулируют. Все это входит в общее объединение, называемое VBB.

Ранее я постоянно пользовался местным приложением оператора общественного транспорта и Google Maps. Приложение от компании BVG в нем собирается вся информация в том числе и о электричках. Пользовался, пока они решили не обновить якобы для удобства и... Это стало ужасно. Рейтинг в Google Play упал ниже 2. Вы наверное спросите, а что произошло? А произошло следующее. Ранее открыв приложение каждый практически сразу видел свою остановку и самое главное, актуальное расписание. Ты всегда мог в практически 2 клика увидеть "табло"остановки. А что сейчас. Сейчас для того чтобы открыть "табло" я должен на карте найти свою остановку, со второго и третьего раза правильно кликнуть на значок остановки, которого кстати иногда и нет в некоторых местах. Жутко бесило. Надо сказать спасал виджет пока он не перестал работать. И самое главное, сотни жалоб, но ничего так и не изменилось.

Поэтому возникло со временем две мысли. А что если написать свое приложение? А что если попробовать использовать ИИ от google Gemini? Т.е. посмотреть что могут современные модели.

Реализация, стек.

Итак, выбор через что писать выпал на Gemini, с Claude я не был знаком. GPT не выбрал потому что он не позволяет в бесплатной версии работать с таким массивом данных, поле ввода данных сильно ограничено. Написано приложение на языке Kotlin, используется Android studio.

Так как я ранее упомянул об транспортном объединении VBB покрывающего Берлин и часть земли Браденбург, то все транспортные компании работающие в Берлине и окрестностях отправляют данные в VBB, логично было принято решение тянуть данные именно от туда. Информация берется через публичный API, мне не пришлось использовать генерацию каких либо ключей, регистрацию и так далее. Что очень удобно для маленьких разработчиков, но главное условие это некоммерческое использование. Т.е. я не могу сделать платным или вводить подписки. Да и к тому же устав от кучи рекламного мусора, я решил избавить свой продукт от него.

Начали мы с самого простого, а это просто табло. Я составил Prompt, объяснил что мне нужны карточки, с информацией отправления, через сколько минут прибудет тот или иной транспорт.

Логика работы
  • Определяем местоположение

  • отправляем координаты серверу VBB

  • получаем ответ от сервера: название остановки, маршруты, время

Следующим этапом для меня стала реализация кнопок остановок рядом, группировки по типу транспорта и номеру маршрута. Соотвественно нажимая на автобусы, мы начинаем видеть только автобусы и так далее.

Следующим этапом мы реализовали возможность поиска. Пользователь вбивает несколько букв из названии станции или остановки, приложение стучится на сервер и получает список остановок с таким именем.

Следующее что получилось реализовать, это оповещения об изменениях. Когда мы стучимся по api мы получаем ответ в виде JSON в котором есть информация в том числе и об авариях. Приложение понимает что вот это оповещение об изменении и соответственно пишет вверху что сейчас автобус 123 отменен по этой причине. Самое главное реализовано то чтобы оповещения показывались только те что относятся к данной остановке и линиям на этой остановке, а не все подрят засоряя экран визуальным мусором. Ну и последнее что я реализовал на экране это возможность увидеть расписание конкретного маршрута

Для каждой линии в Берлине есть свой цвет и мы его применяем для того чтобы покрасить иконку.

Следующая задача была у меня, добавить карты. Я остановился на выборе OSM. Дело в том что мы можем не только получать информацию о времени, ну и также примерное местоположение транспорта. Я внедрил функцию радар. Т.е. по сути мы открывая карту на определенном масштабе, как бы сканируем все вокруг отправляя запрос о том какие автобусы в данной области сейчас ходят. Что дальше, а дальше мы получаем примерные координаты каждого автобуса в зоне видимости. Далее вступает чуть чуть математики, чтобы было движение не рывками, приложение примерно высчитывает с какой скоростью едет автобус, после чего делает расчет где примерно автобус, в следствии чего движется маркер автобуса. Маркер это маленькая капля которую программно красят в нужный цвет, и согласно расчетам поворачивают в ту сторону куда едет автобус.
В дальнейшем я сделал группировку по типу транспорта, отображние остановок и возможность кликнуть по автобусу и увидеть его маршрут, а также расписание.

Логичным продолжением стала реализация построения маршрута.
Вот тут я столкнулся с проблемой. Дело в том что API не умеет корректно обрабатывать запросы по адресам или координатам при запросе во время построения маршрута. Выход нашелся в использовании поиска по остановкам. Также есть возможность посмотреть на карте и если есть какие-то оповещения о проблемах на линии маршрута, их также видно.
Ну главное, раз мы можем смотреть маршрут на карте, почему бы кнопку в карточку автобуса не добавить чтобы посмотреть его маршрут на карте.

Ну и главное теперь, приложение получилось очень монолитным, реализовано много функций не сломав при этом простоту. Главный акцент неизменно это табло отправлений. Тесты показали около 5 секунд от запуска до прогрузки табло отправлений. Весь код занимает около 2000 строк

Релиз в Google Play.

Вот мы и добрались до самого интересного. Продукт вроде бы есть, рабочий, а как релиз сделать.

  1. Нужно зарегистрироваться как разработчик, указав персональные данные

  2. Заплатить взнос 25 евро

Теперь мы должны собрать проект, подписать и залить aab в гугл консоль. И тут я столкнулся с довольно большой болью. Проблема в том что теперь все кто зарегистрировался после 2023 года должны провести 14 дней закрытого теста. Если ты компания, то во первых тебе не надо это проходить, а во вторых найти в штате 20 тестировщиков не проблема. Проблема для мелких разработчиков как я. Я пишу не с целью позвать к себе тестировщиков, нет статья не об этом, просто маленькая боль на пути к релизу.

Выводы.

Казалось бы какие выводы. Мои личные выводы такие.

  • Что теперь человеку с минимальным опытом реально довести проект до релиза

  • Новые языковые модели достаточно сильны чтобы объяснить код, разобрать, найти ошибки или даже полностью написать проект

  • Из опыта общения с Gemini понял что лучше всего для написания подходит Canvas.

  • Это классный способ разобраться в разработке и сделать полноценный продукт, а не делать скучные маленькие проекты и уже на примере готового проекта разобрать код и понять как что устроено и мне кажется так намного быстрее чем начинать с маленьких простых проектов которые я еще делал в колледже

Планы

  • Довести до релиза

  • Разбить один файл на несколько

  • Понять полностью код и использовать как пособие по обучению


Внимание!

Официальный сайт бота по ссылке ниже.

Официальный сайт