ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

Android Broadcast

Android Broadcast

الذهاب إلى القناة على Telegram

Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab #MQRZR

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Android Broadcast

تُعد قناة Android Broadcast (@android_broadcast) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 14 573 مشتركاً، محتلاً المرتبة 8 794 في فئة التكنولوجيات والتطبيقات والمرتبة 44 714 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 14 573 مشتركاً.

بحسب آخر البيانات بتاريخ 26 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 61، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 39.85‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 23.09‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 5 811 مشاهدة. وخلال اليوم الأول يجمع عادةً 3 367 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 28.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل api, kotlin, gradle, сборка, androiddev.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab #MQRZR”

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 27 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

14 573
المشتركون
-124 ساعات
-27 أيام
+6130 أيام

جارٍ تحميل البيانات

جذب المشتركين
أكتوبر '26
أكتوبر '26
+164
في 4 قنوات
سبتمبر '26
+127
في 4 قنوات
Get PRO
أغسطس '26
+102
في 3 قنوات
Get PRO
يوليو '26
+99
في 2 قنوات
Get PRO
يونيو '26
+156
في 19 قنوات
Get PRO
مايو '26
+170
في 4 قنوات
Get PRO
أبريل '26
+192
في 4 قنوات
Get PRO
مارس '26
+200
في 5 قنوات
Get PRO
فبراير '26
+167
في 4 قنوات
Get PRO
يناير '26
+146
في 4 قنوات
Get PRO
ديسمبر '25
+159
في 6 قنوات
Get PRO
نوفمبر '25
+160
في 4 قنوات
Get PRO
أكتوبر '25
+325
في 7 قنوات
Get PRO
سبتمبر '25
+144
في 6 قنوات
Get PRO
أغسطس '25
+161
في 3 قنوات
Get PRO
يوليو '25
+167
في 9 قنوات
Get PRO
يونيو '25
+118
في 9 قنوات
Get PRO
مايو '25
+219
في 10 قنوات
Get PRO
أبريل '25
+179
في 4 قنوات
Get PRO
مارس '25
+281
في 6 قنوات
Get PRO
فبراير '25
+211
في 6 قنوات
Get PRO
يناير '25
+235
في 4 قنوات
Get PRO
ديسمبر '24
+241
في 7 قنوات
Get PRO
نوفمبر '24
+171
في 4 قنوات
Get PRO
أكتوبر '24
+194
في 4 قنوات
Get PRO
سبتمبر '24
+261
في 7 قنوات
Get PRO
أغسطس '24
+238
في 12 قنوات
Get PRO
يوليو '24
+174
في 6 قنوات
Get PRO
يونيو '24
+249
في 8 قنوات
Get PRO
مايو '24
+392
في 9 قنوات
Get PRO
أبريل '24
+327
في 6 قنوات
Get PRO
مارس '24
+359
في 9 قنوات
Get PRO
فبراير '24
+411
في 8 قنوات
Get PRO
يناير '24
+413
في 6 قنوات
Get PRO
ديسمبر '23
+336
في 12 قنوات
Get PRO
نوفمبر '23
+146
في 10 قنوات
Get PRO
أكتوبر '23
+247
في 6 قنوات
Get PRO
سبتمبر '23
+273
في 0 قنوات
Get PRO
أغسطس '23
+398
في 0 قنوات
Get PRO
يوليو '23
+457
في 0 قنوات
Get PRO
يونيو '23
+423
في 0 قنوات
Get PRO
مايو '23
+521
في 0 قنوات
Get PRO
أبريل '23
+335
في 0 قنوات
Get PRO
مارس '23
+693
في 0 قنوات
Get PRO
فبراير '23
+331
في 0 قنوات
Get PRO
يناير '23
+408
في 0 قنوات
Get PRO
ديسمبر '22
+594
في 0 قنوات
Get PRO
نوفمبر '22
+238
في 0 قنوات
Get PRO
أكتوبر '22
+270
في 0 قنوات
Get PRO
سبتمبر '22
+201
في 0 قنوات
Get PRO
أغسطس '22
+257
في 0 قنوات
Get PRO
يوليو '22
+328
في 0 قنوات
Get PRO
يونيو '22
+256
في 0 قنوات
Get PRO
مايو '22
+317
في 0 قنوات
Get PRO
أبريل '22
+303
في 0 قنوات
Get PRO
مارس '22
+580
في 0 قنوات
Get PRO
فبراير '22
+347
في 0 قنوات
Get PRO
يناير '22
+224
في 0 قنوات
Get PRO
ديسمبر '21
+275
في 0 قنوات
Get PRO
نوفمبر '21
+228
في 0 قنوات
Get PRO
أكتوبر '21
+196
في 0 قنوات
Get PRO
سبتمبر '21
+281
في 0 قنوات
Get PRO
أغسطس '21
+288
في 0 قنوات
Get PRO
يوليو '21
+334
في 0 قنوات
Get PRO
يونيو '21
+237
في 0 قنوات
Get PRO
مايو '21
+323
في 0 قنوات
Get PRO
أبريل '21
+427
في 0 قنوات
Get PRO
مارس '21
+502
في 0 قنوات
Get PRO
فبراير '21
+460
في 0 قنوات
Get PRO
يناير '21
+360
في 0 قنوات
Get PRO
ديسمبر '20
+5 512
في 0 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
27 أكتوبر+1
26 أكتوبر+6
25 أكتوبر+2
24 أكتوبر+3
23 أكتوبر+6
22 أكتوبر+3
21 أكتوبر+3
20 أكتوبر+1
19 أكتوبر+3
18 أكتوبر+1
17 أكتوبر+5
16 أكتوبر+4
15 أكتوبر+1
14 أكتوبر+4
13 أكتوبر+4
12 أكتوبر+10
11 أكتوبر+11
10 أكتوبر+6
09 أكتوبر+9
08 أكتوبر+25
07 أكتوبر+3
06 أكتوبر+8
05 أكتوبر+8
04 أكتوبر+9
03 أكتوبر+5
02 أكتوبر+5
01 أكتوبر+18
منشورات القناة
🐘 AGP 9.6: покрытие инструментальных тестов без JaCoCo при сборке Чтобы посчитать покрытие кода инструментальными тестами, Android Gradle Plugin (AGP) по умолчанию встраивает счётчики JaCoCo в классы приложения прямо во время сборки. В AGP 9.6.0-alpha01 появился экспериментальный режим с агентом на устройстве: приложение собирается без этого кода, а классы инструментирует агент на тестовом устройстве во время прогона. По данным Google, сборка ускоряется на 10–20%, debug APK становится меньше на 20–25%, а неиспользуемые сгенерированные классы перестают занижать процент покрытия. Режим включается двумя флагами в gradle.properties поверх привычного enableAndroidTestCoverage = true:
android.experimental.androidTest.coverage.useOnDeviceAgent=true
android.experimental.reportAggregationSupport=true
Отчёт строит та же задача create<Variant>AndroidTestCoverageReport. Нужны устройство с Android 9 или новее и debuggable-сборка.
⚠️ Цифры не совпадут со старыми отчётами: агент считает инструкции DEX, а не Java-байткода, а классы, которые не загрузились во время тестов, в отчёт не попадают. Пороги покрытия при переходе стоит пересмотреть.
🔗 Документация #Android #AndroidDev #Gradle #Testing

2
🏝 Room 3 зависает на suspend-@Transaction: лечится сменой SQLite-драйвера Разработчик разобрал зависание приложения на Room 3: сплэш висит бесконечно, а краша, ANR и строчки в логах нет. Дамп потоков через kill -3 показал корутину, навсегда вставшую на локе внутри PassthroughConnectionPool в suspend-функции DAO с @Transaction и телом. Почему так: Room спрашивает у драйвера hasConnectionPool. AndroidSQLiteDriver отвечает true, и Room не заводит свой пул: остаётся одно соединение, привязанное к потоку, без таймаута ожидания. Если код транзакции сменит диспетчер, транзакция ждёт сама себя. Исправление этого дедлока заявлено в Room 3.0.2, но у автора зависало именно на 3.0.2, а в 3.0.3 чинили регрессию от этого исправления. Как исправить: передать в билдер BundledSQLiteDriver. Он возвращает false, и Room поднимает собственный пул: в WAL четыре читателя и один писатель, а при долгом ожидании через 30 секунд прилетает SQLiteException вместо тихого зависания. Room тоже стоит обновить до актуальной версии. Room.databaseBuilder<AppDatabase>(context, DB_NAME) .setDriver(BundledSQLiteDriver()) // was AndroidSQLiteDriver() .setJournalMode(JournalMode.WRITE_AHEAD_LOGGING) .build() ⚠️ Что учесть при смене драйвера: • в APK появится своя SQLite: около 620–650 КБ на ABI в сжатом виде, в universal APK все четыре ABI, примерно 2,5 МБ; • соединений станет несколько, Room сам ставит на каждое PRAGMA synchronous (в WAL это NORMAL), а RoomDatabase.Callback.onOpen вызывается один раз на базу, поэтому PRAGMA оттуда применится только к одному соединению. Автор задаёт её в обёртке над драйвером; • в такой обёртке делегируйте inTransaction(), иначе дефолтная реализация бросит NotImplementedError. 🔗 dev.to #Android #Room #Kotlin
2 176
3
🤖 В Android-скиллах для агентов появились ML Kit Agent API, Jetpack Ink и память виджетов Google выпустила v1.0.18 библиотеки Android skills — готовых инструкций, по которым AI-агент работает с конкретными API. Новых скиллов четыре: 👉 mlkit-agent-api — агентные сценарии прямо на устройстве через ML Kit GenAI Agent API на Gemini Nano и AICore 👉 ink-app-builder и ink-custom-brush-builder — рисование от руки на Jetpack Ink в Compose и свои кисти BrushFamily (androidx.ink 1.1.0-alpha03+) 👉 glance-appwidget-updates-and-memory — обновление виджетов на Glance и лимиты памяти на картинки в RemoteViews в Android 17, из-за которых тяжёлые картинки теперь роняют приложение Ещё обновили 15 скиллов, среди них appfunctions, navigation-3, r8-analyzer и jetpack-compose-performance, а jetpack-compose/theming/styles удалили. 🔗 Релиз v1.0.18 #Android #AndroidDev #AI #AgentSkills
2 567
4
⚙️ Styles API в Compose переделывают: документацию временно убрали На Google I/O команда Compose показала Styles, новый способ настраивать внешний вид компонентов. Теперь она сообщила, что по итогам отзывов API станет менее навязчивым: определения визуальных свойств переедут из слоя foundation в слой дизайн-системы, то есть в Material или вашу собственную. Дизайн-система сама решит, какие свойства её компонентов можно стилизовать, а свои свойства можно будет объявлять через stylePropertyOf и styleLocalOf. Пока идёт переделка, с developer.android.com сняли весь раздел про Styles (основы, темизацию, анимации состояний, сравнение с Modifier, рекомендации и ограничения), а также опубликованный ранее скилл для AI-агентов. В Compose 1.13 Styles API остаётся @Experimental. ⚠️ Если вы уже пробовали Styles в коде, API ещё поменяется. Новую форму обещают показать отдельно и собрать по ней отзывы. 🔗 Styles update #Compose #JetpackCompose #Android
2 555
5
🤖 Gemma на 584 МБ без раздувания APK: модель раздаёт Google Play Kevin Desai добавил в своё KMP-приложение PokeCollect ответы на вопросы о коллекции с помощью Gemma 3 1B на LiteRT-LM. Модель весит 584 МБ, и класть её в APK значит отпугнуть пользователя. Поэтому он вынес её в AI pack библиотеки Play for On-Device AI: хранит и раздаёт модель Google Play. Модель живёт в отдельном модуле без кода и приезжает одним из трёх способов: вместе с установкой (install-time), сразу после неё (fast-follow) или по запросу (on-demand). Под капотом Play Asset Delivery. // gemma_pack/build.gradle.kts plugins { id("com.android.ai-pack") } aiPack { packName = "gemma_pack" dynamicDelivery { deliveryType = "fast-follow" } } // app/build.gradle.kts assetPacks += ":gemma_pack" implementation("com.google.android.play:ai-delivery:0.2.0-beta01") В рантайме AiPackManager отдаёт путь к файлу или запускает fetch(), а слушатель сообщает статус. Для загрузок больше 200 МБ по мобильной сети есть статус WAITING_FOR_WIFI. ⚠️ Библиотека в бете и работает только с AAB: нужны AGP 8.8+ и bundletool 1.18+. Лимит — 1,5 ГБ на пак. Для загрузки добавляется foreground service, его придётся задекларировать в Play Console с коротким видео. 🔗 Статья #Android #AndroidDev #OnDeviceAI #GooglePlay #Gemma
3 334
6
🤖 Claude Sonnet 5.5 возглавил Android Bench Google продолжает пополнять Android Bench — свой лидерборд LLM на реальных задач
🤖 Claude Sonnet 5.5 возглавил Android Bench Google продолжает пополнять Android Bench — свой лидерборд LLM на реальных задачах Android-разработки. Теперь туда добавили Claude Sonnet 5.5, Gemini 4 Argon и GPT 6.1 Sol, и у рейтинга сменился лидер. Long-horizon задачи (30 штук: миграции, конвертация приложений, новые фичи): 🥇 Claude Sonnet 5.5 (max) — 40,0%, $1574,9 за прогон 🥈 Claude Opus 5.5 (max) — 37,3%, $1150,3 🥉 GPT 6.1 Sol (max) — 29,3%, $99,5 • GPT 6 Astra (high) — 28,0% • Gemini 4 Argon (high) — 21,3% Sol почти в 16 раз дешевле Sonnet за прогон и примерно в 2,7 раза быстрее (26,6 ч против 70,7 ч). Моделей Grok от SpaceXSI (бывшая xAI), включая флагманскую Grok 4.7, в Android Bench по-прежнему нет. 🔗 Android Bench #Android #AI #Benchmark
3 835
7
🛒 Публикация приложения из России в 2026: опыт с пятью магазинами Российская команда ИИ-репетитора английского Aisha выложила приложение в RuStore, Google Play, Huawei AppGallery и App Store, а в Samsung Galaxy Store так и не попала. Главные проблемы оказались не в модерации, а в документах и приёме оплаты. 👉 RuStore — регистрация ИП через VK и КЭП, одобрили за день, обновления проходят примерно за час. Подписки — через RuStore Pay. 👉 Google Play — D-U-N-S делали около месяца. Play Billing в России приостановлен, но для российских пользователей действует исключение: подписки принимают через RuStore Pay, Google за эти платежи не берёт комиссию. Модераторам схему пришлось объяснять в примечаниях к проверке. Обновления — 2–3 дня. 👉 Huawei AppGallery — для ИП хватило сканов документов, без D-U-N-S, сторонние платежи разрешены. Проверка — от двух дней, чаще около пяти. 👉 App Store — новым российским аккаунтам Paid Applications Agreement сейчас недоступно, поэтому оформить внешнюю ссылку на оплату не удалось. Вышла только бесплатная версия без внешних ссылок и с кнопкой мгновенного удаления аккаунта. 👉 Samsung Galaxy Store — даже для бесплатного приложения нужен статус коммерческого продавца с D-U-N-S и PayPal на домене компании. Заявку отклонили. ⚠️ Сроки проверок — личный опыт одной команды, а не обязательства магазинов. 🔗 Личный опыт публикации в магазинах приложений в России в 2026 году (Хабр) #Android #AndroidDev #RuStore #GooglePlay
3 984
8
🚀 Sentry Android SDK стал на 20–30% быстрее при старте: что поменяли SentryAndroid.init стоит на критическом пути запуска ка
🚀 Sentry Android SDK стал на 20–30% быстрее при старте: что поменяли SentryAndroid.init стоит на критическом пути запуска каждого приложения с Sentry, а таких стартов, по подсчётам компании, около 4,5 млрд в день. За квартал команда сделала больше 40 изменений и сократила инициализацию на 20–30% между версиями 8.43.0 и 8.54.0. Узкие места искали по трейсам Perfetto, в том числе с LLM, а каждый фикс проверяли Macrobenchmark. Приёмы, которые пригодятся и в вашем коде: 👉 Настройки из манифеста — в байткод при сборке: SDK больше не парсит манифест, одно это дало 6,5%. 👉 Свой парсер DSN вместо java.net.URI: было до 6 мс, стало около 1 мкс. 👉 Общие пулы вместо разовых потоков: в ART каждый поток резервирует 1 МБ под стек. Нужны SDK от 8.54.0 и Sentry Android Gradle Plugin от 6.20.0. ⚠️ Цифры сняты на синтетическом демо-приложении, в реальных проектах эффект может отличаться. 🔗 Sentry Blog #Android #AndroidDev #Performance #Sentry
3 785
9
Один и тот же пуш мгновенно приходит на Pixel — и не приходит вообще на Redmi. Разработчик часами копается в FCM, а виноват не он: Xiaomi, Redmi, Poco, Oppo, Realme, Vivo, iQOO и OnePlus добавляют поверх Android свой агрессивный менеджер батареи, который останавливает приложения в фоне. А остановленное приложение пушей не получает. Что делают эти прошивки • Автозапуск выключен по умолчанию (MIUI/HyperOS, ColorOS) — пуш, которому нужен ваш код, не может его запустить. • Смахивание из недавних = Force stop. Android не доставляет сообщения force-stopped приложению, пока его не откроют. • Профили экономии батареи ограничивают фон, иногда через несколько дней без открытия приложения. • Уведомления на экране блокировки и всплывающие выключены — пуш пришёл, но пользователь его не видит. Что можно сделать в приложении • Важное — через notification messages, а не data-only: их показывает система без запуска вашего кода. • High priority — только для того, что пользователь ждёт (подтверждение входа, статус заказа). • Разные каналы для логинов и промо, чтобы отключение одного не глушило другой. • Просите настройку один раз и в нужный момент, а не всем в первый день. • Pull в дополнение к push: при открытии приложения подтягивайте пропущенное — тогда недошедший пуш лишь опоздал, а не потерялся. Для экрана настроек есть стандартные интенты, а для автозапуска у вендоров публичного API нет: // Системный список исключений из оптимизации батареи startActivity(Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)) // Страница настроек приложения: там на большинстве телефонов Autostart и батарея startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", packageName, null))) ⚠️ Google Play разрешает прямой запрос исключения (REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) лишь в немногих случаях — большинству приложений стоит вести пользователя на экран настроек. Как проверить, что дело в прошивке: отправьте одно и то же уведомление на Pixel/Samsung и на Xiaomi, смахнув приложение на обоих. Пришло на первом, но не на втором — это battery saver, и одними изменениями на сервере это не исправить. ⚠️ Названия пунктов меню меняются между версиями прошивок — актуальные инструкции по брендам собраны на dontkillmyapp.com. 🔗 Why push notifications go missing on Xiaomi, Oppo, Vivo and Realme #Android #AndroidDev #FCM #Push #Xiaomi
3 923
10
لا يوجد نص...
1
11
🔐 Утекли ключи удостоверяющего центра eMudhra: обновите OkHttp до 5.5.1 или 4.12.1 Поздно вечером 17 октября Mozilla получила сообщение: закрытые ключи восьми промежуточных сертификатов удостоверяющего центра eMudhra скомпрометированы. С ними можно выпустить поддельный HTTPS-сертификат для чужого сайта, и клиент, который доверяет этим корням, его примет. Firefox заблокировал сертификаты меньше чем за три часа, а 20 октября Mozilla убрала корень из своего хранилища NSS. Приложения на OkHttp уязвимы, пока не обновится список доверенных корней платформы, а на Android и JVM это может занять очень долго. Поэтому Jesse Wilson 20 октября выложил обходной путь, а 22 октября вышли OkHttp 5.5.1 и 4.12.1, которые сами блокируют эти 8 сертификатов. Достаточно поднять версию. Если обновиться сразу нельзя, подключите ForbiddenCertificatesHostnameVerifier из гиста, он работает со всеми поддерживаемыми версиями OkHttp: val safeClient = client.newBuilder() .hostnameVerifier(ForbiddenCertificatesHostnameVerifier()) .build() ⚠️ Первая версия обхода была на Interceptor, но он получает сертификаты слишком поздно, когда секреты уже ушли атакующему. Если вы скопировали её 20 октября, замените на HostnameVerifier. На устройствах с Google Play Services Google уже раздал автоматическое обновление, под угрозой прежде всего JVM и AOSP-устройства. 🔗 Jesse Wilson · Mozilla · Changelog 5.5.1 · 4.12.1 #Android #AndroidDev #OkHttp #Security
4 692
12
🏝 DateParser Kotlin: «купить молоко завтра в 19:00» превращается в дату без сети и API-ключей Пользователь пишет напоминание обычным текстом, а приложению нужно вытащить из него дату, время и сам текст задачи. Обычно для этого зовут облачный NLP-сервис или пишут свои регулярки. DateParser Kotlin делает это офлайн: из Buy milk tomorrow at 7pm получается Buy milk и завтрашние 19:00 в выбранной таймзоне. Библиотека для Kotlin Multiplatform понимает английский и русский: Android, JVM и iOS. Она разбирает даты, время, диапазоны вроде «завтра с 17:30 до 20:00» и повторения вроде «каждые 2 дня». Context и инициализация не нужны. val parser = DateParser() val matches = parser.parse( text = "buy in 5 hours", reference = Instant.parse("2024-02-28T10:15:00Z"), timeZone = TimeZone.UTC ) val instant = matches.single().instant // 2024-02-28T15:15:00Z Неоднозначные даты не угадываются: 03/04/2026 без явного DateOrder.MDY или DMY вернёт пустой результат. Кроме момента времени, DateMatch отдаёт конец диапазона, период повторения и оставшийся текст напоминания. ⚠️ Парсер построен на правилах: произвольный текст за пределами поддерживаемых форм может не распознаться. Android — от API 26, Swift/XCFramework-дистрибутива нет. Версия 0.1.3, репозиторий создан в октябре. 🔗 GitHub · Документация · klibs.io #Kotlin #KMP #Multiplatform #OpenSource
3 578
13
🚀 Предусловия UI-тестов через API — не всегда быстрее: замеры на 400+ Android-тестах Почти каждый UI-тест в Android-приложен
🚀 Предусловия UI-тестов через API — не всегда быстрее: замеры на 400+ Android-тестах Почти каждый UI-тест в Android-приложении финансового сервиса начинался одинаково: шесть экранов логина и около 26 секунд, хотя логин эти тесты не проверяли. Команда проверила на Хабре известный совет «готовьте предусловия через API, а не через UI» на трёх кейсах в сьюте на Kaspresso. Для логина совет сработал: вход через auth-слой приложения занял ~7 секунд вместо ~26, а общее время 418 тестов сократилось на 27%. А переключение тумблера через PATCH оказалось на 29% медленнее трёх тапов: тест сам грузил большой список продуктов, который приложение потом загружало ещё раз. Вывод авторов: выигрыш даёт не API сам по себе, а то, что из теста уходит длинная UI-цепочка, которая не лежит на пути к проверяемому экрану. 🔗 Статья на Хабре #Android #AndroidDev #Testing #Kaspresso
4 304
14
🤖 Виджеты на Android 17: слишком тяжёлые картинки теперь роняют приложение Приложение обновляет виджет с парой крупных фото и падает с IllegalArgumentException: RemoteViews for widget update exceeds maximum bitmap memory usage. Так Android 17 ведёт себя с приложениями на targetSdk 37: если картинки в RemoteViews не влезают в лимит, система отклоняет обновление и бросает исключение. На targetSdk 36 и ниже это пока только предупреждение в логе. Google переписал описание этого изменения и добавил, как считается лимит и как в него уложиться. Лимит — 6 * width * height байт, то есть полтора полноэкранных буфера ARGB_8888. Считаются картинки для всех ориентаций и размеров виджета сразу, поэтому responsive-виджет легко съедает бюджет копиями одного и того же Bitmap. 👉 Размер экрана берите из WindowManager.currentWindowMetrics, а не из displayMetrics: на складных устройствах тот может вернуть размер неактивного дисплея. 👉 Уменьшайте картинки до размеров виджета, а для непрозрачных используйте RGB_565 — это вдвое меньше памяти. 👉 В Glance декодируйте Bitmap один раз в provideGlance до provideContent, иначе для каждого размера создаётся своя копия. URI-картинки в лимит не входят, но лаунчер декодирует их в полном разрешении, так что класть в cacheDir тоже стоит уменьшенную версию. 🔗 Изменения поведения Android 17 · Виджеты на Glance #Android #AndroidDev #Android17 #AppWidgets
4 399
15
🤖 Google объяснил Android-разработчикам, как устроены ИИ-агенты и что писать в AGENTS.md Агент обновляет библиотеку с ломающ
🤖 Google объяснил Android-разработчикам, как устроены ИИ-агенты и что писать в AGENTS.md Агент обновляет библиотеку с ломающими изменениями, а нового API нет в его обучающих данных, и по сотням файлов сыплются ошибки компиляции. С разбора таких ситуаций начинается новый раздел AI tools на developer.android.com: агент — это LLM плюс обвязка с инструкциями, инструментами, навыками и циклом выполнения. Главный практический совет: пишите в AGENTS.md конкретные команды и пути, а не пожелания. Не «убедись, что проект собирается», а ./gradlew assembleDebug; не «бери свежие версии», а «версии из gradle/libs.versions.toml, новые зависимости — только после вопроса». Навыки устаревают, поэтому свежие факты агенту лучше давать через поиск по документации в Android CLI. В квикстарте инструменты подобраны под опыт: новичкам — Google AI Studio, своему агенту вроде Claude Code — Android CLI и skills, для продакшена — Android Studio. 🔗 Как работают агенты · Квикстарт #Android #AndroidDev #AI #AIAgents
4 843
16
🐱 Mac.apk открыл исходники: Android-приложения на Mac без эмулятора и виртуальной машины Чтобы запустить Android-приложение
🐱 Mac.apk открыл исходники: Android-приложения на Mac без эмулятора и виртуальной машины Чтобы запустить Android-приложение на Mac, обычно поднимают эмулятор — целый Android в виртуальной машине. Автор Mac.apk пошёл путём Wine: его программа сама изображает Android поверх macOS. 19 октября код открыли под AGPL-3.0. При первом запуске DEX переводится в Java-байткод и работает на встроенной OpenJDK, 64-битный ARM-код выполняется на чипе Apple как есть, а графика идёт через ANGLE и MoltenVK в Metal. Каждое приложение — отдельное окно с иконкой в Dock. Разработчикам важно: на Mac.apk ваше приложение запускается без настоящих Google Play Services: Play Billing и Play Integrity недоступны, а рекламный SDK Google получает пустой ответ. Если не хотите видеть там своё приложение, автор по запросу внесёт его в список блокировки. ⚠️ Это альфа-версия: нужны Apple Silicon и macOS 26.4+, часть приложений пока не запускается. 🔗 GitHub · Как это устроено · Для разработчиков #Android #AndroidDev #macOS #OpenSource
5 019
17
👨‍💻 Ты оптимизировал весь код, кроме собственного рабочего места? Монитор — 4K. Клавиатура — механическая. Компьютер — звер
👨‍💻 Ты оптимизировал весь код, кроме собственного рабочего места? Монитор — 4K. Клавиатура — механическая. Компьютер — зверь. Кресло — работает на устаревшей прошивке с 2018 года. 💀 Кажется, пора выпускать обновление! У «Эргостол» стартовала акция «Октябрь — месяц эргономики»: с 23 октября по 1 ноября скидки до -15% на товары акции. 🔥 Скидки суммируются с промокодом -10% ANDROID10 действует на сайте Эргостол и на Ozon! Как насчёт апгрейда кресла? 🪑 🎥Смотрите обзор кресла Экзо Флекс: https://abdev.by/EiMt 👉 Выбрать себе обновления можно: тут #реклама
4 585
18
🚀 Grab включил R8 на 10 млн строк кода и избавился от всплесков ANR после релизов «Каждый еженедельный релиз — всплеск ANR»,
🚀 Grab включил R8 на 10 млн строк кода и избавился от всплесков ANR после релизов «Каждый еженедельный релиз — всплеск ANR», — так описывают жизнь команды Grab, суперприложения из Юго-Восточной Азии с 10-летней кодовой базой. Холодный старт тормозило чтение множества DEX-файлов, а Cloud Profiles из Google Play не покрывали их критичные пути вроде сборки графа Dagger. Сначала команда перешла на proguard-android-optimize.txt и добавила Baseline и Startup Profiles, через девять месяцев — на R8 full mode. Вместо широких исключений нашли конкретные классы, к которым обращаются через рефлексию и динамические прокси, и написали для них точечные keep-правила. Оценки оптимизации R8 теперь отслеживают в CI, а новые keep-правила планируют пропускать только с обоснованием. Итог: ANR меньше на 32%, холодный старт быстрее на 35%. Недавно писал, что Google взялся за R8 всерьёз, — вот как это выглядит на большом проекте. 🔗 Кейс Grab #Android #AndroidDev #R8 #Performance
4 991
19
🤖 DataStore научился шифровать данные из коробки: замена EncryptedSharedPreferences дошла до RC В 2025 году Google объявил deprecated всю библиотеку security-crypto вместе с EncryptedSharedPreferences и предложил работать с Android Keystore напрямую. Готовой замены «подключил и забыл» не было. Теперь она есть: в DataStore 1.3 появился артефакт datastore-tink, а 12 октября вышел 1.3.0-rc01, то есть API уже стабилен. Шифрование подключается обёрткой над вашим сериализатором: AeadSerializer шифрует данные через Tink (AES-256-GCM), а ключ защищён Android Keystore. // keysetHandle создаётся через AndroidKeysetManager val aeadSerializer = AeadSerializer( aead = keysetHandle.getPrimitive( RegistryConfiguration.get(), Aead::class.java ), wrappedSerializer = SettingsSerializer, // уникальное имя защищает от подмены шифротекста associatedData = "settings.json".encodeToByteArray(), ) val dataStore = dataStore( fileName = "settings.json", serializer = aeadSerializer, scope = scope, ) Работает на Android и JVM. Ошибки расшифровки приходят как CorruptionException, так что их ловит обычный CorruptionHandler. Заодно в 1.3 появился DataStore.Builder, и Google советует переходить на него с DataStoreFactory. 🔗 Release notes DataStore · Разбор на ProAndroidDev #Android #AndroidDev #DataStore #Security
5 377
20
🤖 MediaPipe LLM Inference больше не развивают: Google советует переходить на LiteRT-LM Google сменила курс по on-device LLM одной плашкой в документации Google AI Edge: LLM Inference API из MediaPipe для Android, iOS и веба теперь только поддерживают, а новые возможности и оптимизации делают в LiteRT-LM. Когда это произошло, Google не пишет, но затишье видно и по релизам — последняя версия tasks-genai вышла на Google Maven ещё в конце апреля. Если вы через MediaPipe встроили в приложение языковую модель, которая работает прямо на телефоне, она продолжит работать, но всё новое теперь появляется только в LiteRT-LM, так что переезд стоит спланировать заранее. LiteRT-LM — рантайм Google для языковых моделей поверх LiteRT. У него свой Kotlin API для Android и JVM с ускорением на GPU и NPU, мультимодальностью и вызовом инструментов. Модели нужны в формате .litertlm, готовые лежат в LiteRT Community на Hugging Face. Актуальная версия — litertlm-android:0.18.0, ещё до 1.0. Базовый сценарий из документации: val engine = Engine(EngineConfig(modelPath = modelPath, backend = Backend.GPU())) engine.initialize() // до ~10 секунд, не на главном потоке engine.createConversation().use { conversation -> conversation.sendMessageAsync("Привет!").collect { print(it) } } Для GPU в манифест нужно добавить uses-native-library для libOpenCL.so и libvndksupport.so с required="false". ⚠️ В AAR LiteRT-LM 0.18.0 нативные библиотеки есть только для arm64-v8a и x86_64. На 32-битных ARM-устройствах загрузка упадёт с UnsatisfiedLinkError, поэтому проверяйте Build.SUPPORTED_ABIS заранее — на это наткнулся Charles Hartmann. 🔗 MediaPipe LLM Inference · LiteRT-LM для Android · dev.to #Android #AndroidDev #AI #LiteRT
4 958