Этим летом у детей — выступление в Disneyland. Организаторы попросили установить приложение Travelbound, чтобы посмотреть расписание, маршрут и информацию по отелю. Автор статьи взбешён: это просто текст, картинки и ссылки на PDF, доставленные через интернет. Почему это вообще приложение, а не сайт?
У приложения есть только две «фишки», которых нет у веб-страницы, и обе — антифичи. Оно шлёт трекинг по Google Account разработчикам. И показывает рекламу других поездок, которую они называют «вдохновением». Веб-страница была бы копируемой, печатаемой, сохраняемой, добавляемой в закладки, искалась бы, работала бы на любом устройстве и была доступнее. Автор решает «починить» этот косяк.
Он разворачивает виртуальное устройство в Android Studio, рутует его через rootAVD и Magisk, ставит HTTP Toolkit, чтобы перехватывать трафик только от Travelbound. Выясняется: приложение просто собирает логин и пароль в URL вида https://travelbound.api.vamoos.com/api/itineraries/{username}-{password}. С сервера приходит JSON с содержимым приложения: пункты маршрута, ссылки на «вдохновения» и массив файлов (картинок, PDF). Картинки живут в S3 с коротким сроком жизни, так что JSON надо перезапрашивать по расписанию.
Автор пишет Ruby-скрипт на Cron — он забирает JSON и собирает HTML-страницу. Рекламу он выкидывает полностью. Оставляет только расписание и все неиспользуемые файлы (чтобы не потерять PDF-документы). Страницу вешает с паролем — тем же, что дали группе. Сырой JSON прячет в details на случай, если появятся новые поля.
Сравнение: 43-мегабайтное приложение, которое распухает до 124 МБ при загрузке контента, с трекингом и рекламой — против 0,05 МБ веб-страницы (плюс 35 МБ картинок, которые не качаются без явного запроса). Она даёт все стандартные функции веба и работает на любых устройствах. Автор признаёт: для некоторых задач приложения нужны. Но не для этого. Он просто сделал выбор доступным для всей группы.