Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
🤯 Google придумала новый способ давления на разработчиков

Теперь если в приложении не добавили тёмную тему, то пользователь сам принудительно сделает её включение через системные настройки. Это приведёт к инверсии цветов.

Наконец-то Google поняла что разработчики иногда забивают на тёмную тему, обязать их не получается (ну почему через Google Play не обязать?).

Видно так решила Google:
Будем форсировать фичи и пусть пользователи жалуются и занижают рейтинг приложения в магазине


Странно, что на рекламной графике использовали приложение FitBit, хотя в нем есть нативная темная тема, да и сам продукт принадлежит Google.
В FitBit нет тёмной темы. Да и не удивился - худшее спортивное приложение, что я использовал 😞

#android16
🤔38👍20🤯74🔥3
Media is too big
VIEW IN TELEGRAM
Вот так рабоnает принудительный режим темной темы в Android 16 QRP 2

Google Maps имеют свою тёмную тему, но в настройках приложения я поставил принудительно только светлую тему. Расширенный темный режим не берет ресурсы для темной темы, а инвертирует светлую.

#android #android16
👍53🔥53🤯3
Принудительные монохромные иконки в действии. ChatGPT у меня установлен как PWA и пока их автоматический монохром не задевает, вот Shortcut приложений перекрасился

#android #android16
👍30🔥8🤔21🤯1
Media is too big
VIEW IN TELEGRAM
🤖 Пример работы расширенной темной темы с Compose приложением. Тут придется темную делать сам, так как настройка не повлияла

#android16 #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔15👍9🏆3🤯2
🤯 ОФИЦИАЛЬНО На Android запускаются графические Linux приложений

В Android 16 QRP2 Beta 1 уже можно запустить графические Linux приложения. На скриншоте - Visual Studio Code для Debian.

Объединение технологий ChromeOS и Android дают свои результаты и идёт расширение возможностей. Дальше - вся ваша Steam библиотека будет доступна через Proton (как в SteamDeck) 🔥🔥🔥

Источник - Mishaal Android News

#android16 #linux
🔥129🤯237👍4
🤯 Предупреждение об отсутствии поддержки страницы памяти в 16 Kb

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

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

#android16 #ndk
👍44🤯274
🤖 Вышла свежая версия Robolectric с поддержкой Android 16

Новая версия фреймворка для тестирования Android приложения на JVM теперь поддерживает свежую версию Android, а также убрали поддержку Android 5.0 и 5.1 (API Level 21 и 22).

🔥 Новая крутая фича - нативные ресурсы
Под капотом Robolectric начинает прокидывать нативные asset-id в C/C++-код фреймворка (вместо Java-эмуляции). Работает пока только на Android 16

Зачем это разработчиками? Большая точность разрешения ресурсов: aapt2-сгенерированные таблицы читаются так же, как на Android устройстве/эмуляторе. Меньше расхождений между JVM-тестом и устройством.

Включить можно глобально для всех тестов в Gradle
test {
systemProperty += ["robolectric.resourcesMode", "NATIVE"]
systemProperty += ["robolectric.enabledSdks", "36"]
}

или для отдельного теста:
import org.robolectric.annotation.ResourcesMode

@Config(sdk = [36])
@ResourcesMode(ResourcesMode.Mode.NATIVE)
class MyTest { /* ... */ }


#android16 #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍241
🤖 Вышла вторая Beta Android 16 QRP2

Осенний фича релиз Android 16 всё ближе и вышла следующая бета с новыми возможностями:
👉 Platform Stability - API больше меняться не будет и можно заливать в Google Play в Beta/Alpha каналы

👉 Специальный режим установки приложения через ADB, чтобы разработчики могли тестировать приложения с вводом системы верификации разработчиков:
adb shell pm set-developer-verification-result


👉 Новый сборщик мусора. ART теперь будет поставляться с Generational Concurrent Mark-Compact (CMC) Garbage Collector, которые фокусируется на сборке новых объектов, которые обычно и чистятся. Ожидается снижения потребления CPU ресурсов и потребление заряда батареи.

👉 Встроенные счетчик количества шагов в Health Connect. Приложения смогут получить эти данные, если у них есть разрешение READ_STEPS.

Чтобы проверить наличие API из Android 16 QRP2 надо вызвать новое API
if (Build.VERSION.SDK_INT_FULL >=
Build.VERSION_CODES_FULL.BAKLAVA_1) {
// Вызываем APIs из Android 16 QPR2
}


Релиз обновленной версии Android 16 ожидается в ноября 2025

#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍6
🤖 Как в приложение Додо пиццы добавляли Live Update из Android 16: где макеты врут, a SDK ставит границы

Я давно ждал, когда в Android появится аналог крутых Live Activities из iOS. И когда Google наконец-то представил Live Updates в Android 16, сразу же ждал когда она появится в приложениях доставки/такси, используемыми мною. Неудивительно но ДоДо Пицца оперативно это сделали.

Оказалось, что за красивыми картинками из презентации скрывается целая история с ограничениями, которые не описаны в документации. Ребят из ДоДо прошли через боль дизайнеров, перерисовывавших макеты, и неожиданные сюрпризы от SDK и рассказывают про свой опыт.

🔑 Ключевые открытия и борьба с реальностью:

🤯 Макеты врут!
Иконка (например, машинка) не может красиво «обрезать» сегмент прогресс-бара, как в дизайне. Она просто ложится сверху, и между ними всегда будет зазор.
🖌 Цвета не сходятся. У прогресс-бара есть скрытый оверлей, поэтому подобрать идеально одинаковый цвет для иконки и бара — невозможно.
📱 Эмулятор — не помощник. Ни чипсу в статус-баре, ни работу на Always-On-Display на эмуляторе не проверить. Только живой девайс!
🍎 iOS vs Android: В iOS Live Activities — это мини-виджет с огромной свободой для брендинга. В Android — это жёсткий системный шаблон. Минус для дизайнеров, но плюс для единообразия опыта пользователя.

Что в итоге?

Несмотря на все ограничения, фича того стоит! Пользователи получают супер-наглядный и всегда видимый статус заказа, а мы — новый стандартизированный инструмент от Google.

А вы уже видели Live Updates в действии? Что думаете о таком подходе Google? 👇

#Android #Android16 #AlwaysOn
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥114🤔3
🤖 Android 16 QPR2 вышел — первый минорный релиз SDK с новыми API!

Google выпустил Android 16 QPR2 — первое минорное обновление платформы, которое приносит новые функции без ломающих изменений.

🔧 Новый подход к версиям SDK
Теперь можно проверять минорные обновления через новые поля в Build:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA && 
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
// API из QPR2
}


Ключевые изменения:
👉 Расширенная темная тема — система автоматически инвертирует интерфейс для доступности
👉 Пользовательские формы иконок — пользователи могут менять форму всех иконок
👉 Интерактивный шеринг — обновление контента в реальном времени в превью шаринга
👉 Новый сборщик мусора — снижает нагрузку на CPU

Каждую фичу разберем подробнее в следующих постах! Подписывайте на @android_broadcast, чтобы не пропустить

#Android16 #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
22👍17🔥1
🤖 Android 16 QPR2: системный шаринг наконец стал интерактивным

Раньше системный шузер для шаринга был «односторонним»: вы собрали Intent, отдали его в Intent.createChooser(...) — и дальше всё полностью контролирует система.

После открытия sharesheet вы уже не можете:
👉 обновить текст или вложения;
👉 убрать/добавить таргеты;
👉 синхронизировать состояние с продолжающимся действием в приложении.

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

Не так давно была возможность изменить контент для шаринга из шузера (сделали похожим как в iOS), а также добавить действия.

В Android 16 QPR2 / API 36.1 появился новый механизм — Interactive Chooser Sessions. Теперь приложение может держать живую сессию шаринга, обновлять её и получать события, пока открыт системный sharesheet. Для этого используются ChooserManager и ChooserSession.

// Базовый пример: запуск интерактивной сессии (Kotlin)
val chooserManager: ChooserManager = context.getSystemService()

val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "This is a message that will be shared.")
}

val chooserIntent = Intent.createChooser(shareIntent, null)

val session: ChooserSession = chooserManager.startSession(context, chooserIntent)
val token: ChooserSessionToken = session.token


token можно сохранить в ViewModel или savedStateHandle, чтобы потом восстановить сессию после поворота экрана или пересоздания Activity.

val existingToken: ChooserSessionToken = /* restore from state */
val existingSession: ChooserSession = chooserManager.getSession(existingToken) ?: return


Управление сессией через ChooserSession API

val executor: Executor = ContextCompat.getMainExecutor(context)

session.addStateListener(executor, object : ChooserSession.StateListener {
override fun onStateChanged(state: Int) { }

override fun onBoundsChanged(bounds: Rect) { }
})


Временное отключение таргетов на время долгой операции:
session.setTargetsEnabled(false)

val updatedShareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "Updated message generated in runtime")
}

val updatedChooserIntent = Intent.createChooser(updatedShareIntent, null)
session.updateIntent(updatedChooserIntent)

session.setTargetsEnabled(true)

// Завершение сессии, когда шаринг больше не нужен:
session.endSession()


#Android #Android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍306
🤖 Новые способы защиты в Android 16 от malware, которое злоупотребляет Accessibility

В Android уже давно существует системная проблема - вредоносные приложения используют Accessibility API не для доступности, а для атак: скрытое считывание текста с экрана, автоматические клики по кнопкам без ведома пользователя, подмена пользовательских действий и обход бизнес-логики и другие.

В Android 16 добавили возможность запрещать доступ к элементам UI в приложениях

accessibilityDataSensitive - новый флаг позволяет явно пометить UI-элемент как содержащий чувствительные данные. Accessibility-сервисы не могут читать или взаимодействовать с этим элементом, за исключением — легитимные сервисы доступности (screen readers и т.п.),

filterTouchesWhenObscured (был до Android 16) - когда у View (или окна) включён filterTouchesWhenObscured = true, то система игнорирует touch события, если в момент касания поверх окна есть другое приложение. Так делают злоумышленники для перехвата касаний, показывая прозрачный overlay

Использовать нужно на:
👉 экранах логина,
👉 платежных формах,
👉 экранах с персональными и финансовыми данными.

// Защита от tapjacking
val composeView = LocalView.current

DisposableEffect(Unit) {
composeView.filterTouchesWhenObscured = true
onDispose {
composeView.filterTouchesWhenObscured = false
}
}


// Защита чувствительных данных
BasicText(
text = "Password",
modifier = Modifier.semantics {
sensitiveData = true
}
)


<TextView
android:filterTouchesWhenObscured="true" />

<TextView
android:accessibilityDataSensitive="true" />


// Через код
view.filterTouchesWhenObscured = true
view.isAccessibilityDataSensitive = true


Новые возможности на заменяет FLAG_SECURE, а дополняет его

#Android #Android16 #Безопасность #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4013🔥2👎1