Android Broadcast
Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab #MQRZR
Show more📈 Analytical overview of Telegram channel Android Broadcast
Channel Android Broadcast (@android_broadcast) in the Russian language segment is an active participant. Currently, the community unites 14 549 subscribers, ranking 8 541 in the Technologies & Applications category and 44 414 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 14 549 subscribers.
According to the latest data from 05 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 11 over the last 30 days and by 5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 39.00%. Within the first 24 hours after publication, content typically collects 22.17% reactions from the total number of subscribers.
- Post reach: On average, each post receives 5 672 views. Within the first day, a publication typically gains 3 224 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 28.
- Thematic interests: Content is focused on key topics such as api, kotlin, gradle, сборка, androiddev.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Подборка новостей и статей для Android разработчиков.
Реклама и связь с автором @ab_manager
РКН https://abdev.by/rkn_tg_ab #MQRZR”
Thanks to the high frequency of updates (latest data received on 06 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Буду очень признателен если поставите звездочку на репозитории, что поддержит меня и замотивирует дальнейшее развитие проектаОдна из проблем при работе с 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 #Тестирование