Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Опубликовали доклад по KMP 🏝 с Mobius Весна 2023
📺 Android-Driven KMM (46 мин)
📺 KMM + 🎨 Composable Architecture в Умной Камере (26 мин)
📺 Как мы Kotlin Multiplatform внедряли (46 мин)
📺 Android-Driven KMM (46 мин)
📺 KMM + 🎨 Composable Architecture в Умной Камере (26 мин)
📺 Как мы Kotlin Multiplatform внедряли (46 мин)
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Константин Семочкин — Android-Driven KMM
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Константин расскажет о том, как они в Дзене внедряют КММ с минимальным участием со стороны iOS и почему так сложилось. Он опишет особенности работы с кодом КММ как библиотеки. Спикер постарается упростить…
— —
Константин расскажет о том, как они в Дзене внедряют КММ с минимальным участием со стороны iOS и почему так сложилось. Он опишет особенности работы с кодом КММ как библиотеки. Спикер постарается упростить…
👍2🔥2
Forwarded from Android Guards
Android предоставляет весьма широки возможности по логированию различных событий. Одним из наиболее полезных, на мой взгляд, является логирование SQL запросов, которые делают приложения. Не важно, напрямую или через ORM. В логах будут те запросы, которые непосредственно выполняет БД. Включить эту возможность можно командой:
#aht
adb shell setprop log.tag.SQLiteStatements VERBOSE. После чего в logcat должны появиться логи запросов. А если поискать в исходниках Android ссылки на метод isLoggable, то можно найти другие подобные теги и включить логирование для них аналогичным способом.#aht
👍4🔥1
Forwarded from Compose Broadcast (Кирилл Розов)
QRose - Compose Multiplatform библиотека для создания QR кодов. Поддерживает Android, iOS, macOS, Web
👍6🤝4🎄3
Forwarded from Android Broadcast (Кирилл Розов)
Одно из будущих фичей Android Studio Iguana станет проверка Compose UI на адаптивность под разные размеры экранов и доступность. Фича называется Compose UI Check
#androidstudio
#androidstudio
👍4🔥1🤔1
Forwarded from Yandex for Mobile (Ксения Дегтярева)
Мы позвали на интервью Дениса Загаевского, старшего разработчика в мобильных Картах и Навигаторе. Обсудили сразу несколько тем: какие задачи решают ребята в Картах, как подстраиваются под сложности определения геолокации, развивается ли МарKit, как уживаются приложения Карт и Навигатора. Раскрыли несколько тайн: кто сделал первый коммит с KMM в Яндексе, нужен ли для KMM свой Dagger и зачем мобильному разработчику своя виртуальная машина.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2💩1👨💻1
Forwarded from Mobile Native ️️
Deep Dive Into Android Memory
Отличная статья про то, как приложения работают с памятью в андроиде, что происходит при нехватке памяти, как и какие процессы запускаются и т.д.
👉 Garbage Collection
👉 Kswapd(Kernel Swap Daemon)
👉 Low Memory Killer
👉 Memory Management
Читать (En)
Отличная статья про то, как приложения работают с памятью в андроиде, что происходит при нехватке памяти, как и какие процессы запускаются и т.д.
👉 Garbage Collection
👉 Kswapd(Kernel Swap Daemon)
👉 Low Memory Killer
👉 Memory Management
Читать (En)
🔥3👍2
Forwarded from Dev Easy Notes (Nikita)
Я недавно писал о том, что я давно не читаю статей по мобильной разработке. На самом деле такая же тема у меня и с докладами. Когда был молодым я их смотрел десятками, все было в новинку и интересно. Сейчас я смотрю их крайне редко, в основном это доклады крутых олдов вроде Боиштяна.
Это все что касается именно технических докладов. Однако чем опытнее я становлюсь, тем меня почему-то больше привлекают доклады про жизнь. Потому как разобраться в какой-то технологии ты точно сможешь и без доклада, а вот разобраться в себе, это оказывается гораздо сложнее. У меня большинство людей из окружения ITшники, внезапно. И я вижу проблему, что мы порой слишком увлекаемся работой и забиваем на все остальные сферы жизни типа: здоровья, отношений, хобби. Поэтому в эту тему у меня есть целых 2, must have доклада, именно про жизнь, которые как мне кажется будет дико полезно посмотреть каждому:
👉 Один из самых крутых докладов который я видел в принципе. Это наверное даже больше стендап, нежели доклад. У меня есть близкий друг, который пересматривает этот видос раз в год. На самом деле если вы в сфере IT больше пяти лет, я бы советовал прям сейчас его включить.
👉 Второй доклад примерно про ту же тему с советами по здоровью, эффективность и про то что после 30 оказывается не финишь) В нем кстати есть очень крутой совет про оценку сроков.
Это все что касается именно технических докладов. Однако чем опытнее я становлюсь, тем меня почему-то больше привлекают доклады про жизнь. Потому как разобраться в какой-то технологии ты точно сможешь и без доклада, а вот разобраться в себе, это оказывается гораздо сложнее. У меня большинство людей из окружения ITшники, внезапно. И я вижу проблему, что мы порой слишком увлекаемся работой и забиваем на все остальные сферы жизни типа: здоровья, отношений, хобби. Поэтому в эту тему у меня есть целых 2, must have доклада, именно про жизнь, которые как мне кажется будет дико полезно посмотреть каждому:
👉 Один из самых крутых докладов который я видел в принципе. Это наверное даже больше стендап, нежели доклад. У меня есть близкий друг, который пересматривает этот видос раз в год. На самом деле если вы в сфере IT больше пяти лет, я бы советовал прям сейчас его включить.
👉 Второй доклад примерно про ту же тему с советами по здоровью, эффективность и про то что после 30 оказывается не финишь) В нем кстати есть очень крутой совет про оценку сроков.
👍3🔥2❤1🤔1
Forwarded from AppFiles - Mobile Development
Image Toolbox - это приложение для обработки фотографий и графический редактор, созданное на основе современного технологического стека с использованием чистой архитектуры. В нем есть такие функции, как применение фильтров, обрезка, редактирование EXIF, выбор качества и типа выходного изображения, а также множество других возможностей. Внутри Kotlin, корутины, Flow, Accompanist, Hilt, Coil, Compose Navigation Reimagined, Jetpack в разных проявлениях.
Image Toolbox на GitHub: https://github.com/T8RIN/ImageToolbox
Платформа: Android
⭐️: 748
Image Toolbox на GitHub: https://github.com/T8RIN/ImageToolbox
Платформа: Android
⭐️: 748
🤔4❤2🔥1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Вышел Kotlin 1.9.20
📺 Видео обзор (EN, 13 мин)
Kotlin Multiplatform (KMP)
🎉 Стабильный Kotlin Multiplatform 🎉
👉 IDE Новый шаблон с иерархией для настройки KMP проектов
👉 IDE Новый wizard создания проекта
👉 Полная поддержка Gradle Cache в KMP
👉 Пооддержка compile кэша для Kotlin/Native в Compose Multiplatform
Kotlin/JVM
👉 Поддержка генерации байткода JVM 21
K2 компилятор
👉 K2 компилятор в Beta для всех таргетов (включая Kotlin/Wasm)
👉 kapt стал поддерживать K2
Kotlin/Native
👉 Custom memory allocator теперь работает по умолчанию в Kotlin/Native
👉 Улучшение производительности Garbage Collector в kotlin/Native
👉 Удаление старого менеджера памяти
👉 Удалили deprecated target-ы
Wasm
👉 Новый таргет для Kotlin/Wasm - wasm-wasi поддерживат свежий Wasm GC
👉 WASI API в KotlinWasm stdlib
stdlib
👉 Появились generic функции для работы с Enum
👉 stdlib Kotlin.Native стала Stable
Больше читайте в официальном релизе
📺 Видео обзор (EN, 13 мин)
Kotlin Multiplatform (KMP)
🎉 Стабильный Kotlin Multiplatform 🎉
👉 IDE Новый шаблон с иерархией для настройки KMP проектов
👉 IDE Новый wizard создания проекта
👉 Полная поддержка Gradle Cache в KMP
👉 Пооддержка compile кэша для Kotlin/Native в Compose Multiplatform
Kotlin/JVM
👉 Поддержка генерации байткода JVM 21
K2 компилятор
👉 K2 компилятор в Beta для всех таргетов (включая Kotlin/Wasm)
👉 kapt стал поддерживать K2
Kotlin/Native
👉 Custom memory allocator теперь работает по умолчанию в Kotlin/Native
👉 Улучшение производительности Garbage Collector в kotlin/Native
👉 Удаление старого менеджера памяти
👉 Удалили deprecated target-ы
Wasm
👉 Новый таргет для Kotlin/Wasm - wasm-wasi поддерживат свежий Wasm GC
👉 WASI API в KotlinWasm stdlib
stdlib
👉 Появились generic функции для работы с Enum
👉 stdlib Kotlin.Native стала Stable
Больше читайте в официальном релизе
🔥4👍2🤔1
Forwarded from AppFiles - Mobile Development
This media is not supported in your browser
VIEW IN TELEGRAM
Что будет если команда, не видавшая Compose, решила делать новую сложную фичу на нём?
Меня зовут Дмитрий Максимов, я Android разработчик в Dodo Engineering. Больше 2-х лет я пробовал Jetpack Compose в пет-проектах, но хотелось прокачать свои знания по полной и попробовать фреймворк в настоящем проде. В этой статье расскажу, как мы сделали сложный Compose экран с нестандартным скроллом и снаппингом контента.
Статья: https://habr.com/ru/companies/dododev/articles/764540/
Платформа: Android
Меня зовут Дмитрий Максимов, я Android разработчик в Dodo Engineering. Больше 2-х лет я пробовал Jetpack Compose в пет-проектах, но хотелось прокачать свои знания по полной и попробовать фреймворк в настоящем проде. В этой статье расскажу, как мы сделали сложный Compose экран с нестандартным скроллом и снаппингом контента.
Статья: https://habr.com/ru/companies/dododev/articles/764540/
Платформа: Android
👍2🔥2🤔1
Forwarded from Android Security & Malware
Media is too big
VIEW IN TELEGRAM
Bluetooth LE spam attack is now ported to dedicated Android app to push notifications for Android and Windows
For Android, is can advertise over 170 devices
https://github.com/simondankelmann/Bluetooth-LE-Spam
For Android, is can advertise over 170 devices
https://github.com/simondankelmann/Bluetooth-LE-Spam
👍4🤔2🤯2
Forwarded from Мобильное Чтиво
Каждому свой кеш, или ExoPlayer убил HTTP Cache.
Я люблю делиться не только крутыми штуками, которые мы сделали, но и косяками. Раньше я думал, что рассказывать про косяки не круто, засмеют. Но теперь твердо уверен, что это классная вещь.
Мы на проекте используем HTTP Cache, который идет из коробки в OkHttp.
И на днях выяснилось, что наш HTTP Cache ничего не кеширует! Вообще ничего и никогда. Хоть что угодно сервер шлет нам в заголовке Cache-control.
Я перерыл кучу причин почему так может быть. Ковырял исходники OkHttp, искал причины в файловой системе, размере файлов, пермишеннов...
Оказалось, что ошибка в стуктуре папок кешей. Она у нас выглядела так:
[cache]
┣━ [http_cache]
┣━ [images_cache]
┣━ и тут в корне место для exo кеша
Я посмотрел исходники SimpleCache. Оказывается, что он удаляет всё, что ему не нравится в своей папке! В документации так и написано:
Ошибка была внедрена, когда мы добавляли ExoPlayer и кеш к нему, и сделали это невнимательно.
В итоге у нас не работал HTTP Cache почти полтора года!🤦♂️
Какой вывод нужно сделать, кроме того, чтобы быть внимательнее?
А вот такой:
Каждому компоненту нужен свой кеш. Если ты даёшь компоненту директорию под кеш, то значит ты отдаешь ему “владение” этим место. Будь готов, что этот компонент сделает в этой директории всё, что ему нужно. В том числе удалить другие твои файлы.
#cache #http #exoplayer
Я люблю делиться не только крутыми штуками, которые мы сделали, но и косяками. Раньше я думал, что рассказывать про косяки не круто, засмеют. Но теперь твердо уверен, что это классная вещь.
Мы на проекте используем HTTP Cache, который идет из коробки в OkHttp.
И на днях выяснилось, что наш HTTP Cache ничего не кеширует! Вообще ничего и никогда. Хоть что угодно сервер шлет нам в заголовке Cache-control.
Я перерыл кучу причин почему так может быть. Ковырял исходники OkHttp, искал причины в файловой системе, размере файлов, пермишеннов...
Оказалось, что ошибка в стуктуре папок кешей. Она у нас выглядела так:
[cache]
┣━ [http_cache]
┣━ [images_cache]
┣━ и тут в корне место для exo кеша
SimpleCacheЯ посмотрел исходники SimpleCache. Оказывается, что он удаляет всё, что ему не нравится в своей папке! В документации так и написано:
The cache will delete any unrecognized files from the directory. Hence the directory cannot be used to store other files.
Ошибка была внедрена, когда мы добавляли ExoPlayer и кеш к нему, и сделали это невнимательно.
В итоге у нас не работал HTTP Cache почти полтора года!
Какой вывод нужно сделать, кроме того, чтобы быть внимательнее?
А вот такой:
Каждому компоненту нужен свой кеш. Если ты даёшь компоненту директорию под кеш, то значит ты отдаешь ему “владение” этим место. Будь готов, что этот компонент сделает в этой директории всё, что ему нужно. В том числе удалить другие твои файлы.
#cache #http #exoplayer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2😱1
Forwarded from iOS Broadcast (Андрей Зонов)
Пятница - самое время рассмотреть очередной кросплатформенный движок. По-началу, когда я о нем услышал, мысленно закопал. Но потом понял что идея вполне жизнеспособна:
🔥 Полный натив для iOS, в отличии от большинства движков (Flutter, Compose Multiplatform). Look&Feel из коробки. SwiftUI на iOS и Compose на Andoid
🔥 Нет отдельного языка или новых концепций как с React Native или Xamarin
🔥 Нет проблем с ARC - код изначально пишется на Swift+SwiftUI
🔥 Исходники Kotlin, которые генерятся движком, могут быть не только просмотрены но и отредактированы
Не все так просто, даже если опустить вендорлок:
💩Поддержка языка ограничена, нужно думать какие конструкции можно использовать
💩Нативные компоненты прийдется писать свои или адаптировать сильно транспилированный код
💩В качестве БД прийдется использовать прямые обращения к sqlite
Почему я думаю, что это может взлететь?
💸Стартапы часто начинают с iOS-only приложения, которые пишут на самых актуальных инструментах, а это способ быстрее получить аналог на Android и проверить интерес
💸Проще найти разработчика который умеет писать нативный код для iOS и адаптирует его под Android
Можно поступить мудро, и посмотреть взлетит ли этот подход через пару лет, ведь если долго сидеть на берегу реки, то можно увидеть, как мимо проплывёт труп твоего врага 😀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔2🔥1
Forwarded from Полуночные Зарисовки
Telegraph
Как запустить активность без регистрации (и SMS) в манифесте?
Читал тут интервью Максима Сидорова. Классное интервью крутого специалиста. Особенно полезны были обсуждения по поводу собеседований. Мне как-то довелось даже пару раз провести с ним собес вторым номером. И в этом интервью был пример вопроса по поводу основных…
👍2🔥2😱2
Forwarded from Kotlin Adept Notes (Alex Panov)
VPN, который не заблокируют
🌐 Ни для кого не секрет, что сейчас все больше протоколов VPN подвергается блокировке — это и WireGuard, и OpenVPN, и другие, но решение есть!
Причём собрать свое мобильное приложение с VPN, которое не боится блокировок достаточно легко. Для этого нам потребуется связка WireGuard + xRay.
Принцип работы
😀 xRay — это прокси-сервер, который умеет маскировать трафик под браузерный (TLS). Нам лишь нужно запустить VPN туннель и весь трафик пропускать через него.
Пример на Android
😀 Запускаем xRay с переданной конфигурацией. В
😀 Подготавливаем VpnService, чтобы ваше приложение могло создавать VPN туннель.
😀 Поднимаем VPN туннель. Внутри конфига в Endpoint указываем localhost, чтобы весь трафик шел в xRay.
Как видим реализовать свое приложение для VPN с данными либами довольно не сложно🤔 . И так как эти либы написаны на Go, мы их можем запустить где угодно, будь то Android, iOS или любая другая платформа.
Если у вас остались вопросы и тема заинтересовала, то пишите комменты, попробую помочь, чем смогу👇
Причём собрать свое мобильное приложение с VPN, которое не боится блокировок достаточно легко. Для этого нам потребуется связка WireGuard + xRay.
Принцип работы
Пример на Android
inbounds указываем входящий трафик от WireGuard с localhost и протоколом dokodemo-door, а в outbounds исходящий трафик на ваш сервер, тут можно использовать либо облегченный протокол vless, либо полноценный протокол с шифрованием vmess.
LibXray.runXray("", configFile.absolutePath, 0)
GoBackend.VpnService.prepare(context)
val backend = GoBackend(applicationContext)
val tunnel: Tunnel = WireGuardTunnel() // Ваш класс, реализующий интерфейс Tunnel
val config: Config = ... // Ваш конфиг для WireGuard
backend.setState(tunnel, Tunnel.State.UP, config) // Обязательно вызывать с фонового потока
Как видим реализовать свое приложение для VPN с данными либами довольно не сложно
Если у вас остались вопросы и тема заинтересовала, то пишите комменты, попробую помочь, чем смогу👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🤯4😎2🤨1
We Love Android
Photo
В 2014 году наши приложения содержали десятки, а то и сотни активити. Мы не особо боялись писать весь код в одной активити. Использовать асинк таски не считалось чем-то зазорным, а для навигации между экранами с легкостью раскидывали интенты. Джавой полнились наши сердца.
В 2017 количество активити в проекте стало стремительно падать, фрагменты заполняли пустоты в сердцах андроид-разработчиков. Кругом мвп архитектуры со всякими мосби и мокси наперевес. Обмазались эрыкс джавой. Для навигации подсели на чичероне или делали собственные обёртки над фрагмент менеджером. В тот момент казалось, что ты не можешь называться андроид-разработчиком, если не написал собственную библиотеку для навигации.
2020 - расцвет эпохи сингл активити и клина, наши репозитории успешно проксируют дата сорсы, а юзкейсы проксируют репозитории. Флоу фрагменты ловко жонглируют дочерними фрагментами, а на людей с больше, чем одной активити в проекте, начинаем смотреть с недоверием. Наши мввм архитектуры полны лайвдат, и мы их с гордостью слушаем. Джаву постепенно выпиливаем, подсели на приторно сладкий мир в красивой котлин обёртке. С эрыкс джавой тоже как-то не задалось, до сих пор не мог пройти даже половину паззлеров на ютубе, а уже и не надо. Теперь-то мы обмазываемся саспендами и все больше подхейчиваем эрыксоидов, порой прямо в зеркале. С навигацией как-то тоже не задалось - затащили навигейшион компонент, выкинули, затащили навигейшион компонент, выкинули - благо всегда можно вернуться к истокам.
Идёт 2023 год, сингл активити, терминальная стадия, фрагментов не осталось, у нас теперь декларативка, мы теперь композиторы, утонченно выкрашиваем кнопки. Перебрались на эмвиай, научились в юдф, кто-то начал заваривать чай. С лайвдатой дружба закончилась, теперь мы самые близкие друзья с флоу. Все больше наших и сторонних апи стали корутин френдли. Как-то подружились с компоуз дестинейшионс, кто-то обжегся, используя вояджер.
Здесь мы находимся сейчас. Но что будет дальше? Достаточно легко представить еще одну итерацию, в которой KMM/KMP переползает в наши проекты, а архитектурные решения по типу декомпоуз найдут теплый отклик среди андроид-разработчиков. Но есть стойкое ощущение, что базис из корутин, юдф архитектур и декларативных фреймворков с нами всерьез и надолго.
Неужели наконец-таки смогли пройти андроид-разработку?
В 2017 количество активити в проекте стало стремительно падать, фрагменты заполняли пустоты в сердцах андроид-разработчиков. Кругом мвп архитектуры со всякими мосби и мокси наперевес. Обмазались эрыкс джавой. Для навигации подсели на чичероне или делали собственные обёртки над фрагмент менеджером. В тот момент казалось, что ты не можешь называться андроид-разработчиком, если не написал собственную библиотеку для навигации.
2020 - расцвет эпохи сингл активити и клина, наши репозитории успешно проксируют дата сорсы, а юзкейсы проксируют репозитории. Флоу фрагменты ловко жонглируют дочерними фрагментами, а на людей с больше, чем одной активити в проекте, начинаем смотреть с недоверием. Наши мввм архитектуры полны лайвдат, и мы их с гордостью слушаем. Джаву постепенно выпиливаем, подсели на приторно сладкий мир в красивой котлин обёртке. С эрыкс джавой тоже как-то не задалось, до сих пор не мог пройти даже половину паззлеров на ютубе, а уже и не надо. Теперь-то мы обмазываемся саспендами и все больше подхейчиваем эрыксоидов, порой прямо в зеркале. С навигацией как-то тоже не задалось - затащили навигейшион компонент, выкинули, затащили навигейшион компонент, выкинули - благо всегда можно вернуться к истокам.
Идёт 2023 год, сингл активити, терминальная стадия, фрагментов не осталось, у нас теперь декларативка, мы теперь композиторы, утонченно выкрашиваем кнопки. Перебрались на эмвиай, научились в юдф, кто-то начал заваривать чай. С лайвдатой дружба закончилась, теперь мы самые близкие друзья с флоу. Все больше наших и сторонних апи стали корутин френдли. Как-то подружились с компоуз дестинейшионс, кто-то обжегся, используя вояджер.
Здесь мы находимся сейчас. Но что будет дальше? Достаточно легко представить еще одну итерацию, в которой KMM/KMP переползает в наши проекты, а архитектурные решения по типу декомпоуз найдут теплый отклик среди андроид-разработчиков. Но есть стойкое ощущение, что базис из корутин, юдф архитектур и декларативных фреймворков с нами всерьез и надолго.
Неужели наконец-таки смогли пройти андроид-разработку?
🔥20❤6🤔4
Forwarded from Kotlin Multiplatform (Kostya)
👍2🔥2
Forwarded from Android Live 🤖
Repair IDE feature
#androidstudio
Возможно вы, как и я, не замечали фичу, которая не так давно появилась в Android Studio и IntelliJ IDEA — Repair IDE.
Иногда бывают ситуации, что Android Studio начинает бажить: отказывается собирать проект, хотя с кодом всё в порядке, ругается на кэш и т.д. У меня такое частенько бывает при переключении веток в Git.
Решение в лоб — сделать File -> Invalidate Caches с рестартом. Но вот теперь есть опция Repair IDE, которая призвана помочь по шагам восстановить состояние вашей IDE.
Я попробовал, из 4 кейсов сработало только в 2😅 . В конце всё равно предложила сделать Invalidate Caches.
Теперь у вас есть +1 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.
#androidstudio
Возможно вы, как и я, не замечали фичу, которая не так давно появилась в Android Studio и IntelliJ IDEA — Repair IDE.
Иногда бывают ситуации, что Android Studio начинает бажить: отказывается собирать проект, хотя с кодом всё в порядке, ругается на кэш и т.д. У меня такое частенько бывает при переключении веток в Git.
Решение в лоб — сделать File -> Invalidate Caches с рестартом. Но вот теперь есть опция Repair IDE, которая призвана помочь по шагам восстановить состояние вашей IDE.
Я попробовал, из 4 кейсов сработало только в 2
Теперь у вас есть +1 фича в арсенале, вдруг будет полезна. Детальнее можно почитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🤔1