📲 Погружаемся в мир технологий Яндекс Переводчика
В этом подкасте ведущий Android-разработчик Яндекс Переводчика рассказывает о своем пути в разработку, об уникальных функциях приложения, включая перевод изображений и документов, а также интеграцию с камерой и браузером. Также вы узнаете о будущем переводных технологий в эру больших языковых моделей.
👀 Смотреть видео
#новость #android
В этом подкасте ведущий Android-разработчик Яндекс Переводчика рассказывает о своем пути в разработку, об уникальных функциях приложения, включая перевод изображений и документов, а также интеграцию с камерой и браузером. Также вы узнаете о будущем переводных технологий в эру больших языковых моделей.
👀 Смотреть видео
#новость #android
😁2❤1
Шаблон MVC предполагает разделение кода на 3 компонента. При создании класса/файла приложения разработчик должен отнести его к одному из следующих трёх уровней:
🔹 Модель:
Этот компонент хранит данные приложения. Он ничего не знает об интерфейсе. Модель отвечает за обработку логики предметной области (реальных бизнес-правил) и взаимодействие с базой данных и сетевыми уровнями.
🔹 Представление:
Это слой пользовательского интерфейса (UI), в котором содержатся компоненты, видимые на экране. Кроме того, он обеспечивает визуализацию данных, хранящихся в модели, и позволяет пользователю взаимодействовать с ними.
🔹 Контроллер:
Этот компонент устанавливает связь между Представлением и Моделью. Он содержит основную логику приложения, получает информацию о действиях пользователя и обновляет Модель в соответствии с потребностями.
Несмотря на применение схемы MVC для модульного проектирования приложения, уровни кода зависят друг от друга. В этом шаблоне Представление и Контроллер зависят от Модели. Для применения шаблона MVC в проекте можно использовать несколько подходов:
В MVC данные обновляет контроллер, а представление их только отображает. Модель отделена и тестируется независимо от UI. Если представление соблюдает принцип единой ответственности — лишь передаёт действия контроллеру и показывает данные без бизнес-логики — то его достаточно проверять UI-тестами.
#буст #SeniorView #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3❤1
Хотите быстро отследить, что происходит в приложении на устройстве или эмуляторе?
На помощь приходит простая команда:
adb logcat | grep "MyTag"
— Подключается к логам Android-устройства или эмулятора
— Фильтрует вывод по тегу (например,
MyTag, который вы используете в Log.d(...))— Показывает только нужные строки, чтобы не тонуть в море системных логов
— Нужно быстро найти крэш или баг прямо на реальном устройстве
— Хотите дебажить только свою часть логов, а не весь Android-спам
— Проверяете работу логирования перед релизом
Добавьте уровни логов для фильтрации:
adb logcat *:E # только ошибки
adb logcat *:W # предупреждения и выше
adb logcat в работе?#буст #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
To Do — простое приложение для ведения дел на Jetpack Compose с настраиваемыми темами Material Design 3.
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👾1
Чтобы быстрее освоиться в Android Studio, держи подборку полезных сочетаний клавиш (Windows/Linux → Mac в скобках):
Ctrl + Shift + F (Cmd + Shift + F)Найдёшь любой фрагмент кода во всём проекте.
Ctrl + N (Cmd + O)Откроешь нужный класс по имени без лишней навигации.
Ctrl + Alt + L (Cmd + Option + L)Приводит код к читаемому виду по стилю проекта.
Ctrl + Space (Ctrl + Space)Экономит время, подсказывает методы и переменные.
Shift + F10 (Ctrl + R)Мгновенный запуск на эмуляторе или подключённом устройстве.
Освоив эти комбинации, ты будешь писать и навигироваться по проекту заметно быстрее
#буст #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
👾 Шаблон архитектуры MVP
MVP (Model - View - Presenter) появился как альтернатива традиционному архитектурному паттерну MVC (Model - View - Controller). Используя MVC в качестве архитектуры приложения, разработчики сталкиваются со следующими трудностями:
🔘 Большая часть основной бизнес-логики находится в Controller. В течение жизненного цикла приложения этот файл становится всё больше и его становится сложно поддерживать.
🔘 Из-за тесной связки пользовательского интерфейса и механизмов доступа к данным, и Controller, и View оказываются в одной Activity или Fragment. Это создаёт проблемы при внесении изменений в функциональность приложения.
🔘 Становится трудно проводить модульное тестирование разных слоёв, так как большинство тестируемых частей зависят от компонентов Android SDK.
Паттерн MVP решает эти проблемы MVC и предоставляет простой способ структурировать код проекта. Причина, по которой MVP широко применяется, заключается в том, что он обеспечивает модульность, тестируемость и более чистую и удобную в сопровождении кодовую базу. Он состоит из следующих трёх компонентов:
🔹 Model: слой для хранения данных. Отвечает за обработку предметной логики (реальных бизнес-правил) и взаимодействие с базой данных и сетевым уровнем.
🔹 View: слой пользовательского интерфейса (UI). Он отвечает за визуализацию данных и отслеживает действия пользователя, чтобы уведомлять Presenter.
🔹 Presenter: получает данные из модели и применяет UI-логику, чтобы решить, что отображать. Он управляет состоянием View и выполняет действия в соответствии с уведомлениями о действиях пользователя.
🐸 Библиотека мобильного разработчика
#буст #SeniorView #Android
MVP (Model - View - Presenter) появился как альтернатива традиционному архитектурному паттерну MVC (Model - View - Controller). Используя MVC в качестве архитектуры приложения, разработчики сталкиваются со следующими трудностями:
Паттерн MVP решает эти проблемы MVC и предоставляет простой способ структурировать код проекта. Причина, по которой MVP широко применяется, заключается в том, что он обеспечивает модульность, тестируемость и более чистую и удобную в сопровождении кодовую базу. Он состоит из следующих трёх компонентов:
🔹 Model: слой для хранения данных. Отвечает за обработку предметной логики (реальных бизнес-правил) и взаимодействие с базой данных и сетевым уровнем.
🔹 View: слой пользовательского интерфейса (UI). Он отвечает за визуализацию данных и отслеживает действия пользователя, чтобы уведомлять Presenter.
🔹 Presenter: получает данные из модели и применяет UI-логику, чтобы решить, что отображать. Он управляет состоянием View и выполняет действия в соответствии с уведомлениями о действиях пользователя.
#буст #SeniorView #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🥱2😁1
Обрезка — это удаление частей контента за пределами заданной формы. Представьте, что вы используете формочки для печенья: всё, что находится внутри формочки, остаётся, а всё, что снаружи, удаляется.
В Compose это делается с помощью
Modifier.clip функции:Image(
painter = painterResource(R.drawable.avatar),
contentDescription = null,
modifier = Modifier
.size(72.dp)
.clip(CircleShape)
)
Здесь изображение обрезается по кругу, независимо от фактических границ растрового изображения.
Если встроенных фигур (
CircleShape, RoundedCornerShape и т. д.) недостаточно, вы можете создать собственную Shape и нарисовать свой собственный контур. Например:class SquishedOvalShape : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline {
return Outline.Generic(
Path().apply {
addOval(Rect(0f, size.height / 4f, size.width, size.height))
}
)
}
}Примените его, как и любую другую форму:
Modifier.clip(SquishedOvalShape())
#PixelPerfect #MiddlePath #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
adb shell dumpsys package – детальная информация об установленном приложенииПолучайте полную техническую информацию о любом установленном приложении на Android-устройстве – от версий и разрешений до активности процессов.
1. Информация о версиях:
adb shell dumpsys package com.yourapp.package | grep -E "versionName|versionCode"
2. Проверка разрешений:
adb shell dumpsys package com.yourapp.package | grep -A 20 "requested permissions"
3. Информация о активностях и сервисах:
adb shell dumpsys package com.yourapp.package | grep -E "Activity|Service|Receiver"
4. Детали установки APK:
adb shell dumpsys package com.yourapp.package | grep -A 10 "Installation"
1. Только основные данные:
adb shell dumpsys package com.yourapp.package | head -50
2. Поиск конкретной активности:
adb shell dumpsys package com.yourapp.package | grep -B 5 -A 5 "MainActivity"
3. Информация о подписантах:
adb shell dumpsys package com.yourapp.package | grep -A 15 "Signatures"
dumpsys для отладки? Какие еще параметры dumpsys вам полезны?#буст #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
👾 Погружаемся в недра Retrofit
Думаю, многие задумывались о том, что происходит с функциями в интерфейсе Retrofit сервиса, когда мы помечаем их ключевым словом suspend? У некоторых даже есть заблуждение, что для сетевых запросов в таком случае используется корутиновский Dispatchers.IO. Спойлер — это не совсем так.
➡️ В этой статье автор как раз разберёт, как всё работает на самом деле
🐸 Библиотека мобильного разработчика
#свежак #Android
Думаю, многие задумывались о том, что происходит с функциями в интерфейсе Retrofit сервиса, когда мы помечаем их ключевым словом suspend? У некоторых даже есть заблуждение, что для сетевых запросов в таком случае используется корутиновский Dispatchers.IO. Спойлер — это не совсем так.
#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
adb shell pm clear – мгновенный сброс данных приложения без переустановкиМгновенно очищает все данные и кэш приложения, возвращая его в состояние "только что установленного". Идеально для тестирования сценариев первого запуска.
1. Тестирование первого запуска:
adb shell pm clear com.yourapp.package && adb shell am start -n com.yourapp.package/.MainActivity
2. Сброс авторизации:
Больше не нужно удалять/переустанавливать приложение чтобы проверить сценарий логина заново.
3. Очистка перед демо:
Убедитесь, что приложение покажет именно то, что вы планировали на демонстрации.
Сброс + запуск:
adb shell pm clear com.yourapp.package && sleep 2 && adb shell am start -n com.yourapp.package/.MainActivity
Сброс нескольких приложений:
for app in com.app1 com.app2 com.app3; do
adb shell pm clear $app
done
• Сохраняет APK – не переустанавливает приложение
• Быстрее удаления – экономит время на тестах
• Работает на всех устройствах – включая production-сборки
Как часто вы сбрасываете данные при тестировании?
#буст #AllLevels #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
В Jetpack Compose не рекомендуется напрямую вызывать не-компонуемые функции внутри composable-функций.
Вместо этого, чтобы безопасно выполнять операции вроде запуска корутин, вызова побочных эффектов или обработки логики, зависящей от жизненного цикла, используются обработчики эффектов (effect handlers).
Эти обработчики позволяют безопасно взаимодействовать с внешним миром (сеть, база данных, логи и т. д.) в контролируемом виде.
Ниже приведены самые распространённые обработчики эффектов в Compose — просто и с примерами.
🔹
SideEffectВыполняет логику после каждого успешного пересоздания (recomposition).
SideEffect {
Log.d("TAG", "Recomposition completed")
}Подходит для логирования, аналитики или любых операций, которые должны выполняться после отрисовки интерфейса.
🔹
LaunchedEffectЗапускает корутину, когда изменяется указанный ключ. Если происходит пересоздание и ключ меняется — предыдущая корутина отменяется, и запускается новая.
LaunchedEffect(key1 = someState) {
fetchData()
}Идеально подходит для вызова API или выполнения логики, зависящей от изменяющегося состояния.
🔹
rememberCoroutineScopeПредоставляет область действия корутины, которая сохраняется между пересозданиями. Лучше всего использовать, когда нужно запускать корутины в ответ на действия пользователя (например, нажатие кнопки).
val coroutineScope = rememberCoroutineScope()
Button(onClick = {
coroutineScope.launch {
doSomething()
}
}) {
Text("Click me")
}
Для событий, инициируемых пользователем, которые не зависят напрямую от состояния или жизненного цикла.
🔹
DisposableEffectВыполняет код при входе в композицию и очищает ресурсы при выходе из неё.
DisposableEffect(key1 = someKey) {
startListening() onDispose {
stopListening()
}
}Добавление или удаление слушателей, наблюдателей, освобождение внешних ресурсов и другая логика очистки.
#буст #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Аналогично
Object в Java, к чему можно привести любой тип в Kotlin?Правильным ответом будет
Any?.Сам по себе класс Any это почти аналог
Object, однако, благодаря поддержке nullable и не-nullable типов в Kotlin мы получили Any?. Фактически, Any? соответствует любому типу и null, а Any только любому типу.Если по порядку:
1.
Any является корнем иерархии не-nullable типов.2.
Any? является корнем иерархии nullable типов.3. Так как
Any? является супертипом Any, то Any? находится в самом верху иерархии типов в Kotlin.#буст #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥2
JetCo — это готовая к использованию библиотека Compose с готовыми компонентами пользовательского интерфейса как для Android, так и для KMP. Разработанная специально для энтузиастов Jetpack Compose, библиотека JetCo сделает вашу жизнь проще, ваши приложения — красивее, а ваших пользователей — счастливее.
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Как превратить UI Kit из дизайнерского артефакта в живую систему, где обновление стиля в Figma автоматически обновляет код на Android.
В статье — путь от ручного копирования палитр до генерации типобезопасных токенов через KotlinPoet, Gradle-плагины и Figma JSON.
Автор расскажет, как бизнес получает скорость и консистентность, как темная тема перестаёт быть болью, и почему iOS может безболезненно присоединиться к этой архитектуре.
#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
adb shell input keyevent – управление устройством с помощью системных событийОтправляйте системные события на Android-устройство через ADB – имитируйте нажатия аппаратных кнопок, жесты и другие действия без физического доступа к устройству.
# Базовые кнопки
adb shell input keyevent 3 # HOME
adb shell input keyevent 4 # BACK
adb shell input keyevent 26 # POWER (вкл/выкл)
adb shell input keyevent 24 # VOLUME_UP
adb shell input keyevent 25 # VOLUME_DOWN
# Медиа и специальные
adb shell input keyevent 85 # PLAY/PAUSE
adb shell input keyevent 86 # STOP
adb shell input keyevent 87 # NEXT
adb shell input keyevent 88 # PREVIOUS
adb shell input keyevent 164 # MUTE
1. Автоматизация тестов:
# Сценарий: открыть приложение, сделать действия, вернуться домой
adb shell am start -n com.yourapp/.MainActivity
sleep 2
adb shell input keyevent 4 # BACK
adb shell input keyevent 3 # HOME
2. Тестирование обработки прерываний:
# Во время работы приложения
adb shell input keyevent 26 # POWER (блокировка)
sleep 2
adb shell input keyevent 26 # POWER (разблокировка)
3. Управление медиа в фоне:
adb shell input keyevent 85 # PLAY/PAUSE музыки
Скриншот через комбинацию:
adb shell input keyevent 120 # SYSRQ (скриншот)
Перезагрузка устройства:
adb shell input keyevent 116 # POWER + перезагрузка через меню
Какие keyevent вы используете чаще всего?
Библиотека мобильного разработчика
#буст #MiddlePath #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Добавление кастомных изображений в ваше приложение может значительно улучшить и персонализировать пользовательский опыт, а также повысить вовлеченность пользователей.
В этой статье рассматриваются две новые возможности генерации изображений с помощью Firebase AI Logic: специализированные функции редактирования Imagen, которые в настоящее время находятся в стадии предварительной версии, и общедоступный Gemini 2.5 Flash Image (также известный как «Nano Banana»), предназначенный для создания контекстных или диалоговых изображений.
#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Приходилось ли когда-нибудь развивать библиотечный проект и публиковать из него артефакты? Команде Александра пришлось, когда появилась своя дизайн-система и разные переиспользуемые части приложения. Поначалу все были довольны, но со временем оказалось, что довольно трудно следить за тем, чтобы не сломать неаккуратными изменениями другие проекты.
В конце концов, им надоело бороться с ломающими изменениями вручную и захотелось немного магии: чтобы версии сами поднимались, да еще и показывали, сломали мы что-то или нет.
Александр рассказал о том, как научить Gradle анализировать изменения в API и автоматически поднимать версии артефактов с соблюдением семантического версионирования. Заодно он показал некоторые приемам в Gradle, которые помогут писать плагины.
Доклад будет полезен и тем, кто разрабатывает библиотеки и хочет реализовать аналогичное решение, и тем, кому интересно поучиться писать Gradle-плагины.
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Красивые мягкие тени делают интерфейс объёмным и аккуратным. В Compose этого можно добиться с помощью
drawBehind, чтобы контролировать цвет, размытие и смещение тени — как в дизайне.@Composable
fun ShadowCard(
modifier: Modifier = Modifier,
content: @Composable BoxScope.() -> Unit
) {
Box(
modifier = modifier
.drawBehind {
drawRoundRect(
color = Color(0x1A000000), // мягкая полупрозрачная тень
cornerRadius = CornerRadius(16.dp.toPx()),
topLeft = Offset(0f, 6.dp.toPx())
)
}
.background(Color.White, RoundedCornerShape(16.dp))
.padding(16.dp)
) {
content()
}
}
Тень выглядит естественно, без резких границ, повторяет форму карточки и не «съезжает» на светлой теме.
ShadowCard(
modifier = Modifier
.fillMaxWidth()
.height(120.dp)
) {
Text("PixelPerfect ", modifier = Modifier.align(Alignment.Center))
}
Такой подход легко адаптировать под любые формы и цвета. Главное — держать параметры тени (смещение, прозрачность, радиус) в синхронизации с макетами из Figma.
#PixelPerfect #JuniorKit #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
KMP Starter — современный, готовый к использованию шаблон приложения на Kotlin Multiplatform с дизайном Material 3, утилитами и чистой архитектурой.
Технический стек: Kotlin Multiplatform для кроссплатформенной разработки, Compose Multiplatform для UI, Material 3 как дизайн-система, Koin для инъекции зависимостей, Room в качестве локальной базы данных, DataStore для хранения настроек, корутины и Flow для асинхронного программирования, RevenueCat для покупок, MixPanel для аналитики, Kotlinx Serialization для сериализации JSON.
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
adb shell dumpsys meminfo – детальный анализ использования памяти приложениемМощный инструмент для мониторинга использования памяти вашим приложением в реальном времени. Помогает находить утечки памяти и оптимизировать потребление RAM.
1. PSS (Proportional Set Size):
• Реальная память, занимаемая приложением
• Включает разделяемую память (пропорционально)
2. Private Dirty:
• Память, принадлежащая только вашему приложению
• Не может быть выгружена в swap
3. Java Heap:
• Память, управляемая Dalvik/ART
• Ключевой показатель для поиска утечек
Мониторинг в реальном времени:
# Каждые 2 секунды обновлять информацию
watch -n 2 "adb shell dumpsys meminfo com.yourapp.package"
Сравнение состояний:
# До и после выполнения операции
adb shell dumpsys meminfo com.yourapp.package > before.txt
# Выполняем действия в приложении
adb shell dumpsys meminfo com.yourapp.package > after.txt
diff before.txt after.txt
Поиск утечек в Activity:
# Проверить, не остались ли Activity в памяти
adb shell dumpsys meminfo | grep -E "Activity|View|Context"
Только Java Heap:
adb shell dumpsys meminfo com.yourapp.package | grep -A 10 "Java Heap"
Нативные allocations:
adb shell dumpsys meminfo com.yourapp.package | grep -A 5 "Native Heap"
Applications Memory Usage (in KB)
Uptime: 1234567 Realtime: 1234567
** MEMINFO in pid 1234 [com.yourapp] **
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 12345 12000 345 100 15000 14000 1000
Dalvik Heap 5678 5600 78 50 6000 5800 200
🔧 Продвинутое использование:
Профилирование конкретной операции:
#!/bin/bash
echo "Память до:" > mem_log.txt
adb shell dumpsys meminfo com.yourapp.package >> mem_log.txt
# Запускаем тестовый сценарий
adb shell am start -n com.yourapp/.TestActivity
echo "Память после:" >> mem_log.txt
adb shell dumpsys meminfo com.yourapp.package >> mem_log.txt
Pro-совет: Используйте с procstats для долгосрочного мониторинга:
bash
adb shell dumpsys procstats --hours 1 com.yourapp.package
Как вы отслеживаете использование памяти в своих приложениях?
#буст #MiddlePath #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2