Android Broadcast
14.2K subscribers
3.49K photos
331 videos
11 files
5.85K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
📹 Вышли все видео с Mobius Осень 2024 (78 штук)

Новый Mobius приближается и традиционно открывается плейлист со всеми видео прошедшей конференции

Также можно посмотреть на 📹 VK Video

В комментариях делитесь самыми интересными докладами и что в них было полезного

#android #ios #flutter #kotlin #kmp #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
👍49
🚀 Вышел Jetpack Room 2.7.0 RC03 с важными исправлениями багов перед выходом первой стабильной версии с поддержкой KMP

#android #jetpack #jetpackupdate #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24
🏝 BundledSQLiteDriver: новый взгляд на SQLite в Android и Kotlin Multiplatform (12м)

Чтобы добавить поддержку других платформ в Jetpack Room, необходимо было обеспечить совместимость с различными версиями SQLite, встроенными в ОС, а также с теми, которые могут подключаться отдельно. Результатом стал BundledSQLiteDriver, который позволяет использовать актуальную версию SQLite, поставляемую отдельно, и применять её на всех платформах.

В статье подробно рассматриваются особенности этого подхода к работе с SQLite в Room.

#kotlin #kmp #android #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
‼️🏝 KMP Разработчики не обновляйте XCode до 16.3

В Kotlin 2.1.20 несовместим со свежей версий XCode, поддержка будет в Kotlin 2.1.21. Отложите обновление!

#kotlin #kmp #xcode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
🚀 Вышла новая версия Jetpack Room 2.7.0 с поддержкой KMP.

🔥 Главное нововведение этой версии Room — рефакторинг библиотеки для поддержки нескольких платформ через KMP: Android, iOS, JVM (Desktop), native Mac и native Linux. Документацию о том, как начать, можно найти здесь. В рамках поддержки KMP было выделено SQLiteDriver.

🏝 При использовании KSP теперь будет генерироваться код на Kotlin, а для KAPT или проектов с Java — на Java.

🏝 Поддерживается Kotlin 2.0 и выше, также рекомендуется использовать KSP2.

#android #kmp #jetpack #ios #desktop #mac #linux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
Разработчик и фаундер с опытом запуска стартапов в сферах туризма, HR tech, а сейчас — в музыкальной индустрии, делится опытом выбора технологии для запуска MVP (5м) приложения под Android и iOS для стартапа с ограниченным бюджетом. Выбор между KMP, Flutter и ReactNative

Выводы
👉 KMP — не про супербыстрый MVP, но отличный выбор, если у тебя Android-бэкграунд и ты хочешь масштабировать продукт, не дублируя бизнес-логику.
👉 Flutter - идеален для MVP, особенно если ты хочешь за месяц выйти с приложением в Store и посмотреть на метрики (поддержу автора на момент выхода этого поста)
👉 ReactNative - подходит, если у вас уже есть веб-команда, и вы хотите быстро запустить мобильную версию.

#kmp #flutter
🔥37👍17🤔2
Reanimator - простоя библиотека для Jetpack ViewModel (с поддержкой KMP) для работы с состоянием. Подробный разбор в статье (EN,11м) или альтернативной ссылке

@Serializable
data class MyUiState(
// Persistent
val data: List<String> = emptyList(),
val selectedItem: String? = null,
// Transient
val isLoading: Boolean = false,
val error: String? = null
)

class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {

// Define which properties are transient
private val transientProps = listOf("isLoading", "error")

// Declare your state flow - Reanimator handles the rest!
private val _uiState by savedStateHandle.getMutableStateFlow(
defaultValue = MyUiState(), // Initial/default state
coroutineScope = viewModelScope, // Scope for saving changes
transientProperties = transientProps // What NOT to save
// key = "custom_state_key" // Optional: custom key
)
val uiState: StateFlow<MyUiState> = _uiState.asStateFlow()

// ... rest of your ViewModel logic ...

fun updateData(newData: List<String>) {
// Just update the state - Reanimator saves persistent parts automatically
_uiState.update { it.copy(data = newData, isLoading = false) }
}
}


#android #kmp
🤔27👍13🤯8🔥1
📹 Compose/iOS готов к продакшену? Прямой эфир с ответами на вопросы
Когда: четверг, 8 мая, 18:30 (GMT+3)

Буквально вчера вышел Compose iOS Stable и конечно же открывает возможности Android разработчиками по написанию мобильных приложений под обе платформы. Но всё ли так сладко, как заявляет JetBrains? Будем разбираться в этом с экспертом кто уже познал прелести продакшена!

👨‍💻 Эксперт - Никита, фуллстек Kotlin разработчик, автор проектов FlowMVI и respawn.pro. При анонсе Compose iOS Stable, его приложение было в официальном анонсе 🔥

👨‍💻 И еще одни эксперт - Чикишев Тимур, Senior Android разработчик в KTS. Начал пробовать Compose iOS еще до официального релиза. Успел адаптировать Android приложение с Compose на iOS, буквально на этой неделе сделали релиз

Задавайте свои вопросы в комментариях к посту, чтобы они были заданы на эфире

#android #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍93
Media is too big
VIEW IN TELEGRAM
📹 Android Developers Backstage 215. KMP. Have your code and eat it too

Software Engineers Dustin Lam и Yigit Boyar присоединяются к ведущему Tor Norbye, чтобы обсудить Kotlin Multiplatform (KMP).

0:00 - Введение
0:29 - Что такое KMP: не новый продукт, а Kotlin с новыми возможностями
3:20 - Зачем нужен KMP: преимущества и цели
6:17 - KMP vs. другие кроссплатформенные фреймворки
6:41 - Общая бизнес-логика — основной сценарий использования
9:18 - Практическое внедрение: превращение Android-приложения в KMP
13:15 - Работа с платформо-специфичными зависимостями
28:56 - Поддержка библиотек в Kotlin Multiplatform
35:56 - Developer Experience: инструменты и интеграция
40:16 - Совместимость с iOS: как добиться взаимодействия
42:51 - KMP в действии: как Google использует эту технологию
47:17 - Долгосрочное видение и потенциал KMP
51:30 - Консистентность поведения vs. нативная производительность
55:32 - Попробуйте KMP и присоединяйтесь к разработке!

#android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94
🚀 Релиз Jetpack Navigation 2.9.0

🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API

#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22
🚀 Релиз Jetpack Lifecycle 2.9.0: тестирование ViewModel и больше KMP

🎉 Новый артефакт lifecycle-viewmodel-testing - KMP библиотека для тестирования ViewModel в изоляции с помощью ViewModelScenario
👉 SavedStateHandle теперь может возвращать MutableStateFlow
👉 CreationExtras добавили перегрузки операторов in, +=, и +

Больше поддержки KMP
👉 lifecycle-testing, lifecycle-viewmodel-savedstate теперь полностью KMP библиотеки
👉 LocalLifecycleOwner стал доступен из common кода
👉 ViewModelProvider.NewInstanceFactory теперь доступна для Android и JVM

#android #jetpack #jetpackupdate #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍5
🚀 SavedState 1.3.0: Поддержка KotlinX Serialization и Kotlin Property delegate для удобства работы

Что нового:
👉 SavedState теперь полностью KMP библиотека с поддержкой Android, iOS, Linux, Mac и JVM
👉 LocalSavedStateRegistryOwner теперь не является частью Compose UI, а будет частью нового артефакта - savedstate-compose
👉 Появился обобщенный тип SavedState, который Bundle на Android и Map<String, Any> на других платформах
 // Создаем SavedState с помощью DSL:
val savedState = savedState {
putInt("currentPage", 1)
putString("filter", "favorites")
}

val currentPage = savedState.read { getInt("currentPage") }
savedState.write { remove("currentPage") }


🏝 Добавили поддержку KotlinX Serialization 🔥
@Serializable
data class Person(val firstName: String, val lastName: String)

fun main() {
val person = Person("John", "Doe")
val encoded: SavedState = encodeToSavedState(person)
val decoded: Person = decodeFromSavedState(encoded)
}


🏝 Используйте новый делегат saved в Activity и ViewModel
class MyActivity : ComponentActivity() {
var person by saved { Person("John", "Doe") }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.person = Person("Jane", "Doe")
}
}

class MyViewModel(handle: SavedStateHandle) : ViewModel() {
var person by handle.saved { Person("John", "Doe") }

fun onPersonChanged(person: Person) {
this.person = person
}
}


#android #jetpack #jetpackupdate #kmp #kotlin #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍9🤔5
🚀 Вышел Jetpack Window Manager 1.4 - библиотека для работы с разными форматами устройства и несколькими окнами с поддержкой KMP

Что нового в свежей версии:
👉 Улучшения Activity Embedding
👉 Улучшения API WindowMetrics
👉 Улучшили API для тестирования

#jetpack #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
В Jetpack делают KMP API для обработки системных жестов нажатия назад или Predictive Back

Новая библиотека Jetpack NavigationEvent содержит в себе API для обработки нажатия назад или для отслеживания прогресса жеста назад. API cхоже с Dispatcher которое было сделано для Back ранее. Поддерживаются KMP таргеты: Android, Desktop/JVM, iOS, JS, Linux, WASM, watchOS, tvOS, Ming

ComponentActivity реализует интерфейс NavigationEventDispatcherOwner:
interface NavigationEventDispatcherOwner {

val navigationEventDispatcher: NavigationEventDispatcher
}


NavigationEventDispatcher представляет собой класс, для передачи системны событий Назад:
class NavigationEventDispatcher(
private val fallbackOnBackPressed: (() -> Unit)?,
private val onHasEnabledCallbacksChanged: ((Boolean) -> Unit)?,
)
// Добавления callback чтобы слушать когда произйдет нажатие "Назад"
fun addCallback(
callback: NavigationEventCallback,
priority: NavigationEventPriority = NavigationEventPriority.Default
)

fun dispatchOnStarted(event: NavigationEvent)

fun dispatchOnProgressed(event: NavigationEvent)

fun dispatchOnCompleted()

fun dispatchOnCancelled()
}


В Android Activity можно подписаться на обработку события
class MyActivity : ComponentActivity() {

init {
navigationEventDispatcher.addCallback(
callback = object : NavigationEventCallback(
isEnabled = true,
priority = NavigationEventPriority.Default
) {
override fun onEventCompleted() {
// Back сделан
}
},
priority = NavigationEventPriority.Default
)
}
}


#android #jetpack #навигация #kmp #kotlin
24👍11🔥7🤔3
📹 Самое важное с Google I/O 2025 для Android и KMP разработки (24 мин)

Посмотрел Keynote, разобрал анонсы, посмотрел доклады и рассказал все самое интересное на что стоит обратить ваше внимание!

Видно также доступно на 📹 VK Video

P.S. Новости как формат вернулись на канал

#AndroidBroadcast #googleio #android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥173
🏝 Проблемы с порядком Gradle Task при использовании KSP 2.0.2

Продолжаю разработку проекта FrameIO - Kotlin Multiplatform клиента для сервиса frame.io и стоклнулся с падением сборки из-за порядка задач (ниже стек с примером проблемы):

Some problems were found with the configuration of task ':module:kspDebugKotlinAndroid' (type 'KspAATask').
- Gradle detected a problem with the following location: './module'.

Reason: Task ':module:kspDebugKotlinAndroid' uses this output of task ':module:javaPreCompileDebug' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.

Possible solutions:
1. Declare task ':module:javaPreCompileDebug' as an input of ':module:kspDebugKotlinAndroid'.
2. Declare an explicit dependency on ':module:javaPreCompileDebug' from ':module:kspDebugKotlinAndroid' using Task#dependsOn.
3. Declare an explicit dependency on ':core:user-session:javaPreCompileDebug' from ':module:kspDebugKotlinAndroid' using Task#mustRunAfter.

For more information, please refer to https://docs.gradle.org/8.14.2/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.


Стек для сборки: Gradle 8.14.2, Kotlin 2.2.0, KSP 2.2.0-2.0.2, AGP 8.11.0

Решения проблемы пока нету в KSP (одно из issue), поэтому я задаю порядок Gradle Task сам:

// build.gradle.kts модуля где подключен ksp
afterEvaluate {
android.libraryVariants.forEach { variant ->
val variantCapitalized = variant.name.capitalized()
tasks.named("ksp${variantCapitalized}KotlinAndroid") {
dependsOn(
"${variant.name}AssetsCopyForAGP",
"process${variantCapitalized}Manifest",
"write${variantCapitalized}AarMetadata",
"javaPreCompile${variantCapitalized}",
"merge${variantCapitalized}Assets",
"merge${variantCapitalized}JniLibFolders",
"merge${variantCapitalized}NativeLibs",
"copy${variantCapitalized}JniLibsProjectOnly",
"generate${variantCapitalized}EmptyResourceFiles",
"copy${variantCapitalized}JniLibsProjectAndLocalJars",
"prepare${variantCapitalized}ArtProfile",
"write${variantCapitalized}LintModelMetadata",
"extractProguardFiles",
"prepareLintJarForPublish",
)
}
}
}


#android #kmp #koltin #ksp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍97🤯6
🤖 Jetpack Lifecycle теперь поддерживает все KMP тартеты

В версии Jetpack Lifecycle 2.9.2 добавили поддержку WasmJS тартега, а это значит что библиотека теперь может работать на всех KMP таргетах: JVM (Android, Desktop), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS)

#android #kmp #wasmjs #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥61🎉1
🤖 Jetpack SavedState теперь поддерживает все KMP таргеты

Jetpack SavedState 1.3.1 закончила разработку поддержку KMP. Теперь все существующие таргеты добавлены: JVM (Android, Desktop), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS)

Jetpack SavedState - это библиотека для сохранения состояния ViewModel при смерте процесса приложения

class SavedStateViewModel(
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
val filteredData: StateFlow<List<String>> =
savedStateHandle.getStateFlow<String>("query")
.flatMapLatest { query ->
repository.getFilteredData(query)
}

fun setQuery(query: String) {
savedStateHandle["query"] = query
}
}


#android #kmp #wasmjs #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉24👍9🔥3
🤖 Стартанула разработка Room 2.8.0. В первой альфе добавили поддержку KMP Apple таргетов Watch OS и TV OS

#kmp #sqlite #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🎉2
🤯 Команда Anvil решила прекратить развитие проекта в пользу другого решения

Anvil - Kotlin плагина для расширения возможностей Dagger 2 и упрощения работы с ним решили прекратить развивать. Коллега автором решения сделал Metro и компания будет переходить на него и участвовать в его развитии.

Metro - это compile-time DI фреймворк с поддержкой KMP, который вдохновлялся Dagger, Anvil, Kotlin-Inject.


#di #kmp
🏆27🤔14🔥3👍1