Swift в Apple: перенос службы мониторинга паролей с Java
Swift широко используется в проде для создания облачных сервисов в Apple, давая невероятные результаты. В прошлом году сервис Password Monitoring был переписан на Swift и теперь обрабатывает миллиарды запросов в день с устройств по всему миру. По сравнению с предыдущим сервисом на Java, обновленный бэкенд обеспечивает 40% увеличение производительности, а также улучшенную масштабируемость, безопасность и доступность.
Статья: https://apptractor.ru/info/articles/swift-v-apple-perenos-sluzhby-monitoringa-paroley-s-java.html
Платформа: Swift/разработка
Swift широко используется в проде для создания облачных сервисов в Apple, давая невероятные результаты. В прошлом году сервис Password Monitoring был переписан на Swift и теперь обрабатывает миллиарды запросов в день с устройств по всему миру. По сравнению с предыдущим сервисом на Java, обновленный бэкенд обеспечивает 40% увеличение производительности, а также улучшенную масштабируемость, безопасность и доступность.
Статья: https://apptractor.ru/info/articles/swift-v-apple-perenos-sluzhby-monitoringa-paroley-s-java.html
Платформа: Swift/разработка
👍1
Творческая переработка MVVM и TCA на примере iOS
За основу мы взяли архитектуру MVVM (Model—View—ViewModel), в которой View отвечает за графическое представление данных, вся бизнес логика сосредоточена внутри ViewModel. ViewModel обрабатывает запросы от View, обновляет свои данные, и View посредством data binding автоматически обновляет своё представление, что очень удобно. Model — модель для хранения и передачи данных.
Статья: https://habr.com/ru/companies/gri/articles/913610/
Платформа: iOS
За основу мы взяли архитектуру MVVM (Model—View—ViewModel), в которой View отвечает за графическое представление данных, вся бизнес логика сосредоточена внутри ViewModel. ViewModel обрабатывает запросы от View, обновляет свои данные, и View посредством data binding автоматически обновляет своё представление, что очень удобно. Model — модель для хранения и передачи данных.
Статья: https://habr.com/ru/companies/gri/articles/913610/
Платформа: iOS
👍1
Kotlin 2.4 представляет расширенные ошибки — революционное изменение в обработке ошибок
На конференции KotlinConf 2025 была представлена новая функция Kotlin 2.4 — Rich Errors, которая обещает изменить подход к обработке ошибок в языке.
Почему это важно?
1. Безопасность типов: Компилятор знает о всех возможных ошибках и требует их обработки.
2. Меньше шаблонного кода: Уменьшается необходимость в многочисленных блоках try-catch.
3. Упрощение тестирования: Тестировать функции становится проще, так как ошибки возвращаются как значения, а не выбрасываются как исключения.
Везде, где возможны предсказуемые ошибки, Rich Errors делают код более надежным и понятным.
Статья: https://xuanlocle.medium.com/kotlin-2-4-introduces-rich-errors-a-game-changer-for-error-handling-413d281e4a05
Платформа: Android
👍 если хотите русский перевод
На конференции KotlinConf 2025 была представлена новая функция Kotlin 2.4 — Rich Errors, которая обещает изменить подход к обработке ошибок в языке.
fun fetchUser(): User | AppError {
if (/* network fails */) return NetworkError(503)
if (/* user not found */) return UserNotFoundError
return User("123", "Ada")
}
fun loadUserData() {
val result = fetchUser()
when (result) {
is User -> show(result)
is NetworkError -> showError("Проблема с сетью (${result.code}). Попробуйте снова.")
is UserNotFoundError -> showError("Пользователь не найден. Проверьте данные.")
}
}Почему это важно?
1. Безопасность типов: Компилятор знает о всех возможных ошибках и требует их обработки.
2. Меньше шаблонного кода: Уменьшается необходимость в многочисленных блоках try-catch.
3. Упрощение тестирования: Тестировать функции становится проще, так как ошибки возвращаются как значения, а не выбрасываются как исключения.
Везде, где возможны предсказуемые ошибки, Rich Errors делают код более надежным и понятным.
Статья: https://xuanlocle.medium.com/kotlin-2-4-introduces-rich-errors-a-game-changer-for-error-handling-413d281e4a05
Платформа: Android
👍 если хотите русский перевод
❤3🔥3👍1
SwiftSMTP предоставляет реализацию на основе SwiftNIO для отправки электронных писем с использованием SMTP-серверов.
Существует структура
После того, как у вас есть
Имея
SwiftSMTP на GitHub: https://github.com/sersoft-gmbh/swift-smtp
Платформа: iOS
⭐️: 49
Существует структура
Configuration (и ее вложенные структуры и перечисления), которая настраивает доступ к SMTP-серверу (имя хоста, учетные данные и т.д.).После того, как у вас есть
Configuration (вместе с NIO EventLoopGroup), вы можете создать Mailer. Mailer отвечает за настройку канала NIO, который подключается к SMTP-серверу и доставляет электронную почту.Имея
Mailer в своем распоряжении, вы можете использовать его для отправки электронной почты. Поскольку SMTP прерывает соединение после каждой доставки, Mailer создает новое соединение для каждой электронной почты, которая должна быть доставлена.SwiftSMTP на GitHub: https://github.com/sersoft-gmbh/swift-smtp
Платформа: iOS
⭐️: 49
Как мы превратили iPhone в лабораторный микроскоп с AI и BLE: real-world edge-приложение
В этой статье я хочу поделиться опытом разработки iOS-приложения для роботизированного микроскопа с AI-распознаванием клеток крови — как оно устроено, какие задачи пришлось решать, на какие грабли пришлось наткнуться и как iPhone можно использовать в качестве лабораторного инструмента.
Это не очередной todo-лист с авторизацией или приложение для наложения масок на селфи — в центре внимания: видеопоток с окуляра микроскопа, нейронки, работа с железом, Bluetooth-управление перемещением стекол, и всё это — прямо на iPhone.
При этом я постарался не уходить в чрезмерные технические детали, чтобы статья оставалась доступной для большей части аудитории.
Статья: https://habr.com/ru/articles/915372/
Платформа: iOS
В этой статье я хочу поделиться опытом разработки iOS-приложения для роботизированного микроскопа с AI-распознаванием клеток крови — как оно устроено, какие задачи пришлось решать, на какие грабли пришлось наткнуться и как iPhone можно использовать в качестве лабораторного инструмента.
Это не очередной todo-лист с авторизацией или приложение для наложения масок на селфи — в центре внимания: видеопоток с окуляра микроскопа, нейронки, работа с железом, Bluetooth-управление перемещением стекол, и всё это — прямо на iPhone.
При этом я постарался не уходить в чрезмерные технические детали, чтобы статья оставалась доступной для большей части аудитории.
Статья: https://habr.com/ru/articles/915372/
Платформа: iOS
👍1
Как построить свою ферму устройств и упростить работу с устройствами и эмуляторами: делимся опытом создания DeviceHub
Меня зовут Даниил Смирнов, я руководитель команды Android Core R&D, которая развивает VK DeviceHub и другие внутренние решения. Мы вместе с Иваном Левиковым, руководителем тестирования в команде контента, решили улучшить инфраструктуру тестирования и объединили усилия, чтобы построить собственную ферму устройств. И на этом пути преодолели множество технических и организационных вызовов, о которых хотим вам рассказать.
Статья: https://habr.com/ru/companies/vk/articles/915340/
Платформа: Android
Меня зовут Даниил Смирнов, я руководитель команды Android Core R&D, которая развивает VK DeviceHub и другие внутренние решения. Мы вместе с Иваном Левиковым, руководителем тестирования в команде контента, решили улучшить инфраструктуру тестирования и объединили усилия, чтобы построить собственную ферму устройств. И на этом пути преодолели множество технических и организационных вызовов, о которых хотим вам рассказать.
Статья: https://habr.com/ru/companies/vk/articles/915340/
Платформа: Android
Как создать импульсный эффект в Jetpack Compose
В этой статье описан процесс создания захватывающего импульсного эффекта с использованием Jetpack Compose. Реализация такой анимации — отличный способ привлечь внимание пользователя.
Статья: https://nuancesprog.ru/p/24866/
Платформа: Android
В этой статье описан процесс создания захватывающего импульсного эффекта с использованием Jetpack Compose. Реализация такой анимации — отличный способ привлечь внимание пользователя.
Статья: https://nuancesprog.ru/p/24866/
Платформа: Android
❤1
Rich Errors в Kotlin 2.4 — революционное изменение в обработке ошибок
Это одно из самых интересных дополнений к Kotlin, которое я видел за последние годы. Оно способствует изменению мышления: не относитесь к ошибкам как к неожиданностям — относитесь к ним как к ожидаемым возможностям.
Я с нетерпением жду возможности попробовать это (особенно в блоках try-catch, похожих на спагетти). Если вы работаете над чем-либо на основе Kotlin, особенно над Android-приложениями, вам стоит обратить на это внимание.
Статья: https://apptractor.ru/info/articles/rich-errors.html
Платформа: Android
Это одно из самых интересных дополнений к Kotlin, которое я видел за последние годы. Оно способствует изменению мышления: не относитесь к ошибкам как к неожиданностям — относитесь к ним как к ожидаемым возможностям.
Я с нетерпением жду возможности попробовать это (особенно в блоках try-catch, похожих на спагетти). Если вы работаете над чем-либо на основе Kotlin, особенно над Android-приложениями, вам стоит обратить на это внимание.
Статья: https://apptractor.ru/info/articles/rich-errors.html
Платформа: Android
Ускорение сборки Swift-проектов с макросами: как Xcode 16.4 решает проблему SwiftSyntax
Если вы работаете с макросами в Swift и сталкивались с длительными временами сборки из-за зависимости от SwiftSyntax, то есть хорошие новости! В последнем обновлении Xcode 16.4 появилась возможность использовать предварительно скомпилированные бинарные файлы SwiftSyntax, что значительно сокращает время сборки проектов.
В тестовом приложении, использующем библиотеку Structured Queries с макросами, время сборки в режиме отладки сократилось с 37 до 15 секунд. В режиме релиза улучшение ещё более заметно: с 226 до 45 секунд. Особенно ощутимы эти улучшения при сборке небольших модулей, тестов и при использовании Xcode Previews.
Статья: https://www.pointfree.co/blog/posts/171-mitigating-swiftsyntax-build-times
Платформа: iOS
Если вы работаете с макросами в Swift и сталкивались с длительными временами сборки из-за зависимости от SwiftSyntax, то есть хорошие новости! В последнем обновлении Xcode 16.4 появилась возможность использовать предварительно скомпилированные бинарные файлы SwiftSyntax, что значительно сокращает время сборки проектов.
В тестовом приложении, использующем библиотеку Structured Queries с макросами, время сборки в режиме отладки сократилось с 37 до 15 секунд. В режиме релиза улучшение ещё более заметно: с 226 до 45 секунд. Особенно ощутимы эти улучшения при сборке небольших модулей, тестов и при использовании Xcode Previews.
Статья: https://www.pointfree.co/blog/posts/171-mitigating-swiftsyntax-build-times
Платформа: iOS
WallStreet - это приложение использует Compose Multiplatform и Kotlin Multiplatform для создания красивого и отзывчивого приложения с обоями для Android, Linux, Windows и MacOS.
WallStreet на GitHub: https://github.com/StarkDroid/WallStreet
Платформа: Android/кроссплатформа
⭐️: 23
WallStreet на GitHub: https://github.com/StarkDroid/WallStreet
Платформа: Android/кроссплатформа
⭐️: 23
❤1
•
(iOS Ru) Привязать карту: что может быть проще?•
(iOS Ru) Архитектура для кросс-функциональных команд•
(iOS En) Types of Window Scenes | SwiftUI•
(iOS En) Swift: Dead Simple Formatting (Dates, Numbers, Currency, Measurement, Time)•
(iOS En) 10 Years of Swift – A Decade in Review•
(iOS En) Better Error Messages with ErrorKit•
(iOS En) Pull To Search SwiftUI | Expandable Search Bar•
(iOS En) iOS App Testing with SwiftLens: A SwiftUI UI Testing Framework•
(And Ru) Катим в прод, не тестируя•
(And Ru) Figma + Compose. Упрощаем верстку•
(And Ru) Что хотят работодатели от Android-разработчика•
(And Ru) Топ-5 обновлений Google I/O, о которых вам нужно знать•
(And En) Now in Android: 117 – What’s new in Android development at Google I/O 2025 (part 1)•
(And En) Tech Interviews, Talks & More - My Day at KotlinConf 2025 In Copenhagen•
(And En) Testing software is awful: Here is how we can fix it•
(And En) State Hoisting: Eine Jetpack Compose Best Practice•
(Crs En) Kotlin Multiplatform (KMP) at McDonald’s•
(Dev Ru) Как избавиться от рекурсии и исправить глупую ошибку в Google•
(Dev Ru) IT-коучинг, Developer Advocate, софт-скиллы•
(Dev Ru) Эволюция карьерного роста: путь от Intern до Senior•
(Dev Ru) Вайбкодим всей командой — AI, Cursor, Claude, ChatGPT, MCP•
(Mrk Ru) Как сделать 3 миллиона загрузок на органике с ASO и попасть в Apple Best of•
(Mrk Ru) ASO в iOS. Подписки. Как сделать 100к MRR на органик прилеПрошлогодние видео:
•
(iOS Ru) Как не наломать дров с Live Activity•
(iOS Ru) Баланс между скоростью и надежностью: переиспользовать нельзя перепроверять•
(And Ru) Кодревью опенсорс проекта или как выглядят 10 лет технического долга•
(And Ru) Сколько памяти нужно для сборки? Android-разработчикам о JVM•
(And Ru) Что скрывает State в Compose•
(Crs Ru) Best practices локальной аутентификации на FlutterPlease open Telegram to view this post
VIEW IN TELEGRAM
Redroid: легковесная альтернатива стандартному эмулятору Android, работающая как Docker-контейнер
Это решение помогает разработчикам и тестировщикам глубже понимать, как их Android-приложения взаимодействуют с сетью, выявлять проблемы безопасности и оптимизировать сетевые взаимодействия без необходимости использования физических устройств или сложных настроек эмуляторов.
Статья: https://habr.com/ru/articles/915954/
Платформа: Android
Это решение помогает разработчикам и тестировщикам глубже понимать, как их Android-приложения взаимодействуют с сетью, выявлять проблемы безопасности и оптимизировать сетевые взаимодействия без необходимости использования физических устройств или сложных настроек эмуляторов.
Статья: https://habr.com/ru/articles/915954/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
MosaicGrid — это библиотека SwiftUI, которая предоставляет как горизонтальные, так и вертикальные мозаичные сетки, а также утилитарные функции для настройки размера и расположения плиток. Эти компоненты позволяют расположить несколько элементов в визуально привлекательной сетке.
MosaicGrid на GitHub: https://github.com/hainayanda/MosaicGrid
Платформа: iOS
⭐️: 26
MosaicGrid на GitHub: https://github.com/hainayanda/MosaicGrid
Платформа: iOS
⭐️: 26
Как ИИ помог создать систему видеонаблюдения на Android
Все началось с простой мысли: у многих дома лежат старые или неиспользуемые Android-смартфоны. Почему бы не превратить один из них в умного "сторожа"? Представьте: вы уходите из дома и хотите быть в курсе, если что-то изменится в комнате — откроется дверь, появится домашний питомец в запретной зоне или, не дай бог, кто-то посторонний.
Статья: https://habr.com/ru/articles/916598/
Платформа: Android
Все началось с простой мысли: у многих дома лежат старые или неиспользуемые Android-смартфоны. Почему бы не превратить один из них в умного "сторожа"? Представьте: вы уходите из дома и хотите быть в курсе, если что-то изменится в комнате — откроется дверь, появится домашний питомец в запретной зоне или, не дай бог, кто-то посторонний.
Статья: https://habr.com/ru/articles/916598/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
Создание живой звуковой волны в SwiftUI
В этом кратком руководстве мы расскажем вам, как использовать FFT для анализа наборов звуковых данных, чтобы визуализировать полученные частоты в виде живой функции звуковой волны в приложении SwiftUI.
Статья: https://apptractor.ru/info/articles/sozdanie-zhivoy-zvukovoy-volny-v-swiftui.html
Платформа: iOS
В этом кратком руководстве мы расскажем вам, как использовать FFT для анализа наборов звуковых данных, чтобы визуализировать полученные частоты в виде живой функции звуковой волны в приложении SwiftUI.
Статья: https://apptractor.ru/info/articles/sozdanie-zhivoy-zvukovoy-volny-v-swiftui.html
Платформа: iOS
TriggerX — это модульная, удобная для разработчиков библиотека для выполнения сигналов по расписанию для Android.
Она упрощает планирование точных сигналов и отображение пользовательских интерфейсов в определенное время, даже если ваше приложение было закрыто или вы не управляете фоновыми службами, блокировками пробуждения или флагами блокировки экрана.
Вы можете использовать TriggerX когда вам необходимо отобразить пользовательский интерфейс (напоминание, предупреждение, экран действий) в определенное время, когда пользовательский интерфейс требует получения данных в режиме реального времени из базы данных, кэша или API, если вы хотите избежать обработки крайних случаев для Doze, фоновых служб или флагов, вы хотите получить универсальное решение для сигналов по расписанию, которое будет работать на всех версиях Android.
TriggerX на GitHub: https://github.com/meticha/triggerx
Платформа: Android
⭐️: 46
Она упрощает планирование точных сигналов и отображение пользовательских интерфейсов в определенное время, даже если ваше приложение было закрыто или вы не управляете фоновыми службами, блокировками пробуждения или флагами блокировки экрана.
Вы можете использовать TriggerX когда вам необходимо отобразить пользовательский интерфейс (напоминание, предупреждение, экран действий) в определенное время, когда пользовательский интерфейс требует получения данных в режиме реального времени из базы данных, кэша или API, если вы хотите избежать обработки крайних случаев для Doze, фоновых служб или флагов, вы хотите получить универсальное решение для сигналов по расписанию, которое будет работать на всех версиях Android.
TriggerX на GitHub: https://github.com/meticha/triggerx
Платформа: Android
⭐️: 46
❤1
FinalRibbon.webm
112.3 KB
Оборачиваем любой Composable красивой ленточкой
В этой небольшой статье мы узнаем, как создать модификатор ленты, который рисует контур, обтекающий любой элемент интерфейса Compose. Этот эффект можно использовать в качестве эффекта наведения курсора на нужную кнопку или для привлечения внимания к новому действию.
Статья: https://apptractor.ru/info/articles/oborachivaem-lyuboy-composable-krasivoy-lentochkoy.html
Платформа: Android
В этой небольшой статье мы узнаем, как создать модификатор ленты, который рисует контур, обтекающий любой элемент интерфейса Compose. Этот эффект можно использовать в качестве эффекта наведения курсора на нужную кнопку или для привлечения внимания к новому действию.
Статья: https://apptractor.ru/info/articles/oborachivaem-lyuboy-composable-krasivoy-lentochkoy.html
Платформа: Android
Использование ИИ и Cursor для локализации каталогов строк Xcode
Каталоги строк Xcode отлично подходят для локализации, но по сравнению со старыми файлами .strings затрудняют добавление новых языков. Давайте посмотрим, как экспортировать и импортировать языки каталога строк, а также как использовать Cursor для перевода приложения на новые языки с помощью искусственного интеллекта.
Статья: https://apptractor.ru/info/articles/ispolzovanie-ii-i-cursor-dlya-lokalizatsii-katalogov-strok-xcode.html
Платформа: iOS
Каталоги строк Xcode отлично подходят для локализации, но по сравнению со старыми файлами .strings затрудняют добавление новых языков. Давайте посмотрим, как экспортировать и импортировать языки каталога строк, а также как использовать Cursor для перевода приложения на новые языки с помощью искусственного интеллекта.
Статья: https://apptractor.ru/info/articles/ispolzovanie-ii-i-cursor-dlya-lokalizatsii-katalogov-strok-xcode.html
Платформа: iOS
👍3
Кэширование фреймворков — популярный метод, позволяющий сократить время сборки во многих крупных проектах. Некоторые из наиболее известных инструментов в этой категории — cocoapods-binary-cache, Rugby и XCRemoteCache. Rugby и cocoapods-binary-cache специально разработаны для проектов на базе CocoaPods, а XCRemoteCache подходит для более общей структуры проектов. Однако все три инструмента имеют одно и то же ограничение: отсутствие поддержки пакетов SPM/Swift.
Инструмент xccache призван восполнить этот пробел. Долгосрочная цель этой инициативы — сделать его универсальным инструментом кэширования для iOS-проектов, включая структуры на базе CocoaPods. Инструмент управляет специальным пакетом
Xccache на GitHub: https://github.com/trinhngocthuyen/xccache
Платформа: iOS
⭐️: 45
Инструмент xccache призван восполнить этот пробел. Долгосрочная цель этой инициативы — сделать его универсальным инструментом кэширования для iOS-проектов, включая структуры на базе CocoaPods. Инструмент управляет специальным пакетом
umbrella для работы с кэшированными зависимостями в проекте. В случае попадания в кэш он заменяет исходную зависимость (с исходным кодом) на соответствующую предварительно собранную зависимость.Xccache на GitHub: https://github.com/trinhngocthuyen/xccache
Платформа: iOS
⭐️: 45
❤1👍1
Что нового в SwiftUI после WWDC25
Всемирная конференция разработчиков 2025 уже идет, и это идеальное время для изучения самых значительных изменений и дополнений к фреймворку SwiftUI. Давайте узнаем обо всех новых интересных функциях, которые Apple приготовила для нас в этом году.
Статья: https://apptractor.ru/info/articles/chto-novogo-v-swiftui-posle-wwdc25.html
Платформа: iOS
Всемирная конференция разработчиков 2025 уже идет, и это идеальное время для изучения самых значительных изменений и дополнений к фреймворку SwiftUI. Давайте узнаем обо всех новых интересных функциях, которые Apple приготовила для нас в этом году.
Статья: https://apptractor.ru/info/articles/chto-novogo-v-swiftui-posle-wwdc25.html
Платформа: iOS
Поддержка приложения для Android - это большой труд
Почему количество Android-приложений на Google Play стремительно сокращается? Автор, ведущий хобби-проект MusicSync, объясняет это очевидными, но часто недооцененными причинами:
1. Java → Kotlin
• Старые Java‑проекты сталкиваются с несовместимостью, особенно если зависимости используют корутины или Jetpack Compose — они доступны только на Kotlin
2. Ломающее обновления от Google
• Переход MediaPlayer → ExoPlayer V1 → ExoPlayer V2 → media3 без обратной совместимости.
• Google Auth библиотека сломала вход на API ≤ 26.
• SDK версии устаревают, UI‑гайдлайны меняются, поддержка старых Android прекращается
3. Старые сторонние библиотеки больше не поддерживаются
• Picasso, Glide, OkHttp, EventBus, RateThisApp — некоторые из них заброшены, другие требуют миграции или устраивают ломку API
4. Версии и апгрейды на каждом шагу
• Нужно постоянно поддерживать minSdk, targetSdk, Gradle, Android Studio, версии библиотек… и всё это связано между собой
5. Принудительные обновления
• Google требует обновляться не только в коде, но и в архитектуре, инструментах, структуре проекта.
⚠️Итог: поддержка Android‑приложения — это постоянно растущие временные затраты и технический долг. Возможно, для хобби‑проектов будет разумнее выбрать веб‑UI, где изменения не так объёмно влияют на экосистему.
Статья: https://ashishb.net/programming/maintaining-android-app/
Платформа: Android
Почему количество Android-приложений на Google Play стремительно сокращается? Автор, ведущий хобби-проект MusicSync, объясняет это очевидными, но часто недооцененными причинами:
1. Java → Kotlin
• Старые Java‑проекты сталкиваются с несовместимостью, особенно если зависимости используют корутины или Jetpack Compose — они доступны только на Kotlin
2. Ломающее обновления от Google
• Переход MediaPlayer → ExoPlayer V1 → ExoPlayer V2 → media3 без обратной совместимости.
• Google Auth библиотека сломала вход на API ≤ 26.
• SDK версии устаревают, UI‑гайдлайны меняются, поддержка старых Android прекращается
3. Старые сторонние библиотеки больше не поддерживаются
• Picasso, Glide, OkHttp, EventBus, RateThisApp — некоторые из них заброшены, другие требуют миграции или устраивают ломку API
4. Версии и апгрейды на каждом шагу
• Нужно постоянно поддерживать minSdk, targetSdk, Gradle, Android Studio, версии библиотек… и всё это связано между собой
5. Принудительные обновления
• Google требует обновляться не только в коде, но и в архитектуре, инструментах, структуре проекта.
⚠️Итог: поддержка Android‑приложения — это постоянно растущие временные затраты и технический долг. Возможно, для хобби‑проектов будет разумнее выбрать веб‑UI, где изменения не так объёмно влияют на экосистему.
Статья: https://ashishb.net/programming/maintaining-android-app/
Платформа: Android
❤2👍1