Android Broadcast
Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab #MQRZR
Показати більше📈 Аналітичний огляд Telegram-каналу Android Broadcast
Канал Android Broadcast (@android_broadcast) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 14 549 підписників, посідаючи 8 541 місце в категорії Технології та додатки та 44 414 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 14 549 підписників.
За останніми даними від 05 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на 11, а за останні 24 години на 5, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 39.00%. Протягом перших 24 годин після публікації контент зазвичай збирає 22.17% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 5 672 переглядів. Протягом першої доби публікація в середньому набирає 3 224 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 28.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як api, kotlin, gradle, сборка, androiddev.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Подборка новостей и статей для Android разработчиков.
Реклама и связь с автором @ab_manager
РКН https://abdev.by/rkn_tg_ab #MQRZR”
Завдяки високій частоті оновлень (останні дані отримано 06 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
Буду очень признателен если поставите звездочку на репозитории, что поддержит меня и замотивирует дальнейшее развитие проектаОдна из проблем при работе с Gradle-проектами через AI-агентов: они ничего не знают про актуальные версии зависимостей, что в них поменялось и насколько безопасно это подключать. Баги, CVE, сломанная совместимость с AGP или Kotlin. Версию модель берёт из обучающих данных, а потом это приходится перепроверять руками. Готового решения, удовлеторяющее моим требованиям, не нашёл, поэтому сделал свой Maven MCP. Это плагин для Claude Code, Grok Build, Cursor и Codex, а также есть возможность подключить как MCP в любой агент. Внутри один Python-сервер на стандартной библиотеке, без pip-зависимостей. Версии смотрит в репозиториях, которые объявлены в билде, а не только в Maven Central. Gradle сканирует через wrapper и runtime classpath, Maven читает pom.xml, version catalog тоже. Что агент теперь может сделать сам: 👉 Узнать последняя стабильная версия, а не альфа с максимальным номером 👉 что изменилось между двумя версиями: AndroidX, AGP, GitHub releases, CHANGELOG 👉 CVE через OSV, включая путь до транзитивной уязвимости 👉 совместимость AGP, Gradle, JDK, Kotlin 👉 конфликты версий, лицензии, EOL у JDK, Kotlin, Gradle и Spring Boot 👉 нормальная запись в libs.versions.toml Перед правкой зависимости хук проверяет координаты и насколько безопасно подключить его (через хуки в плагинах). 🐱 Исходники на GitHub
Ранее Maven MCP жил в другом GitHub репо, но к релизу 1.0 выделил его в отдельный репозиторий#AI #Gradle #Maven #MCP
ВАЖНО! Скилл полезен, но его эффект зависит от вашего уровня мастерства, а также на результат может повлиять ваш харнесс и контекст сессии. Будьте внимательны с вызовом стороннего скиллаСкиллы можно установить как плагин к агентам или использовать через поиск в Android CLI. 🐱 Android Skills Github #Android #AndroidDev #AI
Android CLI - терминальная утилита от команды Android из Google для более эффективной работы агентов с Android задачами
Android Device Streaming - облачная ферма устройств от Firebase (Google)#Android #AndroidDev #AI #CLI
org.gradle.tooling.parallel=true Studio по умолчанию тянет модели IDEA параллельно — Gradle Sync в больших мультимодульных проектах заметно быстрее
🔗 Подробнее
https://androidstudio.googleblog.com/2026/10/android-studio-rabbit-1-now-available.html
#AndroidStudio #AndroidDev #GooglePlayAI_BROADCAST — скидка на сайте
#рекламаsrc/main: логирование экрана, свой интерцептор OkHttp. По умолчанию такой код попадает в релиз, а пользователю он не нужен. Чтобы оставить его только в отладочных сборках, обычно прячут каждый вызов под if (DEBUG), разносят сами вызовы по разным src или заводят плагинную архитектуру.
NoOp проще. Две реализации одного публичного API: одна рабочая, вторая с теми же методами, но без работы. Вызов в общем коде не меняется, в релизе он ничего не делает. По исходникам разделяется только место, где создаётся реализация.
interface ScreenTracer {
fun trace(screen: String)
object NoOp : ScreenTracer {
override fun trace(screen: String) = Unit
}
}
// src/release
fun createScreenTracer(): ScreenTracer = ScreenTracer.NoOp
// src/debug. Этот класс в release не попадает.
fun createScreenTracer(): ScreenTracer = DebugScreenTracer()
class DebugScreenTracer : ScreenTracer {
override fun trace(screen: String) {
Log.d("Screen", screen)
}
}
class AppContainer(
val screenTracer: ScreenTracer = createScreenTracer(),
)
// Одна и та же строка в debug и в release
screenTracer.trace("Checkout")
Пример маленький, но так же собираются целые модули. Правила те же:
1. Публичное API совпадает целиком: те же типы, методы и сигнатуры.
2. Если метод что-то возвращает, NoOp отдаёт нейтральное значение, от которого дальше ничего не запускается: null, пустую коллекцию, константу DISABLED, -1.
3. Методы NoOp не делают работу: не пишут логи, не ходят в сеть, не держат состояние.
// Подключение зависимостей с разной реализацией
debugImplementation(project(":lib:debug"))
releaseImplementation(project(":lib:noop"))
Оба модуля отдают одни и те же публичные типы. В сборку попадает один из них.
NoOp можно сочетать с вырезанием кода на этапе R8, чтобы в релизе не осталось даже заглушки. Если пост наберёт 200 лайков❤️ , разберу, как совместить оба подхода.
#Android #AndroidDev #Архитектураadbd сам гасит wireless debugging на недоверенной сети и поднимает обратно, когда ты снова дома.
Что стало лучше (цифры от Google)
👉 скорость автоконнекта +32%
👉 скорость коннекта увеличилась на 66% на 90% сессий
На практике важнее другое. В Device Manager устройство появляется само, если на телефоне включён Wireless debugging. QR или код, без ручного IP.
Чтобы это работало надо использовать:
👉 Девайс на Android 17 или новее
👉 Android Platform-Tools 37.0.0 или новее
👉 Android Studio Quail 3 или новее
Я пользуюсь отладкой по беспроводу и это удобно, но ВАЖНО иметь хорошую точку доступа (точно 5 или 6 GHz) с высокой скоростью, иначе все ускорения коту под хвост.
🔗 Документация
📹 Доклад на Android Makers 2026
#Android #AndroidDev #Tooling #AndroidStudio@OptIn(ExperimentalWorkMetricsApi::class)
suspend fun dumpSyncMetrics(repo: WorkMetricsInfoRepository) {
val query = WorkMetricsQuery.Builder()
.addWorkerClassNames(SyncWorker::class.java.name)
.addTags("sync")
.setBeginTimeMillis(...)
.build()
repo.getWorkMetricsInfos(query).forEach { info ->
Log.d(
"WM",
"${info.workerClassName} " +
"state=${info.state} " +
"attempts=${info.runAttemptCount} " +
"retries=${info.explicitRetryCount} " +
"worker=${info.workerDurationMillis}ms " +
"total=${info.totalRuntimeMillis}ms " +
"stops=${info.stopReasonCounts}"
)
}
}
👉 Новое экспериментальное API для слежения за событиями разных Work
// ExecutionEventListener — все 4 метода abstract
// cheduleEventListener — default, можно повесить только нужные.
@OptIn(ExperimentalEventsApi::class)
class WorkTelemetry : ExecutionEventListener, ScheduleEventListener {
override fun onStarted(workInfo: WorkInfo) {
Log.d("WM", "start ${workInfo.id} ${workInfo.workerClassName}")
}
override fun onFinished(result: ListenableWorker.Result, workInfo: WorkInfo) {
Log.d("WM", "finish ${workInfo.id} $result attempts=${workInfo.runAttemptCount}")
}
override fun onStopped(stopReason: Int, workInfo: WorkInfo) {
Log.d("WM", "stop ${workInfo.id} reason=$stopReason")
}
override fun onException(throwable: Throwable, workInfo: WorkInfo) {
Log.e("WM", "crash ${workInfo.id}", throwable)
}
override fun onEnqueued(workInfo: WorkInfo) { }
override fun onUnblocked(workInfo: WorkInfo) { }
override fun onUpdated(oldWorkInfo: WorkInfo, updatedWorkInfo: WorkInfo) { }
override fun onCancelled(workInfo: WorkInfo) { }
override fun onPrerequisiteFailed(workInfo: WorkInfo) { }
}
Что еще поменялось
👉 minSdk 23 -> 24 (Android 7.0 теперь минимум)
👉 дефолтный executor теперь Dispatchers.Default вместо собственного. Все также можно переопределить
🛠 Исправление багов и улучшение производительности
#Android #AndroidDev #WorkManager #AndroidJetpackResultEventBus. Для сценариев «выбрал и вернулся» это как раз то, чего не хватало.
NavDisplay(
backStack = backStack,
onBack = { backStack.removeLastOrNull() },
entryDecorators = listOf(
rememberSaveableStateHolderNavEntryDecorator(),
rememberResultEventBusNavEntryDecorator(),
),
entryProvider = entryProvider {
entry<Home> {
val viewModel = viewModel<HomeViewModel>()
ResultEffect<Address> { address ->
viewModel.onAddressSelected(address)
}
HomeScreen(
address = viewModel.address,
onPickAddress = { backStack.add(AddressPicker) },
)
}
entry<AddressPicker> {
val resultBus = LocalResultEventBus.current
AddressPickerScreen(
onSelected = { address ->
resultBus.sendResult(address)
backStack.removeLastOrNull()
},
)
}
},
)
👉 Поддержка KMP Deep Link API в androidx.navigation3.runtime.deeplink
👉 Упростили работы с Predictive back gesture в Android. Теперь не придется высчитывать дельту самостоятельно
#Compose #JetpackCompose #Navigation3// Пример теста на JUnit 5
@ExtendWith(BackupRestoreExtension::class)
@BackupRestoreConfig(applicationId = "com.example.app")
class BackupRestoreTest {
@Test
fun prefsSurviveCloudRestore(
controller: BackupRestoreController,
@TempDir outputDir: Path,
) = runBlocking {
controller.runBackupRestoreFlow(
storage = StorageDomain.Preference("user_prefs"),
outputDir = outputDir,
mode = BackupTransportMode.CLOUD_ENCRYPTED,
)
}
}
#Android #AndroidDev #AndroidJetpack #Backup #Тестирование