ru
Feedback
Android разработка

Android разработка

Открыть в Telegram
4 848
Подписчики
-224 часа
-97 дней
-4930 день
Архив постов
⚡️ Spring Boot: полный контроль над HTTP-ответами через ResponseEntity Если нужно управлять не только телом ответа, но и стат
⚡️ Spring Boot: полный контроль над HTTP-ответами через ResponseEntity Если нужно управлять не только телом ответа, но и статусом и заголовками — используйте ResponseEntity. Что это даёт: - Явно задаёте HTTP-статус (200, 404, 201 и т.д.) - Добавляете кастомные заголовки - Возвращаете любой объект в body - Контролируете поведение API на уровне протокола Пример:

@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    User user = userService.findById(id);

    if (user == null) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
    }

    return ResponseEntity
            .status(HttpStatus.OK)
            .header("Custom-Header", "UserFound")
            .body(user);
}
• разные статусы для разных сценариев (404, 400, 204) • REST API с чёткой семантикой • добавление headers (pagination, tokens, meta) • возврат пустого ответа без body Совет: Если метод просто возвращает данные - достаточно вернуть объект. Если нужен контроль над HTTP - всегда ResponseEntity. @javatg #SpringBoot #Java #Backend #SoftwareEngineering

💡 Spring Boot лайфхак: ускоряй интеграционные тесты Если тебе нужно тестировать Spring MVC контроллеры, но не хочется подним
💡 Spring Boot лайфхак: ускоряй интеграционные тесты Если тебе нужно тестировать Spring MVC контроллеры, но не хочется поднимать всё приложение — используй @WebMvcTest. Что это даёт - Загружает только MVC-слой, без всего Application Context - Тесты работают значительно быстрее - Можно замокать сервисы через @MockBean - Идеально для проверки контроллеров, статусов и ответов API Когда использовать - Тестируешь REST-контроллеры - Нужно проверить HTTP-ответы - Не нужна база, security, messaging и другие слои Идея простая: Вместо запуска всего приложения → поднимаем только веб-контекст. Меньше зависимостей → быстрее тесты → стабильный CI. Пример

@WebMvcTest(HelloController.class)
class HelloControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private HelloService helloService;

    @Test
    void sayHello_returnsExpectedMessage() throws Exception {
        given(helloService.getMessage()).willReturn("Hello!");

        mockMvc.perform(get("/api/hello"))
               .andExpect(status().isOk())
               .andExpect(content().string("Hello!"));
    }
}
Если тестируешь только контроллер — не поднимай всё приложение. WebMvcTest экономит секунды на каждом тесте и минуты в CI.

🚀 Spring Boot трюк, который спасает продакшен Если ваш сервис обращается к внешним API — рано или поздно они начнут падать,
🚀 Spring Boot трюк, который спасает продакшен Если ваш сервис обращается к внешним API — рано или поздно они начнут падать, тормозить или отдавать ошибки. Вместо ручной логики повторов используйте @Retryable. Что это даёт: - Автоматические повторные запросы при ошибках - Настраиваемое количество попыток - Exponential backoff (увеличение задержки между попытками) - Fallback-логика через @Recover, если всё окончательно сломалось Когда это нужно: - Платёжные шлюзы - Внешние API - Микросервисы - Любые нестабильные сети Главная идея: Не падай из-за временных ошибок - попробуй ещё раз. Такая мелочь может значительно повысить стабильность системы без сложного кода.

🚀 Spring Boot: когда использовать static-классы, а когда Bean Частая ошибка в Spring - использовать static-утилиты там, где
🚀 Spring Boot: когда использовать static-классы, а когда Bean Частая ошибка в Spring - использовать static-утилиты там, где нужен управляемый компонент. Правило простое Используйте static-классы только если: - они не хранят состояние - у них нет зависимостей - не требуется mock в тестах - не нужен AOP (логирование, транзакции и т.д.) Во всех остальных случаях — лучше Spring Bean. Почему это важно Пример с static-кэшем:

public class CacheUtils {
    private static Map<String, String> cache = new HashMap<>();
}
Такой кэш: • общий для всех потоков • может случайно изменяться • сложно контролировать и тестировать нет управления жизненным циклом Правильный подход — Bean со scope: @Component @Scope("request") public class CacheService { private Map<String, String> cache = new HashMap<>(); } Теперь: Spring управляет жизненным циклом можно задать scope (request, session, singleton) легко тестировать и мокать можно добавить AOP Главная мысль Static — только для чистых функций. Состояние и логика — пусть управляет Spring. Spring лучше всего работает, когда управляет stateful-объектами.

🚀 CLI для управления iOS и Android устройствами agent-device — это инструмент командной строки для управления мобильными устройствами, позволяющий AI-агентам взаимодействовать с приложениями на iOS и Android. Проект находится на ранней стадии разработки и открыт для вкладов. 🚀 Основные моменты: - Поддержка iOS (симулятор) и Android (эмулятор). - Основные команды: открытие приложений, взаимодействие с элементами интерфейса. - Минимальные зависимости и работа напрямую с Node.js. - Возможность создания и управления сессиями. 📌 GitHub: https://github.com/callstackincubator/agent-device #typescript

⚡️Spring Boot: отправка email за 5 минут Если нужно быстро добавить отправку писем в Java-приложение — используйте spring-boo
⚡️Spring Boot: отправка email за 5 минут Если нужно быстро добавить отправку писем в Java-приложение — используйте spring-boot-starter-mail. Он уже содержит всю необходимую конфигурацию и зависимости, поэтому не нужно вручную настраивать SMTP-клиенты. Что нужно сделать: 1. Добавить зависимость

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
Настроить SMTP (например, Gmail)

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your_email@gmail.com
spring.mail.password=your_app_password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Отправить письмо через JavaMailSender

@Autowired
private JavaMailSender mailSender;

public void sendEmail(String to, String subject, String text) {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setTo(to);
    message.setSubject(subject);
    message.setText(text);
    message.setFrom("your_email@gmail.com");

    mailSender.send(message);
}
Когда это полезно: • регистрация пользователей • подтверждение email • уведомления • отчёты и алерты Главный плюс - минимум кода и быстрая интеграция. Spring Boot берёт всю сложность настройки на себя.

💡 Java-совет: WeakHashMap для кэша без утечек памяти Если ты используешь HashMap как кэш - будь осторожен. Пока карта жива,
💡 Java-совет: WeakHashMap для кэша без утечек памяти Если ты используешь HashMap как кэш - будь осторожен. Пока карта жива, ключи и значения не будут удалены GC, даже если они больше нигде не используются. WeakHashMap решает эту проблему: • Ключи хранятся через weak reference • Если на ключ нет сильных ссылок в коде - GC может его удалить • Запись автоматически исчезает из мапы • Отлично подходит для кэшей, метаданных, listener-ов Пример идеи: • Положил объект в WeakHashMap • Убрал на него все обычные ссылки • GC очистил объект → запись исчезла сама Когда использовать: • Кэш, который не должен раздувать память • Вспомогательные данные, завязанные на жизненный цикл объекта • Framework-код, плагины, reflection-кэши Когда не стоит: • Если ключи должны жить строго контролируемо • Если логика зависит от стабильного наличия записи Коротко: HashMap - контроль у тебя WeakHashMap — контроль у GC 🧹 Полезный инструмент, если понимаешь его семантику.

🚀 LiteRT - универсальная основа для AI прямо на устройстве Google представил LiteRT — новый универсальный фреймворк для on-d
🚀 LiteRT - универсальная основа для AI прямо на устройстве Google представил LiteRT — новый универсальный фреймворк для on-device AI, который развивается из TensorFlow Lite и становится базой для высокопроизводительного ML и генеративного AI на устройствах. 🔥 Что важно ⚡ До 1.4× быстрее GPU-ускорение LiteRT показывает прирост производительности на GPU по сравнению с TensorFlow Lite, снижая задержку и улучшая отклик моделей. 🌐 Кроссплатформенность Работает на Android, iOS, macOS, Windows, Linux и Web. Использует OpenCL, OpenGL, Metal и WebGPU через новый движок. 🤖 Поддержка NPU Добавлено ускорение на нейропроцессорах с единым API, что упрощает разработку под разные чипы и повышает скорость инференса. ⚙️ Модели из PyTorch и JAX Есть удобная конвертация моделей, что упрощает перенос современных AI-моделей на устройство. 📦 Open-source Фреймворк открыт и подходит для продакшена — можно строить реальные on-device AI-приложения. LiteRT позволяет запускать современные AI и GenAI модели прямо на устройстве — быстрее, с меньшей задержкой и лучшей приватностью, без постоянной зависимости от облака. https://developers.googleblog.com/litert-the-universal-framework-for-on-device-ai/

💡 Java совет: избегай шаринга данных между потоками Одна из главных причин багов в многопоточке - общий изменяемый state (sh
💡 Java совет: избегай шаринга данных между потоками Одна из главных причин багов в многопоточке - общий изменяемый state (shared mutable state). Чем больше потоков трогают одни и те же объекты - тем выше шанс словить race condition, deadlock или “плавающие” ошибки. Что делать правильно: ✅ 1) Используй immutable-объекты Если объект нельзя изменить - потокам нечего “делить”, и синхронизация почти не нужна. В Java это удобно делать через record, final поля и неизменяемые коллекции. ✅ 2) Общайся через сообщения, а не через общую память Вместо того чтобы менять общий объект - передавай события через очередь: - BlockingQueue - ConcurrentLinkedQueue - Actor-style подход Это снижает связанность и делает поведение системы предсказуемым. Простой принцип: Не “разделяй память”, а “разделяй сообщения”. #Java #SoftwareDevelopment

🚀 Spring Boot: настрой graceful shutdown с таймаутом Когда сервис перезапускается (deploy / autoscaling / rolling update), б
🚀 Spring Boot: настрой graceful shutdown с таймаутом Когда сервис перезапускается (deploy / autoscaling / rolling update), без graceful shutdown часть HTTP-запросов может: - оборваться на полпути - вернуть 5xx - прервать фоновые потоки слишком рано В Spring Boot это решается одной настройкой - задаёшь таймаут на “мягкое” завершение: ✅ сервер перестанет принимать новые запросы ✅ но даст текущим запросам и бинам закончить работу ✅ и только потом завершится Пример: server: shutdown: graceful spring: lifecycle: timeout-per-shutdown-phase: 20s Идеально для продакшена, особенно если у тебя: - Kubernetes rolling update - долгие запросы - async обработчики / очереди - фоновые задачи

🖥Awesome-Android-Reverse-Engineering Подборка лучших материалов и инструментов для реверс-инжиниринга Android. Что есть: - 📚 обучение: курсы, видео, книги - 🛠 инструменты: статический и динамический анализ - 🔎 декомпиляторы: JADX, Apktool, dex2jar - 🧪 CTF/CrackMe для практики - 📘 статьи и ресурсы по безопасности Зачем: — всё в одном месте — удобно для обучения и аудита безопасности — хорошая база для практики Полезный старт для разработчиков и security-инженеров. 📌 GitHub: https://github.com/user1342/Awesome-Android-Reverse-Engineering

⚡️ Docker-Android - запуск Android-эмулятора в Docker-контейнере Минимальный и настраиваемый Docker-образ с Android-эмуляторо
⚡️ Docker-Android - запуск Android-эмулятора в Docker-контейнере Минимальный и настраиваемый Docker-образ с Android-эмулятором, который запускается в контейнере как сервис. Он особенно полезен для автоматизации, CI/CD и тестирования мобильных приложений, когда нужен работающий эмулятор в изолированной среде без физического устройства. Это Docker-образ на базе лёгкого Linux, со встроенным Android-эмулятором, поддержкой аппаратной виртуализации (KVM) и Java Runtime. Внутри контейнер поднимает эмулятор, ADB-сервер и инструменты виртуализации. Работа происходит в headless-режиме, то есть без графического интерфейса — удобно для серверов и CI. Основные возможности: • минималистичный образ с Android-эмулятором и ADB • поддержка KVM и аппаратного ускорения • выбор версии Android и типа образа • проброс портов для ADB • работа без GUI • возможность подключать инструменты удалённого управления экраном Плюсы: ✔ изолированная, воспроизводимая среда ✔ не нужен GUI ✔ удобно для автоматизации тестов ✔ поддержка аппаратного ускорения docker-android — это удобный способ запускать Android-эмулятор как сервис внутри контейнера. Он упрощает автоматизацию тестирования и делает окружение предсказуемым и повторяемым. https://github.com/HQarroum/docker-android

Руководство по языку Kotlin 📚 Read
Руководство по языку Kotlin 📚 Read

photo content

Локализация в Jetpack Compose Локализация относится к изменению текста приложения, форматов валют и других визуальных элемент
Локализация в Jetpack Compose Локализация относится к изменению текста приложения, форматов валют и других визуальных элементов для соответствия локали пользователя на основе его региональных предпочтений. С введением языковых предпочтений для каждого приложения (Per-app Language Preference) в Android 13 (API уровня 33) управление языками, специфичными для приложений, стало намного проще. https://blog.kotlin-academy.com/localization-in-jetpack-compose-71b7f7233243 #Android

Repost from Mobile VK Hub
Конец года, и снова заканчиваются все подписки 😱 Узнали? Согласны? Не беда — мы как раз разыгрываем промокоды на год от Облака Mail и VK Музыки! Условия участия простые: 🔹 подпишитесь на наш канал @mobilehubvk 🔹нажмите кнопку «Участвовать» 🔹 дождитесь 30 декабря — в этом посте мы выберем случайным образом 6 победителей Информацию об организаторе, правилах и призах ищите по ссылке. Удачи!

🤖 Автоматизация Android с AI: Roubao Roubao — это открытый AI помощник для автоматизации задач на Android без необходимости
🤖 Автоматизация Android с AI: Roubao Roubao — это открытый AI помощник для автоматизации задач на Android без необходимости подключения к компьютеру. Он использует визуальные языковые модели и работает на нативном Kotlin, позволяя пользователям легко выполнять команды с помощью естественного языка. 🚀 Основные моменты: - Полностью открытый проект без необходимости в компьютере - Интуитивно понятный интерфейс с поддержкой нескольких языков - Поддержка различных AI моделей и API - Высокая безопасность с шифрованием ключей - Возможность работы в режиме Root для расширенных функций 📌 GitHub: https://github.com/Turbo1123/roubao #kotlin

❤️❤️❤️❤️❤️❤️❤️❤️ Когда гирлянды за монитором, а в терминале — Git Quest 💻 Атмосфера Нового года по-айтишному — это не только
❤️❤️❤️❤️❤️❤️❤️❤️ Когда гирлянды за монитором, а в терминале — Git Quest 💻 Атмосфера Нового года по-айтишному — это не только кофе и деплой под бой курантов. Это Новогодний Git Quest от SourceCraft! 🤩 Новогодние задания для тех, кто хочет узнать больше о Git. 🤩 Пасхалки и секретные ветки. 🤩 Соревновательная часть с рейтингом. 🤩 Дополнительные очки за скорость. С 10 по 30 декабря открываются новые задания каждые два дня — не пропусти! Загляни на сайт, попробуй тренировочное задание и добавь немного Git-магии в свой декабрь.

🚀 AI Agents for Android Apps Библиотека для автоматизации работы с нативными Android-приложениями. Идеально подходит для моб
🚀 AI Agents for Android Apps Библиотека для автоматизации работы с нативными Android-приложениями. Идеально подходит для мобильных рабочих процессов в логистике, экономике на заказ и других отраслях, где ноутбук неуместен. Позволяет значительно ускорить выполнение задач и сократить затраты. 🚀 Основные моменты: - Автоматизация процессов на Android-устройствах - Снижение затрат на 95% по сравнению с традиционными методами - Поддержка различных мобильных приложений - Быстрая реакция — менее 1 секунды на действие - Идеально для логистики и мобильного обслуживания 📌 GitHub: https://github.com/actionstatelabs/android-action-kernel

✔️ OpenAI создала Android-версию Sora за 28 дней. В ноябре 2025 года OpenAI выпустила приложение Sora для Android, пройдя путь от прототипа до глобального релиза всего за 1 месяц. Над проектом работали 4 инженера и ранняя версия GPT-5.1-Codex. Результаты эксперимента показали новый стандарт эффективности: 85% кода было сгенерировано ИИ, при этом стабильность версии держалась на уровне 99,9%. В первые сутки Sora для Android возглавило чарты Play Store, а пользователи создали более миллиона видео. В OpenAI отмечают, что ИИ-ассистенты берут на себя рутину, однако архитектурное проектирование и контроль качества по-прежнему требуют участия людей. openai.com