🤯 Google придумала новый способ давления на разработчиков
Теперь если в приложении не добавили тёмную тему, то пользователь сам принудительно сделает её включение через системные настройки. Это приведёт к инверсии цветов.
Наконец-то Google поняла что разработчики иногда забивают на тёмную тему, обязать их не получается (ну почему через Google Play не обязать?).
Видно так решила Google:
Странно, что на рекламной графике использовали приложение FitBit, хотя в нем есть нативная темная тема, да и сам продукт принадлежит Google. В FitBit нет тёмной темы. Да и не удивился - худшее спортивное приложение, что я использовал 😞
#android16
Теперь если в приложении не добавили тёмную тему, то пользователь сам принудительно сделает её включение через системные настройки. Это приведёт к инверсии цветов.
Наконец-то Google поняла что разработчики иногда забивают на тёмную тему, обязать их не получается (ну почему через Google Play не обязать?).
Видно так решила Google:
Будем форсировать фичи и пусть пользователи жалуются и занижают рейтинг приложения в магазине
Странно, что на рекламной графике использовали приложение FitBit, хотя в нем есть нативная темная тема, да и сам продукт принадлежит Google.
#android16
🤔38👍20🤯7❤4🔥3
Media is too big
VIEW IN TELEGRAM
Вот так рабоnает принудительный режим темной темы в Android 16 QRP 2
Google Maps имеют свою тёмную тему, но в настройках приложения я поставил принудительно только светлую тему. Расширенный темный режим не берет ресурсы для темной темы, а инвертирует светлую.
#android #android16
Google Maps имеют свою тёмную тему, но в настройках приложения я поставил принудительно только светлую тему. Расширенный темный режим не берет ресурсы для темной темы, а инвертирует светлую.
#android #android16
👍53🔥5❤3🤯3
Принудительные монохромные иконки в действии. ChatGPT у меня установлен как PWA и пока их автоматический монохром не задевает, вот Shortcut приложений перекрасился
#android #android16
#android #android16
👍30🔥8🤔2❤1🤯1
Media is too big
VIEW IN TELEGRAM
#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
В Android 16 QRP2 Beta 1 уже можно запустить графические Linux приложения. На скриншоте - Visual Studio Code для Debian.
Объединение технологий ChromeOS и Android дают свои результаты и идёт расширение возможностей. Дальше - вся ваша Steam библиотека будет доступна через Proton (как в SteamDeck) 🔥🔥🔥
Источник - Mishaal Android News
#android16 #linux
🔥129🤯23❤7👍4
🤯 Предупреждение об отсутствии поддержки страницы памяти в 16 Kb
Google решила раздражать всех разработчиков - пока не добавите поддержку нового размера страницы в дебажное приложение, установленное через ADB, будете видеть предупреждающий диалог на старте приложения.
Пользователи ничего не увидят, потому что им уходят релизные сборки. Так ведь у вас?
#android16 #ndk
Google решила раздражать всех разработчиков - пока не добавите поддержку нового размера страницы в дебажное приложение, установленное через ADB, будете видеть предупреждающий диалог на старте приложения.
Пользователи ничего не увидят, потому что им уходят релизные сборки. Так ведь у вас?
#android16 #ndk
👍44🤯27❤4
Новая версия фреймворка для тестирования 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
👍24❤1
Осенний фича релиз 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
Я давно ждал, когда в Android появится аналог крутых Live Activities из iOS. И когда Google наконец-то представил Live Updates в Android 16, сразу же ждал когда она появится в приложениях доставки/такси, используемыми мною. Неудивительно но ДоДо Пицца оперативно это сделали.
Оказалось, что за красивыми картинками из презентации скрывается целая история с ограничениями, которые не описаны в документации. Ребят из ДоДо прошли через боль дизайнеров, перерисовывавших макеты, и неожиданные сюрпризы от SDK и рассказывают про свой опыт.
🔑 Ключевые открытия и борьба с реальностью:
🤯 Макеты врут! Иконка (например, машинка) не может красиво «обрезать» сегмент прогресс-бара, как в дизайне. Она просто ложится сверху, и между ними всегда будет зазор.
✅ Что в итоге?
Несмотря на все ограничения, фича того стоит! Пользователи получают супер-наглядный и всегда видимый статус заказа, а мы — новый стандартизированный инструмент от Google.
А вы уже видели Live Updates в действии? Что думаете о таком подходе Google? 👇
#Android #Android16 #AlwaysOn
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥11❤4🤔3
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
Раньше системный шузер для шаринга был «односторонним»: вы собрали 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
👍30❤6
В 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
👍40❤13🔥2👎1