Reklama va hamkorlik bo'yicha: @oshigi_jannatim
Hamkor kanal: @xazilbek
Last updated 1 month ago
Сотрудничество: esaul@mediar.pro
Телега со стилем и шмотом: https://t.me/esaulstyle
Это ютуб крутой бабы: https://youtube.com/c/vika02032000
Дискорд: https://discord.gg/HPzQ85rZck
Last updated 1 month, 2 weeks ago
RTL адаптация в Android
#android
Хорошая статья, где описывается опыт поддержки RTL-языков в Android, в том числе и на Compose.
Для тех, кто не в теме. RTL (right-to-left) — это чтение справа-налево, которое встречается в языках ближнего востока, например, арабский. LTR (left-to-right) — привычное нам чтение слева-направо.
В Android довольно неплохо поддерживаются RTL-языки, начиная с API 17, но тем не менее — есть масса кейсов, на которые стоит посмотреть при тестировании.
Был опыт адаптации приложения под RTL-языки? Вдруг вы настолько круты, что адаптировали свой pet-проект, кто знает, расскажите в комментариях. 🇦🇪
Device streaming
#androidstudio
О, тут в Android Studio Jellyfish подвезли Device streaming: фича, которая позволяет тестировать своё приложение на различных девайсах, которые находятся в дата центрах Google.
Прикольная фича, стоит обратить внимание, особенно когда выходит свежая версия Android, а на ваши устройства она ещё не прилетела. Да и специфические устройства, типа Fold тоже не каждый хочет себе покупать.
Работает аналогично обычному подключению устройства, и фича бесплатна, пока находится в alpha. Дальше всё за монету и будет учитываться время подключения к устройству.
Все детали можно почитать тут.
Ресурсы в Compose Multiplatform
#compose
Не секрет, что ни один из проектов не обходится без ресурсов, а управление ими становится только сложнее с ростом проекта. Ну и становится сложнее, когда проект написан на несколько платформ сразу.
Неплохая обзорная статья, где описываются основные изменения работы с ресурсами после свежего релиза Compose Multiplatform 1.6.0-beta01.
В целом, стало всё чуть удобнее, но буду рад, если поделитесь практическими примерами оптимизации ресурсов в подобных приложениях.
2️⃣0️⃣2️⃣4️⃣
Итак, подходит к концу ещё один год.
Уверен, что вы были молодцы и закрыли свои рабочие и личные задачи.
Кто знает, вероятно среди подписчиков есть те, кто поменял место жизни, а может быть — сменил работу, повысив свой уровень дохода.
У меня год пролетел крайне быстро: получилось закрыть не все свои цели, но главные из них успешно закрыты. И, как ни странно, они связаны с семьёй и здоровьем.
К чему я этот тост вообще вам говорю 🤓.
Насколько бы важными вам не казались бы ваши финансовые или профессиональные цели — всегда помните, что ваше здоровье, близкие люди и жизнь в согласии с собой сильно важнее.
Вот и желаю вам в новом году следовать за тем, что действительно важно! 🎄
Хак через десериализацию
#android
Давно я не появлялся на канале: со мной всё хорошо, но дела под конец года забрали всё свободное время, а серая погода — забрала всё желание писать. Но… надо не забывать вас, поэтому возвращаюсь!
На днях попалось любопытное видео, где описывается уязвимость приложения, связанная с использованием Serializable в крупном приложении AliExpress. В видео по шагам рассказывается о том, как провернуть подобный хак, как найти подобные в своих приложениях, ну и конечно же демонстрируется сама уязвимость.
Flow опрос #2
#квиз
Первый опрос был выше, и внимательные подписчики заметили, что мы не блокируем функцию main() от завершения. Для упрощения — так и оставлю и в нашем примере, ведь работу этих заданий я тестирую в Kotlin Playground, где все задания успешно выполняются.
Ну и на этот раз — ответ только один**.
Итак, что будет в консол**и?
```
import kotlinx.coroutines.
import kotlinx.coroutines.flow.
val coroutineScope = CoroutineScope(Dispatchers.Default)
val intFlow = flowOf(1, 2, 3)
val stringFlow = flowOf("a", "b", "c")
fun main() {
coroutineScope.launch {
intFlow
.onEach { delay(100) }
.collect { println(it) }
stringFlow
.collect { println(it) }
}
}
```
Flow-опрос #1
#квиз
Что будет в результате выполнения этого Fl
ow?
```
import kotlinx.coroutines.
import kotlinx.coroutines.flow.
val scope = CoroutineScope(Dispatchers.Default)
val producer = flowOf("a", "b")
.onEach { println("0:$it") }
fun main() {
scope.launch {
producer.collect { println("1:$it") }
}
scope.launch {
producer.collect { println("2:$it") }
}
}
```
Kotlin Multiplatform is Stable#kotlin #kmp
Отличные новости: Kotlin Multiplatform добрался до стабильной версии! 🎉
Пора ещё раз сходить к команде iOS и предложить им попробовать KMP в своём проекте.
Ещё ребята из JetBrains рассказали о планах, связанных с Compose Multiplatform: он стабилен для Android и Desktop, но пока что в alpha для iOS и в экспериментальной стадии для Web (Wasm). В 2024 году нас ждёт beta для iOS, а также alpha для Wasm.
Ждём новых новостей, а также поздравления ребятам из JetBrains!
Reklama va hamkorlik bo'yicha: @oshigi_jannatim
Hamkor kanal: @xazilbek
Last updated 1 month ago
Сотрудничество: esaul@mediar.pro
Телега со стилем и шмотом: https://t.me/esaulstyle
Это ютуб крутой бабы: https://youtube.com/c/vika02032000
Дискорд: https://discord.gg/HPzQ85rZck
Last updated 1 month, 2 weeks ago