Telegram Web Link
🤖 Адаптивность UI в Android-приложениях

Android-приложения запускаются на экранах с разными размерами и ориентацией. Чтобы интерфейс выглядел хорошо в любых условиях, стоит учитывать несколько простых правил, которые я выработал за годы опыта 👇

1️⃣ Не привязывайтесь к фиксированным размерам
Фиче может быть выделен весь экран, часть окна или вообще маленький контейнер. Пусть она сама решает: занять всё пространство или только необходимое. Остальное — задача хоста, который через параметры (например, Modifier в Compose) подстроит отображение или сама правильно разместит (например, по центру).

2️⃣ Используйте адаптивные компоненты
Вместо LazyColumn — лучше LazyVerticalGrid, а для RecyclerViewGridLayoutManager. Они умеют подстраивать сетку под свободное место на экране.

3️⃣ Закладывайтесь на увеличение текста и элементов
Пользователь может менять скейл интерфейса: Google позволяет масштабировать всё, увеличивая DP → PX. Поэтому всегда предусмотрите скролл, если контента может стать больше.

4️⃣ UI фичи не должен знать, где он окажется
Фича отвечает только за свой UI. А вот приложение решает, как её показать: в одну панель или, например, в связке через ListDetailPaneScaffold, где на экране могут быть сразу несколько экранов.

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

📚 Что почитать:
- Практики по построению адаптивных приложений
- Compose Material 3 Adaptive
- Jetpack WindowManager
- Как строить адаптивный UI через layout

💬 Делитесь в комментариях своими советами и болями адаптивности UI

#android #ui #compose #adaptive #ux #material3
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍46🔥83🤯3
‼️ Google объединяет Android и ChromeOS в одну систему 🤯
Уже в 2026 году покажут первый ноутбук на обновлённой Android ОС!

На Qualcomm Snapdragon Summit глава Android-экосистемы заявил, что Google создаёт единую ОС.
👉 Она будет основана на Android, но с опытом и наработками из ChromeOS.
👉 Первое устройство, скорее всего, получит флагманский Snapdragon, а не фирменный Google Tensor.

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

💡 Лично я очень хочу попробовать такой ноутбук. А вы бы перешли на Android-ноут?

🔗 Источник

#android #chromeos
👍82🤯169🤔5🎉3🔥2🤝1
🤖 Как правильно загружать данные для UI через ViewModel (RU,20м)

Я видел разные вариации загрузки данных через ViewModel, чтобы они "быстрее показались на UI": запуск в init блоке ViewModel, запуск загрузки из LaunchedEffect из Composable или из Fragment коллбека. Я за самый правильный путь - использование холодных стримов данных, которые запустят в момент появление клиента для отображения данных из них. Все эти ранние прогревы экономят очень мало по сравнению с длинной запроса. Рекомендую почитать статью, где автор описал все лучшие практики по загрузке.

class UserAccountDetailsViewModel(
private val getUserDetailsUseCase: GetUserDetailsUseCase = GetUserDetailsUseCase.create(),
) : ViewModel() {

val userDetails: Flow<ViewState> = flow {
emit(
getUserDetailsUseCase.execute()
.fold(
onSuccess = { ViewState(...) },
onFailure = { ViewState(...) }
)
)
}.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5_000), // Важно
ViewState(isClick Me Load More = true, isError = false)
)
}


Что еще полезно в статье:
👉 Как suspend вызов превратить в Flow
👉 Как делать принудительное обновление
👉 Условная загрузка

#android #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
39👍12🤯9🔥3🆒1
🐱 Analytiks - Android библиотека, которая позволит работать с разными популярными аналитиками, так и добавить собственную. Есть возможность перехвата событий и другие полезные утилиты. Очень удобно делать разные конфигурации аналитик под разные сборки.

// Проводим инициализацию
val analytiks: Analytiks = Analytiks.Builder()
.addClient(GoogleAnalyticsClient()) // Firebase Analytics
.addClient(MixpanelAnalyticsClient(token = "YOUR_TOKEN"))
.addClient(TimberAnalyticsClient()) // For debug logging
.build()

analytiks.initialize(applicationContext)

// Track a simple event
analytiks.logEvent("user_signup")

// Track an event with properties
analytiks.logEvent(
eventName = "purchase_completed",
properties = mapOf(
"product_id" to "12345",
"price" to 29.99,
"currency" to "USD"
)
)

// Identify a user
analytiks.identify(userId = "user_12345")

// Set user properties
analytiks.setUserProperty("subscription_type", "premium")

// Send all queued events immediately
analytiks.pushAll()


#android #аналитика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🤔7
Media is too big
VIEW IN TELEGRAM
📹 Есть ли будущее у ноутбука на основе Android?

Google официально заявила что в следующем году, нам покажут ноутбук c ОС на основе Android. Это не те Pixelbook чтобы были раньше, а результат нового подразделения, которое объединило ChromeOS и Android, что даёт новые переспективы рынка и я верю что это будет успех. Всё подробнее рассказал в новом видео

📹 Смотрите на VK Video

#AndroidBroadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍284🔥3🙏1
❗️ Google поясняет за Android developer verification

Google сделала выпуск Android Developer Backstage про будущую обязательную верификацию разработчиков.

Значит ли что sideloading на Android больше не будет?

АБСОЛЮТНО НЕТ. Суть изменения - защита пользователей от недобросовестных разработчиков, а не ограничить выбор метода установки. Основная задача - убедиться, что загружаемая сборка действтиельно от оригинального разработчика.

Как верификация разработчика повлияет на использование Android Studio?

Команда работает над тем, чтобы работа не поменялась. Собирать и устанавливать APK можно будет без верификации.

Как распространять сборки для внутренних тестеров?

Если вы будете делать установку не только через adb, тогда придется пройти верификацию и зарегистрировать пакет.

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

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

#android #google #googleplayservices #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯35👍92
Если кратко подытожить, то установка через ADB не будет ограничена каким либо образом, что даёт вариант установки для всех желающих с минимальным набором навыков поставить, что угодно на Android устройство по кабелю или сети. Только время покажет какие ограничения поставят на установку через ADB покажет время, но мне почему-то не верится, что никаких ограничений НЕ будет.
👍29🤯12🤝2
Вышла Claude Sonnet 4.5 и сразу вырвалась в лидеры по бенчмаркам, связанным с программированием

Заявление разработчиков
Claude Sonnet 4.5 — не только самая мощная, но и самая согласованная с безопасностью из всех наших моделей. Благодаря улучшенным возможностям Claude и обширному обучению в области безопасности нам удалось существенно улучшить его поведение: снизить податливость на лесть, склонность к обману, стремление к власти и подталкивание к иллюзиям. Для агентных функций и работы с компьютером мы также значительно усилили защиту от атак через prompt injection — одной из самых серьёзных угроз для пользователей.


#ai
22🤔10👍7🔥5
🤯 F-Droid выражает протест против обязательной верификации всех разработчиков

Разработчики альтернативного магазина open-source приложений выражают обеспокоенность тем, что обязательная верификация для распространения приложений на устройствах, сертифицированных Google, негативно влияет на творчество.

Но у меня сразу ряд вопросов:
👉 Какие проблемы это создает для распространения через F-Droid?
👉 Исходный код и все авторы приложения из F-Droid известны
👉 Авторы гарантируют что софт настоящий и без трекинга, то в чем суть подтверждения авторства?

Официальное заявление можно найти тут

#android #googleplay #fdroid
41👍24🤔6🔥3🤯1
‼️ Срочно выключите эту настройку в IDE от JetBrains

Бесплатные IDE от JetBrains будут шарить код с компанией по умолчанию (источник - офиц. блог JetBrains) для обучения ИИ. Шаринг можно будет отключить в настройках.

Чтобы отключить шаринг данных идите в настройки IDE, затем Appearance & Behavior » System Settings » Data Sharing.

В Android Studio Narwhal этой галочки нету, но следите за будущими версиями.

Интересно, если я в России или Беларуси, то мой кода подойдет для отправки по сети или JB посчитает его неподходящим для обучения AI? Плагины же качать нельзя

#jetbrains #androidstudio #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯51👍7🆒32🔥2🤝2
Прокачай рабочее место: стол, который меняет правила игры! ⚡️

❗️Только до 13 октября 2025 включительно — уникальное предложение: 26 390 ₽ вместо 53 090 ₽.

2️⃣ мощных двигателя обеспечивают плавное поднятие и опускание (от 74 до 122 см) с нагрузкой до 90 кг. RGB-подсветка создаёт атмосферу для работы и игр, а встроенные крепления для наушников, коврик и держатель для напитков помогут поддерживать порядок.

💡 Столешница из ЛДСП толщиной 18 мм, порт Type-C 18Вт для быстрой зарядки и выравнивающиеся ножки для любой поверхности. Всё продумано для вашего комфорта и максимальной концентрации.

👉 И все это компьютерный стол с электрорегулировкой высоты Ergostol Ultima!

🎁 А с промокодом ANDROID10 получите ещё –10% сверху!

Целых 2️⃣ мотора по цене 1️⃣ — ультимативная выгода ждёт вас в Ergostol! 👌🏻

Реклама. ООО «СОФТЭФФЕКТ». ИНН 7735575262
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯6👍4🤔41
Media is too big
VIEW IN TELEGRAM
🛒 Как можно следить за потреблением заряда батареи в Android Vitals

В Google Play Console в разделе "Vitals" можно отследить как расходуется заряд батареи приложением, особенно в случаях ненужных захватов Wake Lock. Вы нашли что-то интересное для себя в этом разделе ?

Wake Lock — это «костыль», который не дает телефону уснуть. Разработчик может повесить блокировку, чтобы не дать выключится экрану или процессору


📹 Видео версия (EN, 21м)

#android #googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76
⚠️ Работа с зависимостями в Gradle таит множество подводных камней:
- Откуда берётся зависимость?
- Какие транзитивные зависимости подтянутся вместе с ней?
- Как убедиться, что скачался именно тот артефакт, который вы ожидали?

Чтобы сборка была стабильной, безопасной и быстрой, стоит придерживаться ряда практик 👇

1️⃣ Используйте единый источник зависимостей

В больших компаниях принято разворачивать свой Nexus / Artifactory. Он проксирует остальные репозитории (MavenCentral, Google и др.), и для проекта остаётся один источник правды.

Это ускоряет сборку (репозиторий ближе и быстрее), а также защищает от случайного скачивания библиотек «из непонятного интернета».

2️⃣ Ограничивайте содержимое репозиториев

При подключении нескольких репозиториев стоит явно ограничить группы пакетов, которые могут из них подтягиваться.

Например, для Google Maven:

// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google {
mavenContent {
includeGroupAndSubgroups("androidx")
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
includeGroupAndSubgroups("org.chromium.net")
includeGroupAndSubgroups("com.crashlytics.sdk")
}
}
mavenCentral()
}
}


Так вы избежите ненужных запросов в «левые» репозитории.

3️⃣ Проверяйте скачанные артефакты

Gradle поддерживает dependency verification. Это позволяет проверить контрольные суммы загружаемых артефактов и защититься от подмены.

📖 Документация: Dependency Verification

Пример gradle/verification-metadata.xml:
<verification-metadata>
<configuration>
<verify-metadata>true</verify-metadata>
<verify-signatures>false</verify-signatures>
</configuration>

<components>
<component group="org.apache.pdfbox" name="pdfbox" version="2.0.17">
<artifact name="pdfbox-2.0.17.jar">
<sha512 value="..." />
</artifact>
</component>
</components>
</verification-metadata>


4️⃣ Ограничивайте транзитивные зависимости

Любая библиотека подтягивает за собой десятки других. Чтобы не получить неожиданное поведение или небезопасные версии — используйте constraints:
dependencies {
implementation("org.apache.httpcomponents:httpclient")

constraints {
implementation("org.apache.httpcomponents:httpclient:4.5.3") {
because("previous versions have a critical bug")
}
implementation("commons-codec:commons-codec:1.11") {
because("version 1.9 pulled from httpclient has issues")
}
}
}


А если нужно зафиксировать версии жёстко:
configurations.all {
resolutionStrategy {
force("org.example:lib:1.2.3")
// Есть много других возможностей
}
}


5️⃣ Анализируйте дерево зависимостей

Чтобы понять, кто и что тянет, используйте:
./gradlew dependencies
./gradlew dependencyInsight --dependency okhttp --configuration releaseRuntimeClasspath


Это поможет отловить дубликаты и неожиданные версии.


6️⃣ Автоматизируйте обновления

Поддерживайте проект в актуальном состоянии:
🔄 используйте Gradle Versions Plugin, чтобы проверять обновления библиотек.
📝 заведите политику обновлений (например, обновлять минорные версии раз в месяц, а мажорные — отдельно и осознанно).

🔥 В итоге, хорошая стратегия работы с зависимостями — это баланс между удобством разработки и контролем. Чем больше проект и команда, тем жёстче стоит соблюдать правила.

#gradle #лучшиепрактики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7014🔥4🤯2
🔥 Вышел JUnit 6 с поддержкой Kotlin

Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java

Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
🏝 Поддержка корутин из Kotlin
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉 --fail-fast режим для запуска тестов из терминала

#тестирование #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥49👍10🤯3
🔥 Как ускорить запуск приложения - вынести инициализацию Firebase из Main потока в Application.onCreate() и запустите его на фоновом потоке. Профит на графике. Источник - блог @nek_12_personal

#firebase #android #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
36👍17🔥11🤔4
В программировании есть 2 нерешаемые задачи: выбор имён и когда сбрасывать кэш

Phil Karlton

Какие еще задачи знаете вы? Делитесь в комментариях 🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥73🤯2🤔1
🚀 Ускорения запуска приложения со Splash скрин за счет использования прозрачной Activity.

По умолчанию все Activity в Android являются непрозрачными и перекрывают Activity под ними, что приводит к остановке их работы. Автор статьи решил сделать иначе и запускается MainActivity, а поверх SplashActivity. Это позволяет продолжать работать MainActivity и прогреть код в ней.

Подробности в статье (EN,9м)

#android #производительность
👍36🤔94🤯2
📹 Как проходит собеседование на позицию Android разработчика в Wildberries

Александр Гирев, разработчик из Wildberries, провел собеседование на канале, так как оно происходит для всех кандидатов в компанию. Несколько секций, разные темы и много полезной инфы! Смотреть до конца.

📹 Также смотрите на VK Video

🔈 ХОТИТЕ ПОПАСТЬ НА собеседование KMP разработчика - уже открыт прием заявок! Заполняйте тут

#AndroidBroadcast #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
28👍19🔥6🤔1
🤖 Если вы искали альтернативу Dagger/Hilt, но с поддержкой Kotlin Multiplatform, то как раз вышла свежая версия Koin Annotations, которая значительно упрощает миграцию!

#dagger #hilt #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍64
2025/10/26 07:29:54
Back to Top
HTML Embed Code: