Рано или поздно любой разработчик сталкивается с C/C++ кодом в приложениях на разных уровнях:
Рекомендую вам почитать статью от разработчика из Яндекс Браузера, где много взаимодействия с C/C++ кодом. Автор освещает создания простой C/C++ библиотеки, как её собрать и встроить в код Android приложения через JNI.
Java Native Interface (JNI) — это программный интерфейс, который позволяет коду на Java взаимодействовать с библиотеками, написанными на C, C++ и других языках. В Android он критически важен для выполнения ресурсоёмких операций и работы с нативным кодом.
#android #jni #яндекс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11❤3🤯1
Простой способ как ускорить свою разработку - генерация кода из шаблонов внутри IDE. В статье руководство как добавить свои собственные на основе File Templates
#android #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🤔1
🤯 Представлен убийца процессоров Apple, но будет только для Android
Qualcomm представила новый флагманский SoC для Android устройств - Snapdragon 8 Elite Gen 5 (когда уже наконец-то сделают просто и понятный нейминг). CPU, GPU и NPU стали быстрее, система стала энергоэффективнее, но не ожидайте лучшего времени работы устройств.
Qualcomm представила новый флагманский SoC для Android устройств - Snapdragon 8 Elite Gen 5 (когда уже наконец-то сделают просто и понятный нейминг). CPU, GPU и NPU стали быстрее, система стала энергоэффективнее, но не ожидайте лучшего времени работы устройств.
👍25🔥10🤔3
Что нового:
👉 WindowSizeClass появились разделения для больших (Large - от 1200 до 1600) и очень больших (XLarge - более 1600 dp) экранов
👉 Получение WindowMetrics теперь работает с Application Context, а не только с UI Context
👉 Добавили API для автоматического сохранения и восстановления статуса встраивания Activity при перезапуске процесса
👉 Удалили экспериментальное API WindowInsets
#android #androidjetpack #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤6👍5
Основная цель библиотеки — предоставить действительные (actionable) данные о состоянии безопасности устройства и его компонентов, в частности:
👉 Версии обновляемых компонентов (updateable system components).
👉 Наличие применённых исправлений безопасности (security patches / applied fixes).
👉 Общий “security state” — то есть агрегированное представление безопасности системы.
То есть, библиотека даёт вам API, чтобы “спросить у Android”: насколько актуальна система, есть ли уязвимости, какие компоненты нуждаются в обновлении.
Она не заменяет шифрование/криптографию (как, скажем, security-crypto), но с дополняет стек безопасности: помогает принимать решения на основании состояния платформы.
#android #androidjetpack #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍8🤔1
Android-приложения запускаются на экранах с разными размерами и ориентацией. Чтобы интерфейс выглядел хорошо в любых условиях, стоит учитывать несколько простых правил, которые я выработал за годы опыта 👇
Фиче может быть выделен весь экран, часть окна или вообще маленький контейнер. Пусть она сама решает: занять всё пространство или только необходимое. Остальное — задача хоста, который через параметры (например, Modifier в Compose) подстроит отображение или сама правильно разместит (например, по центру).
Вместо
LazyColumn — лучше LazyVerticalGrid, а для RecyclerView — GridLayoutManager. Они умеют подстраивать сетку под свободное место на экране.Пользователь может менять скейл интерфейса: Google позволяет масштабировать всё, увеличивая DP → PX. Поэтому всегда предусмотрите скролл, если контента может стать больше.
Фича отвечает только за свой 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🔥8❤3🤯3
‼️ Google объединяет Android и ChromeOS в одну систему 🤯
Уже в 2026 году покажут первый ноутбук на обновлённой Android ОС!
На Qualcomm Snapdragon Summit глава Android-экосистемы заявил, что Google создаёт единую ОС.
👉 Она будет основана на Android, но с опытом и наработками из ChromeOS.
👉 Первое устройство, скорее всего, получит флагманский Snapdragon, а не фирменный Google Tensor.
Это значит, что адаптивность приложений, работа с клавиатурой и мышью, а также desktop-опыт становятся важнее как никогда.
💡 Лично я очень хочу попробовать такой ноутбук. А вы бы перешли на Android-ноут?
🔗 Источник
#android #chromeos
Уже в 2026 году покажут первый ноутбук на обновлённой Android ОС!
На Qualcomm Snapdragon Summit глава Android-экосистемы заявил, что Google создаёт единую ОС.
👉 Она будет основана на Android, но с опытом и наработками из ChromeOS.
👉 Первое устройство, скорее всего, получит флагманский Snapdragon, а не фирменный Google Tensor.
Это значит, что адаптивность приложений, работа с клавиатурой и мышью, а также desktop-опыт становятся важнее как никогда.
💡 Лично я очень хочу попробовать такой ноутбук. А вы бы перешли на Android-ноут?
🔗 Источник
#android #chromeos
👍82🤯16❤9🤔5🎉3🔥2🤝1
Я видел разные вариации загрузки данных через
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
// Проводим инициализацию
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
Google официально заявила что в следующем году, нам покажут ноутбук c ОС на основе Android. Это не те Pixelbook чтобы были раньше, а результат нового подразделения, которое объединило ChromeOS и Android, что даёт новые переспективы рынка и я верю что это будет успех. Всё подробнее рассказал в новом видео
#AndroidBroadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤4🔥3🙏1
Google сделала выпуск Android Developer Backstage про будущую обязательную верификацию разработчиков.
Значит ли что sideloading на Android больше не будет?
АБСОЛЮТНО НЕТ. Суть изменения - защита пользователей от недобросовестных разработчиков, а не ограничить выбор метода установки. Основная задача - убедиться, что загружаемая сборка действтиельно от оригинального разработчика.
Как верификация разработчика повлияет на использование Android Studio?
Команда работает над тем, чтобы работа не поменялась. Собирать и устанавливать APK можно будет без верификации.
Как распространять сборки для внутренних тестеров?
Если вы будете делать установку не только через adb, тогда придется пройти верификацию и зарегистрировать пакет.
Нужно ли будет регистрировать приложение, если сборка распространяется для ограниченной группы пользователей?
Официальная рекомендация - пройти регистрацию. Но можно будет получить бесплатный пользовательский аккаунт для учителей, студентов и энтузиастов для распространения сборки на ограниченное количество устройств.
#android #google #googleplayservices #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯35👍9❤2
Если кратко подытожить, то установка через ADB не будет ограничена каким либо образом, что даёт вариант установки для всех желающих с минимальным набором навыков поставить, что угодно на Android устройство по кабелю или сети. Только время покажет какие ограничения поставят на установку через ADB покажет время, но мне почему-то не верится, что никаких ограничений НЕ будет.
👍29🤯12🤝2
Вышла Claude Sonnet 4.5 и сразу вырвалась в лидеры по бенчмаркам, связанным с программированием
Заявление разработчиков
#ai
Заявление разработчиков
Claude Sonnet 4.5 — не только самая мощная, но и самая согласованная с безопасностью из всех наших моделей. Благодаря улучшенным возможностям Claude и обширному обучению в области безопасности нам удалось существенно улучшить его поведение: снизить податливость на лесть, склонность к обману, стремление к власти и подталкивание к иллюзиям. Для агентных функций и работы с компьютером мы также значительно усилили защиту от атак через prompt injection — одной из самых серьёзных угроз для пользователей.
#ai
❤22🤔10👍7🔥5
🤯 F-Droid выражает протест против обязательной верификации всех разработчиков
Разработчики альтернативного магазина open-source приложений выражают обеспокоенность тем, что обязательная верификация для распространения приложений на устройствах, сертифицированных Google, негативно влияет на творчество.
Но у меня сразу ряд вопросов:
👉 Какие проблемы это создает для распространения через F-Droid?
👉 Исходный код и все авторы приложения из F-Droid известны
👉 Авторы гарантируют что софт настоящий и без трекинга, то в чем суть подтверждения авторства?
Официальное заявление можно найти тут
#android #googleplay #fdroid
Разработчики альтернативного магазина open-source приложений выражают обеспокоенность тем, что обязательная верификация для распространения приложений на устройствах, сертифицированных Google, негативно влияет на творчество.
Но у меня сразу ряд вопросов:
👉 Какие проблемы это создает для распространения через F-Droid?
👉 Исходный код и все авторы приложения из F-Droid известны
👉 Авторы гарантируют что софт настоящий и без трекинга, то в чем суть подтверждения авторства?
Официальное заявление можно найти тут
#android #googleplay #fdroid
❤41👍24🤔6🔥3🤯1
Бесплатные 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🆒3❤2🔥2🤝2
Прокачай рабочее место: стол, который меняет правила игры! ⚡️
❗️Только до 13 октября 2025 включительно — уникальное предложение: 26 390 ₽ вместо 53 090 ₽.
2️⃣ мощных двигателя обеспечивают плавное поднятие и опускание (от 74 до 122 см) с нагрузкой до 90 кг. RGB-подсветка создаёт атмосферу для работы и игр, а встроенные крепления для наушников, коврик и держатель для напитков помогут поддерживать порядок.
💡 Столешница из ЛДСП толщиной 18 мм, порт Type-C 18Вт для быстрой зарядки и выравнивающиеся ножки для любой поверхности. Всё продумано для вашего комфорта и максимальной концентрации.
👉 И все это компьютерный стол с электрорегулировкой высоты Ergostol Ultima!
🎁 А с промокодом
Целых 2️⃣ мотора по цене 1️⃣ — ультимативная выгода ждёт вас в Ergostol! 👌🏻
Реклама. ООО «СОФТЭФФЕКТ». ИНН 7735575262
❗️Только до 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🤔4❤1
Media is too big
VIEW IN TELEGRAM
В Google Play Console в разделе "Vitals" можно отследить как расходуется заряд батареи приложением, особенно в случаях ненужных захватов Wake Lock. Вы нашли что-то интересное для себя в этом разделе ?
Wake Lock — это «костыль», который не дает телефону уснуть. Разработчик может повесить блокировку, чтобы не дать выключится экрану или процессору
#android #googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6
⚠️ Работа с зависимостями в Gradle таит множество подводных камней:
- Откуда берётся зависимость?
- Какие транзитивные зависимости подтянутся вместе с ней?
- Как убедиться, что скачался именно тот артефакт, который вы ожидали?
Чтобы сборка была стабильной, безопасной и быстрой, стоит придерживаться ряда практик 👇
1️⃣ Используйте единый источник зависимостей
В больших компаниях принято разворачивать свой Nexus / Artifactory. Он проксирует остальные репозитории (MavenCentral, Google и др.), и для проекта остаётся один источник правды.
Это ускоряет сборку (репозиторий ближе и быстрее), а также защищает от случайного скачивания библиотек «из непонятного интернета».
2️⃣ Ограничивайте содержимое репозиториев
При подключении нескольких репозиториев стоит явно ограничить группы пакетов, которые могут из них подтягиваться.
Например, для Google Maven:
Так вы избежите ненужных запросов в «левые» репозитории.
3️⃣ Проверяйте скачанные артефакты
Gradle поддерживает dependency verification. Это позволяет проверить контрольные суммы загружаемых артефактов и защититься от подмены.
📖 Документация: Dependency Verification
Пример gradle/verification-metadata.xml:
4️⃣ Ограничивайте транзитивные зависимости
Любая библиотека подтягивает за собой десятки других. Чтобы не получить неожиданное поведение или небезопасные версии — используйте constraints:
А если нужно зафиксировать версии жёстко:
5️⃣ Анализируйте дерево зависимостей
Чтобы понять, кто и что тянет, используйте:
Это поможет отловить дубликаты и неожиданные версии.
6️⃣ Автоматизируйте обновления
Поддерживайте проект в актуальном состоянии:
🔄 используйте Gradle Versions Plugin, чтобы проверять обновления библиотек.
📝 заведите политику обновлений (например, обновлять минорные версии раз в месяц, а мажорные — отдельно и осознанно).
🔥 В итоге, хорошая стратегия работы с зависимостями — это баланс между удобством разработки и контролем. Чем больше проект и команда, тем жёстче стоит соблюдать правила.
#gradle #лучшиепрактики
- Откуда берётся зависимость?
- Какие транзитивные зависимости подтянутся вместе с ней?
- Как убедиться, что скачался именно тот артефакт, который вы ожидали?
Чтобы сборка была стабильной, безопасной и быстрой, стоит придерживаться ряда практик 👇
В больших компаниях принято разворачивать свой Nexus / Artifactory. Он проксирует остальные репозитории (MavenCentral, Google и др.), и для проекта остаётся один источник правды.
Это ускоряет сборку (репозиторий ближе и быстрее), а также защищает от случайного скачивания библиотек «из непонятного интернета».
При подключении нескольких репозиториев стоит явно ограничить группы пакетов, которые могут из них подтягиваться.
Например, для 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()
}
}
Так вы избежите ненужных запросов в «левые» репозитории.
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>
Любая библиотека подтягивает за собой десятки других. Чтобы не получить неожиданное поведение или небезопасные версии — используйте 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")
// Есть много других возможностей
}
}Чтобы понять, кто и что тянет, используйте:
./gradlew dependencies
./gradlew dependencyInsight --dependency okhttp --configuration releaseRuntimeClasspath
Это поможет отловить дубликаты и неожиданные версии.
Поддерживайте проект в актуальном состоянии:
🔄 используйте Gradle Versions Plugin, чтобы проверять обновления библиотек.
📝 заведите политику обновлений (например, обновлять минорные версии раз в месяц, а мажорные — отдельно и осознанно).
🔥 В итоге, хорошая стратегия работы с зависимостями — это баланс между удобством разработки и контролем. Чем больше проект и команда, тем жёстче стоит соблюдать правила.
#gradle #лучшиепрактики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍70❤14🔥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
👉
#тестирование #kotlin
Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java
Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉
--fail-fast режим для запуска тестов из терминала#тестирование #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥49👍10🤯3
