Ушедшие из App Store бренды подхватили чужие приложения: под Max, Rutube и VK Видео нашли подделки
Стоит правообладателю исчезнуть из стора, и его запросы достаются кому угодно. Anti-Malware.ru 2 сентября сообщило о трёх приложениях в российском App Store, которые копируют названия и оформление Max, Rutube и VK Видео. Пресс-службы Max и «Газпром-Медиа» подтвердили, что не имеют к ним отношения.
RUTUBE: Video Player, по данным карточки в магазине, вышел 18 июня, через две недели после удаления официального Max, и к 2 сентября набрал почти 950 оценок со средней 2,6. Идентификатор пакета com.rutube.app, разработчик WARD WILLIAM. MaxMessenger лежит в магазине с ноября 2024 года и просто оказался в нужном месте выдачи.
Для разработчика вывод практический: имя разработчика и описание на карточке остаются тем немногим, что пользователь может проверить сам, а у Apple есть отдельная форма спора о контенте для правообладателей. Разобрали и что известно о каждом из трёх приложений.
Стоит правообладателю исчезнуть из стора, и его запросы достаются кому угодно. Anti-Malware.ru 2 сентября сообщило о трёх приложениях в российском App Store, которые копируют названия и оформление Max, Rutube и VK Видео. Пресс-службы Max и «Газпром-Медиа» подтвердили, что не имеют к ним отношения.
RUTUBE: Video Player, по данным карточки в магазине, вышел 18 июня, через две недели после удаления официального Max, и к 2 сентября набрал почти 950 оценок со средней 2,6. Идентификатор пакета com.rutube.app, разработчик WARD WILLIAM. MaxMessenger лежит в магазине с ноября 2024 года и просто оказался в нужном месте выдачи.
Для разработчика вывод практический: имя разработчика и описание на карточке остаются тем немногим, что пользователь может проверить сам, а у Apple есть отдельная форма спора о контенте для правообладателей. Разобрали и что известно о каждом из трёх приложений.
❤3
Нормальный сервис пополнения Steam никогда не спросит пароль или код Steam Guard — только логин. Это правило стоит держать в голове перед тем, как искать способ закинуть деньги на баланс: мошеннических предложений вокруг темы хватает, а разница в комиссии между честными сервисами доходит до нескольких процентов.
Сравнили пять рабочих вариантов для российских аккаунтов. Два сервиса зачисляют деньги напрямую по логину за минуты, у одного из них ниже стартовая комиссия и есть промокоды. Ещё один — крупный маркетплейс с выбором продавцов и разными условиями по каждому. Другой умеет пополнять через продажу игровых предметов — медленнее, но может дать выгоду. Последний формально работает без своей комиссии, но за счёт конвертации можно потерять до 10%.
Для каждого способа расписали реальную комиссию, скорость зачисления и лимиты по сумме.
Сравнили пять рабочих вариантов для российских аккаунтов. Два сервиса зачисляют деньги напрямую по логину за минуты, у одного из них ниже стартовая комиссия и есть промокоды. Ещё один — крупный маркетплейс с выбором продавцов и разными условиями по каждому. Другой умеет пополнять через продажу игровых предметов — медленнее, но может дать выгоду. Последний формально работает без своей комиссии, но за счёт конвертации можно потерять до 10%.
Для каждого способа расписали реальную комиссию, скорость зачисления и лимиты по сумме.
❤🔥2
У Intel-приложений на Mac остался один релиз macOS
Apple 1 сентября напомнила: с macOS 26.4 пользователь может увидеть уведомление при запуске приложения, которому нужна Rosetta, а macOS 27, релиз этой осени, станет последним, где Intel-код вообще запускается на Apple Silicon. Исключение одно, старые неподдерживаемые игры на Intel-фреймворках.
Если ваше macOS-приложение или его helper-процессы собраны только под x86_64, времени ровно один цикл системы. Проверка начинается с
Тем, у кого ARM-версия давно есть, Apple советует напрямую уведомить пользователей на старой Intel-сборке. Чек-лист по шагам разобрали на сайте.
Apple 1 сентября напомнила: с macOS 26.4 пользователь может увидеть уведомление при запуске приложения, которому нужна Rosetta, а macOS 27, релиз этой осени, станет последним, где Intel-код вообще запускается на Apple Silicon. Исключение одно, старые неподдерживаемые игры на Intel-фреймворках.
Если ваше macOS-приложение или его helper-процессы собраны только под x86_64, времени ровно один цикл системы. Проверка начинается с
lipo -info на бинарнике, а проблемы обычно живут не в своём коде, а в зависимостях: нативные модули Electron, Python-колёса с расширениями, старые фреймворки. Xcode собирает universal binary по умолчанию, но CI и нотаризацию для такой сборки стоит перепроверить.Тем, у кого ARM-версия давно есть, Apple советует напрямую уведомить пользователей на старой Intel-сборке. Чек-лист по шагам разобрали на сайте.
❤1
Google Play задерживал RTDN о покупках на два и четыре часа: платёж прошёл, а сервер узнал потом
Если подписку или покупку выдаёт сервер по Real-time Developer Notifications, посмотрите логи за 1–2 сентября. Разработчик показал две транзакции, где
Официальный инцидент Play Billing 1 сентября длился с 08:54 до 11:43 UTC, но по отчёту задержки были и после. Документация Google требует после RTDN проверять состояние через Developer API; наш вывод из этих цифр шире: клиент после покупки сам отправляет purchase token на сервер, сервер сразу подтверждает его через Developer API и не ждёт RTDN. Что залогировать, чтобы в следующий раз увидеть, где именно задержка, на сайте.
Если подписку или покупку выдаёт сервер по Real-time Developer Notifications, посмотрите логи за 1–2 сентября. Разработчик показал две транзакции, где
eventTimeMillis появился через 3 ч 55 мин и 2 ч 11 мин после оплаты, при том что девять соседних покупок получили событие за доли секунды. Доставка через Pub/Sub была быстрой, очередь пустой: задержка сидела внутри цепочки Google до доставки на сервер, а на каком именно этапе, автор доказать не может, потому что не сохранял publishTime.Официальный инцидент Play Billing 1 сентября длился с 08:54 до 11:43 UTC, но по отчёту задержки были и после. Документация Google требует после RTDN проверять состояние через Developer API; наш вывод из этих цифр шире: клиент после покупки сам отправляет purchase token на сервер, сервер сразу подтверждает его через Developer API и не ждёт RTDN. Что залогировать, чтобы в следующий раз увидеть, где именно задержка, на сайте.
❤2👎1
Google собирает альянс вокруг цифровых удостоверений на Android и открывает под них SDK
Android Ready SE, программа сертифицированных защищённых чипов, запущенная в 2021 году, станет Android Digital Credential Alliance: производители чипов и Secure Element, OEM, разработчики кошельков и государственные эмитенты. Google одновременно опубликовала whitepaper о том, как устроена цепочка доверия для удостоверений на базе Android Keystore и StrongBox.
Цепочка из четырёх шагов: аттестация ключа, привязка к устройству, выдача по ключу с аутентификацией пользователя и авторизация действий. StrongBox работает в физически изолированном Secure Element уровня Common Criteria EAL4+ с AVA_VAN.5, а выпуск удостоверения гейтится биометрией или PIN через HAT-токены. Для разработчиков открыт Multipaz SDK с OpenID4VCI и OpenID4VP, форматами ISO 18013-5 mDL и SD-JWT VC и zero-knowledge proofs на Longfellow-ZKP; на нём же построены Google Wallet и референсный кошелёк European Digital Identity.
Для российских разработчиков это пока архитектурный ориентир, а не продукт: о доступности Google Wallet и государственных эмитентах в регионе Google не пишет. Публикация Google и whitepaper с архитектурой.
Android Ready SE, программа сертифицированных защищённых чипов, запущенная в 2021 году, станет Android Digital Credential Alliance: производители чипов и Secure Element, OEM, разработчики кошельков и государственные эмитенты. Google одновременно опубликовала whitepaper о том, как устроена цепочка доверия для удостоверений на базе Android Keystore и StrongBox.
Цепочка из четырёх шагов: аттестация ключа, привязка к устройству, выдача по ключу с аутентификацией пользователя и авторизация действий. StrongBox работает в физически изолированном Secure Element уровня Common Criteria EAL4+ с AVA_VAN.5, а выпуск удостоверения гейтится биометрией или PIN через HAT-токены. Для разработчиков открыт Multipaz SDK с OpenID4VCI и OpenID4VP, форматами ISO 18013-5 mDL и SD-JWT VC и zero-knowledge proofs на Longfellow-ZKP; на нём же построены Google Wallet и референсный кошелёк European Digital Identity.
Для российских разработчиков это пока архитектурный ориентир, а не продукт: о доступности Google Wallet и государственных эмитентах в регионе Google не пишет. Публикация Google и whitepaper с архитектурой.
🤔3🗿1
Compose Multiplatform запустили на Apple TV одним Gradle-плагином, не дожидаясь JetBrains
Официальных tvOS-артефактов для большинства модулей Compose пока нет (задача CMP-5686). Саджид Али обошёл это плагином
Требования: Kotlin 2.3.20, Gradle 8.0, Compose Multiplatform 1.6 или новее; таргеты
Официальных tvOS-артефактов для большинства модулей Compose пока нет (задача CMP-5686). Саджид Али обошёл это плагином
dev.sajidali.compose-tvos 1.3.0: через ComponentMetadataRule он подменяет варианты зависимостей 15 групп org.jetbrains.* (compose ui, foundation, runtime, material3, animation и другие) на свои tvOS-сборки, координаты в проекте не меняются, а iOS, Android и Desktop продолжают получать официальные артефакты.Требования: Kotlin 2.3.20, Gradle 8.0, Compose Multiplatform 1.6 или новее; таргеты
tvosArm64 и tvosSimulatorArm64, tvosX64 не собирается. Если официальный tvOS klib появится, плагин его не трогает. Автор говорит, что тем же тулчейном собирает свой production TV app без правок исходников; демо на JetStream TV с D-pad-фокусом есть в посте. Автотестов под tvOS у проекта пока нет, так что в прод только после своих.👍2
Swiggy перевела гибридные экраны на Swift и SwiftUI, не останавливая выпуск фич
Индийский сервис доставки с аудиторией в миллионы пользователей начинал Instamart и Dineout как гибридные продукты, и при росте они упёрлись в знакомое: долгие загрузки, зависания на больших списках товаров, memory pressure и рваные анимации. Ограничения гибридной архитектуры не давали Dineout показывать качественные фото и видео.
Решение о миграции приняли в начале 2024 года, и главное в рассказе команды не «переписали всё», а порядок. Сначала нашли сценарии с наибольшим влиянием, домашние экраны и поиск, и выпустили их нативно за несколько недель. Дальше переводили по одному, параллельно продолжая выпускать функции. После миграции появились OCR для поиска по меню, сканирование списков продуктов и суммаризация с Apple Intelligence.
Цифр по конверсии и crash rate Apple не приводит, только слова команды об «самом большом сюрпризе» от эффекта. Разбор на Apple Developer.
Индийский сервис доставки с аудиторией в миллионы пользователей начинал Instamart и Dineout как гибридные продукты, и при росте они упёрлись в знакомое: долгие загрузки, зависания на больших списках товаров, memory pressure и рваные анимации. Ограничения гибридной архитектуры не давали Dineout показывать качественные фото и видео.
Решение о миграции приняли в начале 2024 года, и главное в рассказе команды не «переписали всё», а порядок. Сначала нашли сценарии с наибольшим влиянием, домашние экраны и поиск, и выпустили их нативно за несколько недель. Дальше переводили по одному, параллельно продолжая выпускать функции. После миграции появились OCR для поиска по меню, сканирование списков продуктов и суммаризация с Apple Intelligence.
Цифр по конверсии и crash rate Apple не приводит, только слова команды об «самом большом сюрпризе» от эффекта. Разбор на Apple Developer.
AGP 9.4 поднял потолок до API 37 и предупредил: в AGP 10 новый Variant API станет обязательным
Android Gradle Plugin 9.4 минорный релиз, но с чек-листом на обновление. Требуется Gradle 9.6.0, JDK 17, Build Tools 36.0.0, NDK по умолчанию 28.2.13676358; совместим с Android Studio Quail 4, которая тоже стала стабильной 1 сентября.
Новое поведение: плагин проверяет строгое соответствие variant dimensions у dynamic feature модулей и базового. По умолчанию несовпадение даёт предупреждение, флаг
Android Gradle Plugin 9.4 минорный релиз, но с чек-листом на обновление. Требуется Gradle 9.6.0, JDK 17, Build Tools 36.0.0, NDK по умолчанию 28.2.13676358; совместим с Android Studio Quail 4, которая тоже стала стабильной 1 сентября.
Новое поведение: плагин проверяет строгое соответствие variant dimensions у dynamic feature модулей и базового. По умолчанию несовпадение даёт предупреждение, флаг
android.enforceDynamicFeatureVariantMatching=true превращает его в ошибку. Главное на будущее: начиная с AGP 10 новый Variant API обязателен для всех проектов, до этого модули можно временно исключать через android.newDsl.optOut. Из исправлений: пропавший L8 obfuscation mapping в mapping.txt, ошибка «SigningConfig is too eager» и ClassNotFoundException в connectedDebugAndroidTest с provider в dynamic feature. Google просит не писать зависимость как 9.4.+.Flutter-пакет выбирает интерфейс не по платформе, а по версии ОС: Liquid Glass на iOS 26, Material 3 Expressive на Android 16
Обычно адаптивные виджеты во Flutter спрашивают «iOS или Android».
Требования: Flutter 3.27 и новее, iOS 13+, Android API 21+, macOS 10.15+; инициализация через
Контекст важнее цифр: Flutter заморозил Material и Cupertino в SDK в апреле, а с ноября их SDK-копии объявлены устаревающими. Кто-то должен закрыть этот разрыв. Страница на pub.dev.
Обычно адаптивные виджеты во Flutter спрашивают «iOS или Android».
native_adaptive_ui добавляет второе измерение, DesignEra: платформа, версия ОС и форм-фактор. Один код на iOS 26 встраивает настоящие UITabBar, UISegmentedControl, UISwitch и UISlider, потому что честный Liquid Glass рисуется только нативным контролом, а на Android 16 переключается на Material 3 Expressive. iOS 18 получает классический Cupertino, web и десктоп fallback на Material 3.Требования: Flutter 3.27 и новее, iOS 13+, Android API 21+, macOS 10.15+; инициализация через
await NativeAdaptiveUi.ensureInitialized(), есть SPM и CocoaPods. Для тестов предусмотрены NativePolicy.dartOnly и debugSetPlatform. Версия 0.1.2, MIT, 125 загрузок и 3 лайка на pub.dev, то есть проект одного человека на ранней стадии.Контекст важнее цифр: Flutter заморозил Material и Cupertino в SDK в апреле, а с ноября их SDK-копии объявлены устаревающими. Кто-то должен закрыть этот разрыв. Страница на pub.dev.
Один разработчик проверял доступность своей игры, выключая экран целиком
Клеменс Штрассер из Австрии делает Art of Fauna в одиночку: пазлы на иллюстрациях животных из Biodiversity Heritage Library для iPhone и iPad. В 2025 году игра получила App Store Award и Apple Design Award в категории Inclusivity, а в 2015-м у автора уже был студенческий ADA за Elementary Minute.
Метод, который стоит забрать себе: Screen Curtain в VoiceOver выключает экран, но оставляет навигацию. Штрассер проходил игру вслепую и консультировался с незрячим разработчиком из Германии; проект он сначала отложил именно из-за сложности доступного текста, а потом сформулировал правило «нет игры, которую нельзя сделать доступной». Его совет дословно: заставьте себя пользоваться своим приложением, не глядя на экран, и восприятие изменится.
20% дохода уходит природоохранным организациям; по одному сертификату защищено 3700 квадратных метров тропического леса. Продажи и число пользователей Apple не называет. История на Apple Developer.
Клеменс Штрассер из Австрии делает Art of Fauna в одиночку: пазлы на иллюстрациях животных из Biodiversity Heritage Library для iPhone и iPad. В 2025 году игра получила App Store Award и Apple Design Award в категории Inclusivity, а в 2015-м у автора уже был студенческий ADA за Elementary Minute.
Метод, который стоит забрать себе: Screen Curtain в VoiceOver выключает экран, но оставляет навигацию. Штрассер проходил игру вслепую и консультировался с незрячим разработчиком из Германии; проект он сначала отложил именно из-за сложности доступного текста, а потом сформулировал правило «нет игры, которую нельзя сделать доступной». Его совет дословно: заставьте себя пользоваться своим приложением, не глядя на экран, и восприятие изменится.
20% дохода уходит природоохранным организациям; по одному сертификату защищено 3700 квадратных метров тропического леса. Продажи и число пользователей Apple не называет. История на Apple Developer.
🤔2👍1💊1
Папка lib превратилась в лабиринт: модуляризация по фичам во Flutter
История типовая. Сначала lib, несколько экранов, папка моделей и один файл сервисов на всё. Приложение выходит, все довольны. Потом фич больше, команда больше, и однажды в моделях триста файлов, в сервисах шесть тысяч строк, а новому инженеру нужны недели, чтобы понять, куда вообще что добавлять.
Автор настаивает, что это не проблема дисциплины, а проблема структуры: код изначально не был устроен так, чтобы переживать рост. Модуляризация по фичам не новый фреймворк и не замена Clean Architecture или DDD, она берёт принципы обоих и применяет их к каждой фиче отдельно, чтобы кусок был самодостаточным и тестировался независимо.
Разбор идёт от минусов layer-first до сборки всего вместе. Актуально, если команда в одной кодовой базе растёт к двадцати с лишним людям.
#flutter
История типовая. Сначала lib, несколько экранов, папка моделей и один файл сервисов на всё. Приложение выходит, все довольны. Потом фич больше, команда больше, и однажды в моделях триста файлов, в сервисах шесть тысяч строк, а новому инженеру нужны недели, чтобы понять, куда вообще что добавлять.
Автор настаивает, что это не проблема дисциплины, а проблема структуры: код изначально не был устроен так, чтобы переживать рост. Модуляризация по фичам не новый фреймворк и не замена Clean Architecture или DDD, она берёт принципы обоих и применяет их к каждой фиче отдельно, чтобы кусок был самодостаточным и тестировался независимо.
Разбор идёт от минусов layer-first до сборки всего вместе. Актуально, если команда в одной кодовой базе растёт к двадцати с лишним людям.
#flutter
freeCodeCamp.org
Feature Modularization in Flutter: How to Combine Clean Architecture and Domain-Driven Design for Self-Contained, Scalable Features
As an engineer working on a small team, your current structure could fly. But what if your team, all contributing to the same codebase, reaches 20 or more people at scale? You'll need careful design t
👍2
Jetpack XR SDK дошёл до беты: можно тащить XR в продакшен-процесс
Порт существующего 2D-приложения в XR перестал быть исследовательским проектом: Jetpack SceneCore, ARCore for Jetpack XR и XR Runtime вышли в бету, Jetpack Compose for XR обещают следом.
Формулировка Google прямая: API стабилизируются, и это хороший момент встраивать их в рабочие процессы, а не держать в песочнице. Делается это теми же инструментами Android, которыми вы уже пользуетесь, отдельный стек учить не нужно.
Релиз сфокусирован на базовых кирпичах SDK, так что смотреть стоит на них, а не на витринные демо. Что именно вошло в бету, перечислено в анонсе.
#android
Порт существующего 2D-приложения в XR перестал быть исследовательским проектом: Jetpack SceneCore, ARCore for Jetpack XR и XR Runtime вышли в бету, Jetpack Compose for XR обещают следом.
Формулировка Google прямая: API стабилизируются, и это хороший момент встраивать их в рабочие процессы, а не держать в песочнице. Делается это теми же инструментами Android, которыми вы уже пользуетесь, отдельный стек учить не нужно.
Релиз сфокусирован на базовых кирпичах SDK, так что смотреть стоит на них, а не на витринные демо. Что именно вошло в бету, перечислено в анонсе.
#android
Android Developers Blog
Jetpack XR SDK core libraries reach beta: The next milestone for Android XR
News and insights on the Android platform, developer tools, and events.
Сигнатура с Unit врёт о том, чем функция может закончиться
Пример из статьи:
Сигнатура об этом молчит. Про доменные ошибки вызывающий узнаёт из исключений, документации или чужой памяти, и компилятор ему здесь не помощник.
Сергей Чернов, который занимается аутентификацией и верификацией в финтех-платформе, разбирает, как вернуть эти случаи в тип возвращаемого значения и обрабатывать их функционально. Статья в блоге Kotlin.
#kotlin
Пример из статьи:
fun signDocument(documentId: UUID, code: String): Unit. Unit в Kotlin означает, что функция отработала и не вернула ничего осмысленного, примерно как void в Java. Понятно? А теперь скажите по одной сигнатуре, что будет, если код неверный, документ уже подписан или его вообще нет.Сигнатура об этом молчит. Про доменные ошибки вызывающий узнаёт из исключений, документации или чужой памяти, и компилятор ему здесь не помощник.
Сергей Чернов, который занимается аутентификацией и верификацией в финтех-платформе, разбирает, как вернуть эти случаи в тип возвращаемого значения и обрабатывать их функционально. Статья в блоге Kotlin.
#kotlin
The JetBrains Blog
Signatures, be true: domain errors and functional handling in Kotlin - The JetBrains Blog
Learn how to make expected failures visible in Kotlin function signatures with sealed error types and Either.
🔥2
Как Google разводит по изолированным доменам автомобильный Android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
Android Developers Blog
AAOS SDV - Secure by Design
News and insights on the Android platform, developer tools, and events.
Движок IntelliJ уехал из IDE и работает в VS Code по LSP
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
#kotlin
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
JetBrains.intellij-server. Это не оболочка, изображающая IDE, а языковой движок IntelliJ, говорящий по протоколу LSP.Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
.java-файл без проекта не заработает. Preview-сборки умирают через 30 дней после релиза, зато для чистого Kotlin остаётся бесплатный языковой сервер под Apache-2. Инструкция по запуску.#kotlin
DEV Community
IntelliJ Java Kotlin LSP now runs inside VS Code
Install JetBrains.intellij-server in VS Code, open a Maven Gradle or Bazel folder, then prove go-to-definition works.
❤3
Tinder срезал холодный старт на 47% через R8 Configuration Analyzer
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Android Developers Blog
Tinder cuts app cold starts by 47% with new R8 Configuration Analyzer
News and insights on the Android platform, developer tools, and events.
Media3 1.11 добавил слоты Player в Compose и предзагрузку коротких видео через PlayerPool
Media3 это библиотека, на которой работает подавляющее большинство топовых медиаприложений под Android. В 1.11 изменения затронули воспроизведение, редактирование и UI-компоненты сразу.
Для тех, кто на Compose, главное в UI-модулях: настраиваемые слоты
Помимо этого интеграцию с Cast обновили под SystemUI Output Switcher, добавили сетевое расширение на клиенте Ktor и утилиты муксинга для Ogg и WAV.
#android
Media3 это библиотека, на которой работает подавляющее большинство топовых медиаприложений под Android. В 1.11 изменения затронули воспроизведение, редактирование и UI-компоненты сразу.
Для тех, кто на Compose, главное в UI-модулях: настраиваемые слоты
Player с готовыми дефолтами, интерактивные жесты, наблюдатели состояния и предзагрузка коротких видео через PlayerPool. Последнее прямо про ленты в стиле Reels, где следующий ролик должен стартовать мгновенно.Помимо этого интеграцию с Cast обновили под SystemUI Output Switcher, добавили сетевое расширение на клиенте Ktor и утилиты муксинга для Ogg и WAV.
#android
Android Developers Blog
Media3 1.11 - What's new?
News and insights on the Android platform, developer tools, and events.
Космос, Ferrari, котёнок в коробке: обои на рабочий стол выбирали часами, перебирая варианты один за другим. SpaceWeb и Типичный программист вспомнили это в анкете к 25-летию компании, вместе с любимым спортом и лучшим другом — тоже родом из школьных анкет.
Между вопросами — история аськи, скайпа, биткоина и самой компании с 2001 по 2026 год, плюс немного будущего. В конце — промокод на услуги SpaceWeb и ответ на вопрос какое ты хранилище информации!
Между вопросами — история аськи, скайпа, биткоина и самой компании с 2001 по 2026 год, плюс немного будущего. В конце — промокод на услуги SpaceWeb и ответ на вопрос какое ты хранилище информации!
❤1
Справочник по BLE во Flutter: от разрешений и MTU до архитектуры сервиса под продакшен
Туториалы по Flutter обычно заканчиваются на REST. Как только надо поговорить с пульсометром, умной лампой или своим железом, начинается Bluetooth Low Energy, где разрешения различаются между Android и iOS и даже между версиями Android, а жизненный цикл соединения имеет больше состояний, чем ожидаешь. Пакет
🔘 теория BLE, конфигурация обеих платформ, разбор рекламных пакетов при сканировании;
🔘 согласование MTU, обнаружение сервисов, чтение и запись, уведомления и дескрипторы;
🔘 спаривание, фоновая работа, обработка ошибок и архитектура сервиса под продакшен;
🔘 каждый фрагмент кода в справочнике разобран построчно.
#flutter
Туториалы по Flutter обычно заканчиваются на REST. Как только надо поговорить с пульсометром, умной лампой или своим железом, начинается Bluetooth Low Energy, где разрешения различаются между Android и iOS и даже между версиями Android, а жизненный цикл соединения имеет больше состояний, чем ожидаешь. Пакет
flutter_blue_plus прячет платформенную боль, оставляя контроль над сканированием и обменом.🔘 теория BLE, конфигурация обеих платформ, разбор рекламных пакетов при сканировании;
🔘 согласование MTU, обнаружение сервисов, чтение и запись, уведомления и дескрипторы;
🔘 спаривание, фоновая работа, обработка ошибок и архитектура сервиса под продакшен;
🔘 каждый фрагмент кода в справочнике разобран построчно.
#flutter
freeCodeCamp.org
Bluetooth Low Energy in Flutter: A Handbook for Devs
Most Flutter tutorials stop at network calls and REST APIs. The moment you need to talk to a physical device, a heart rate monitor, a smart bulb, a fitness tracker, an industrial sensor, or your own c
Kotlin, NDK и JNI: как позвать C и C++ из Android-приложения
Поводов спуститься в нативный код три: не хватает производительности, есть готовая библиотека на C или нужна функциональность уровнем ниже, чем даёт платформа. Инструментарий даёт Android NDK, а мостом между Kotlin или Java и нативной стороной работает JNI.
Разбор начинается с архитектуры этой связки, а не с копипасты первого рабочего примера: видно, какие слои участвуют, где проходят границы ответственности и в каком месте вы платите за переход через JNI.
Полезно как карта местности перед первым спуском, особенно если раньше нативный код в проекте трогал кто-то другой.
#kotlin
Поводов спуститься в нативный код три: не хватает производительности, есть готовая библиотека на C или нужна функциональность уровнем ниже, чем даёт платформа. Инструментарий даёт Android NDK, а мостом между Kotlin или Java и нативной стороной работает JNI.
Разбор начинается с архитектуры этой связки, а не с копипасты первого рабочего примера: видно, какие слои участвуют, где проходят границы ответственности и в каком месте вы платите за переход через JNI.
Полезно как карта местности перед первым спуском, особенно если раньше нативный код в проекте трогал кто-то другой.
#kotlin
DEV Community
Kotlin Native Interop: Calling C and C++ from Android
Kotlin Native Interop: Calling C and C++ from Android Android applications can combine...