Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Официальная энциклопедия от JetBrains по интеропу между Kotlin и Swift. Рассказывается как работать с разными фичами Kotlin из Swift кода
🔥3❤2
Forwarded from Mobile Native ️️
Создание и использование BOM в Gradle
В статье рассказывается про то, как можно организовать BOM (bill of materials) для управления версиями зависимостей + рассматриваются более сложные кейсы создания и использования BOM в Gradle-проектах.
👉 Зачем вообще нужен BOM?
👉 Как выглядит BOM?
👉 Когда создавать свой BOM?
👉 Что такое Rich Model и Gradle Module Metadata?
👉 Как несколько BOM сочетаются друг с другом?
👉 Управление версиями Gradle-плагинов через BOM
Читать (Ru)
В статье рассказывается про то, как можно организовать BOM (bill of materials) для управления версиями зависимостей + рассматриваются более сложные кейсы создания и использования BOM в Gradle-проектах.
👉 Зачем вообще нужен BOM?
👉 Как выглядит BOM?
👉 Когда создавать свой BOM?
👉 Что такое Rich Model и Gradle Module Metadata?
👉 Как несколько BOM сочетаются друг с другом?
👉 Управление версиями Gradle-плагинов через BOM
Читать (Ru)
👍1🔥1😱1
Forwarded from Android Live 🤖
HashMap для Jetpack Compose
#compose #performance
Интересная статья, где рассказывается про минусы стандартной HashMap в контектсте использования Jetpack Compose.
При использовании mutableMapOf() под капотом создаётся LinkedHashMap(), которая довольна хороша, но имеет недостаток: при каждом новом добавлении элемента создаётся LinkedHashMapEntry, из-за чего структура не очень memory-friendly.
Ну и сходу предлагается использовать другую структуру — ScatterMap, у которой подобных недостатков нет. В статье есть и замеры, и описывается главный недостаток этого подхода: структура хоть и map-based, но не наследуется от привычного нам Map, хотя и имеет подобные ему классы.
Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
#compose #performance
Интересная статья, где рассказывается про минусы стандартной HashMap в контектсте использования Jetpack Compose.
При использовании mutableMapOf() под капотом создаётся LinkedHashMap(), которая довольна хороша, но имеет недостаток: при каждом новом добавлении элемента создаётся LinkedHashMapEntry, из-за чего структура не очень memory-friendly.
Ну и сходу предлагается использовать другую структуру — ScatterMap, у которой подобных недостатков нет. В статье есть и замеры, и описывается главный недостаток этого подхода: структура хоть и map-based, но не наследуется от привычного нам Map, хотя и имеет подобные ему классы.
Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
👍5🔥1👀1
Forwarded from Полуночные Зарисовки
Telegraph
(Не)стандартные способы передачи больших данных в Intent
Интро Думаю не секрет, что запуская Activity или Service через Intent нам не следует передавать много данных. Если попытаемся и превысим некоторый лимит на размер данных, который обычно от 800Кб до 1000Кб, то упадем с ошибкой TransactionTooLargeException.…
🔥5👍2❤1
Forwarded from RutheniumOS
Внезапный материал про SELinux
SELinux + AOSP, или безопасности много не бывает.
https://blog.rutheniumos.ru/docs/blog/selinux_in_aosp/
SELinux + AOSP, или безопасности много не бывает.
https://blog.rutheniumos.ru/docs/blog/selinux_in_aosp/
👍4🔥2👏1
Forwarded from Дмитрий Мовчан - про IT
Мой доклад про мобильные собеседования на Mobius в открытом доступе
https://youtu.be/F0TVWXw1z2A?si=M48-HajfCfGHBBwr
https://youtu.be/F0TVWXw1z2A?si=M48-HajfCfGHBBwr
YouTube
Дмитрий Мовчан — Cracking the Mobile Interview
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
При устройстве на работу необходимо пройти собеседование, но что нас там ждет – всегда загадка. Дмитрий делится опытом собеседований по обе стороны баррикад, дает советы на тему того, как лучше подготовиться…
— —
При устройстве на работу необходимо пройти собеседование, но что нас там ждет – всегда загадка. Дмитрий делится опытом собеседований по обе стороны баррикад, дает советы на тему того, как лучше подготовиться…
🔥5👍2🤓1
Forwarded from Mobile Developer (Алексей Гладков)
Compose Cupertino
https://github.com/alexzhirkevich/compose-cupertino
Из закрытого чата подкинули крутую библиотеку для компоуза
👉 Анимации и эффекты как в нативном iOS
👉 Поддержка Decompose
👉 Обертки над компонентами для использования их из iOS
👉 Набор иконок от Apple
Это мы подключаем
https://github.com/alexzhirkevich/compose-cupertino
Из закрытого чата подкинули крутую библиотеку для компоуза
👉 Анимации и эффекты как в нативном iOS
👉 Поддержка Decompose
👉 Обертки над компонентами для использования их из iOS
👉 Набор иконок от Apple
Это мы подключаем
GitHub
GitHub - alexzhirkevich/compose-cupertino: Compose Multiplatform UI components for iOS (Cupertino Widgets)
Compose Multiplatform UI components for iOS (Cupertino Widgets) - alexzhirkevich/compose-cupertino
🤡6😱3👍1
Forwarded from Android Guards
Бесконечно можно смотреть на три вещи: как горит огонь, как течет вода, и как выходит очередная статья про ssl pinning. Но на этот раз я попробовал посмотреть на этот вопрос с точки зрения необходимости применения этой технологии в мобильных приложениях. Для этого я смоделировал сценарий, когда на устройство пользователя попадает сертификат злоумышленника, и как себя в этом случае начинают вести разные компоненты мобильного приложения в зависимости от настроек безопасности.
(не)Уникальный опыт
Святая корова SSL Pinning-а
Еще раз про MITM в Android
🔥4👍2😱1
Forwarded from Mobile Compose (Dmitriy Grigoriev)
#News #Release #Compose
Fragment Compose Artifact
В результате последнего обновления Jetpack библиотек, среди прочего, появился новый артефакт fragment-compose. Основной его задачей является поддержание проектов, которые находятся в процессе миграции с "Compose на фрагментах" на "full Compose" архитектуру.
На данный момент единственной его фичей является extension метод content, который избавляет от необходимости создавать ComposeView и выставлять нужный ViewCompositionStrategy.
Fragment Compose Artifact
В результате последнего обновления Jetpack библиотек, среди прочего, появился новый артефакт fragment-compose. Основной его задачей является поддержание проектов, которые находятся в процессе миграции с "Compose на фрагментах" на "full Compose" архитектуру.
На данный момент единственной его фичей является extension метод content, который избавляет от необходимости создавать ComposeView и выставлять нужный ViewCompositionStrategy.
👍7🔥1🫡1
Forwarded from По-явански
:slowpoke: шикарный доклад про нутрянку корутин и способы их применения помимо асинхронности.
🟢 Разбор примитивов корутин из Kotlin stdlib
🟢 Как устроены билдеры вида
🟢 Глубокая рекурсия без отрыва стека
🟢 Парсеры
Friendly reminder разработчикам Kotlin:
⚫️ сиквенс — это бесполезная обёртка над итератором (в Rust её нет — компилятору легче оптимизировать и разворачивать длинные конструкции вида iter.map.filter.etc)
⚫️
⚫️ в очередной раз не хватает «:: наоборот» —
Friendly reminder автору:
🟡 скоуп билдера должен быть
🟡 пожалуйста, не надо
Friendly reminder для организаторов:
💡 существуют нейросеточные плагины для убирания чвякания из речи
🟢 Разбор примитивов корутин из Kotlin stdlib
🟢 Как устроены билдеры вида
sequence { yield() }🟢 Глубокая рекурсия без отрыва стека
🟢 Парсеры
Friendly reminder разработчикам Kotlin:
⚫️ сиквенс — это бесполезная обёртка над итератором (в Rust её нет — компилятору легче оптимизировать и разворачивать длинные конструкции вида iter.map.filter.etc)
⚫️
DeepRecursiveScope.callRecursive стоило бы назвать invokeRecursive, консистентно с invoke и invokeSuspend, зашитыми в язык⚫️ в очередной раз не хватает «:: наоборот» —
fun smth() by DeepRecursiveFunction {}Friendly reminder автору:
🟡 скоуп билдера должен быть
@RestrictsSuspension🟡 пожалуйста, не надо
data-классовFriendly reminder для организаторов:
💡 существуют нейросеточные плагины для убирания чвякания из речи
YouTube
Coroutines Beyond Concurrency by Alex Semin
Recording brought to you by American Express. https://americanexpress.io/kotlin-jobs
Kotlin coroutines are most known as an elegant and modern solution for managing asynchronous work. But due to their versatile design, coroutines can also be helpful for…
Kotlin coroutines are most known as an elegant and modern solution for managing asynchronous work. But due to their versatile design, coroutines can also be helpful for…
👍4🔥1
Forwarded from Invalidate cache & restart (Alexey Bykov)
Весь прошлый год я плотно работал с ExoPlayer и решил написал статью про это.
Что внутри?
- Как ускорить процесс загрузки
- Как улучшить разрешение
- Как предотвратить ошибки воспроизведения
- Ловушки и уроки
- Производительность с Jetpack Compose
- Влияние улучшений на продуктовые метрики
Что внутри?
- Как ускорить процесс загрузки
- Как улучшить разрешение
- Как предотвратить ошибки воспроизведения
- Ловушки и уроки
- Производительность с Jetpack Compose
- Влияние улучшений на продуктовые метрики
Reddit
From the RedditEng community on Reddit
Explore this post and more from the RedditEng community
🔥8👍3
Forwarded from Разработка ждёт балета
Вот обосрались, так обосрались! Даже жалко. Не так давно Google выкатили обновление Play (которое, как мы знаем, ставится автоматом, в обход всего). Обновление оказалось с приколом, часть пользователей получили нерабочие Pixel смартфоны. И кажется, пока не нашлось ни одного способа решить проблему удаленно на стороне Гугла. Вместо этого они где-то в третьей жопе своих форумов предлагают нормальным людям поставить ADB и повыполнять разного в терминальчике. Причем описан только golden path (в обоих, сука, смыслах: и когда все идет хорошо, и когда «спасибо, что только обоссали»), про приколы работы ADB в разных окружениях людям, видимо, придется расспрашивать Gemini.
#google #pixel #bug
#google #pixel #bug
😢6😁4😱2
Forwarded from Android Security & Malware
Analysis of Android settings during a forensic investigation
https://blog.digital-forensics.it/2024/01/analysis-of-android-settings-during.html
https://blog.digital-forensics.it/2024/01/analysis-of-android-settings-during.html
blog.digital-forensics.it
Analysis of Android settings during a forensic investigation
DFIR research
🤔2👍1
Forwarded from Android Good Reads (Антон)
DIY: Твоя собственная библиотека для инъекции зависимостей
Лучший способ понять, какая библиотека для инъекции зависимостей вам нужна, — начать писать свою! Автор пишет DI-библиотеку и применяет ее на достаточно простом, но прикладном кейсе.
👉 Анти-паттерн. Если вы протаскиваете зависимость через десятки классов, только ради использования в последнем
👉 Автор изобретает заново шаг за шагом Google Guice, затем Dagger 1 и в конечном счете Dagger 2. Достаточно показательно, как приходили к существующим решениям в библиотеках
👉 Интересно было посмотреть, как генерируются factory-классы через KSP
👉 Красивая работа с аннотациями, которую можно рассматривать в отрыве от статьи
А что вы используете в проекте?
Лучший способ понять, какая библиотека для инъекции зависимостей вам нужна, — начать писать свою! Автор пишет DI-библиотеку и применяет ее на достаточно простом, но прикладном кейсе.
👉 Анти-паттерн. Если вы протаскиваете зависимость через десятки классов, только ради использования в последнем
👉 Автор изобретает заново шаг за шагом Google Guice, затем Dagger 1 и в конечном счете Dagger 2. Достаточно показательно, как приходили к существующим решениям в библиотеках
👉 Интересно было посмотреть, как генерируются factory-классы через KSP
👉 Красивая работа с аннотациями, которую можно рассматривать в отрыве от статьи
А что вы используете в проекте?
👍2🤝1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Jake Wharton решил исследовать как лучше делать маппинг набора значений в одну строку и какую лучше выбрать реализацию для этого по скорости/памяти. Массивы с лямбдой инициализации значений будут довольно полезны
#performance
#performance
👍7🔥1
Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
Device streaming в Android Studio стал доступен всех теперь находится в стадии открытой альфа-версии! Это означает, что вы можете получить доступ к сервису без регистрации в программе раннего доступа. Просто загрузите последнюю версию Canary версию Android Studio и привяжите проект Firebase.
Device Streaming позволяет тестировать приложения на реальных устройствах Android от различных производителей, расположенных в центрах Google, и все это прямо из Android Studio. Сервис можно использовать бесплатно пока он не вышел из Альфа статуса.
#androidstudio #firebase #testing
Device Streaming позволяет тестировать приложения на реальных устройствах Android от различных производителей, расположенных в центрах Google, и все это прямо из Android Studio. Сервис можно использовать бесплатно пока он не вышел из Альфа статуса.
#androidstudio #firebase #testing
🔥6👍1
Forwarded from Android Good Reads (Anton Kondratiuk)
Обновление приложения до targetSdk 34
Обязательное обновление targetSdkVersion ожидается, предположительно, в августе этого года. Добавляем задачку в беклог ближайшего спринта и не переживаем о предупреждениях из Google Play
👉 Если вы используете foreground сервисы, то для них появился foregroundServiceType, который нужно будет определить в манифесте
👉 Обновление Android привело к обновлению OpenJDK до 17. А это значит что могло сломаться: регулярные выражения, ProGuard и десериализация UUID.
👉 При использования BluetoothAdapter.getProfileConnectionState требуется BLUETOOTH_CONNECT (Должен быть и в манифесте и запрашиваться в рантайме)
👉 Ограничения для Intent. Тщательно проверьте, как используется android:exported в ваших приложениях. Неявный Intent может быть отправлен только к android:exported="true”
👉 У BroadcastReceiver новый параметр - ContextCompat.RECEIVER_EXPORTED. Добавляем его в зависимости от того, как вы с ним работаете
👉 Динамически подгружаемый код должен быть помечен как readOnly перед использованием
👉 Ограничения на работу с ZipFile. Теперь будет кидаться ошибка, если в имени есть модификаторы пути до файла ".." или "/".
👉 Расширение ограничений при запуске приложений в фоне. Добавляем еще один параметр в PendingIntent.
В целом, ассистент миграции поможет вам перевести приложение на новое SDK, но лучше самостоятельно проверить, что все упомянутые моменты были переведены верно, иначе рискуете получить неверное поведение приложения или просто краш
Обязательное обновление targetSdkVersion ожидается, предположительно, в августе этого года. Добавляем задачку в беклог ближайшего спринта и не переживаем о предупреждениях из Google Play
👉 Если вы используете foreground сервисы, то для них появился foregroundServiceType, который нужно будет определить в манифесте
👉 Обновление Android привело к обновлению OpenJDK до 17. А это значит что могло сломаться: регулярные выражения, ProGuard и десериализация UUID.
👉 При использования BluetoothAdapter.getProfileConnectionState требуется BLUETOOTH_CONNECT (Должен быть и в манифесте и запрашиваться в рантайме)
👉 Ограничения для Intent. Тщательно проверьте, как используется android:exported в ваших приложениях. Неявный Intent может быть отправлен только к android:exported="true”
👉 У BroadcastReceiver новый параметр - ContextCompat.RECEIVER_EXPORTED. Добавляем его в зависимости от того, как вы с ним работаете
👉 Динамически подгружаемый код должен быть помечен как readOnly перед использованием
👉 Ограничения на работу с ZipFile. Теперь будет кидаться ошибка, если в имени есть модификаторы пути до файла ".." или "/".
👉 Расширение ограничений при запуске приложений в фоне. Добавляем еще один параметр в PendingIntent.
В целом, ассистент миграции поможет вам перевести приложение на новое SDK, но лучше самостоятельно проверить, что все упомянутые моменты были переведены верно, иначе рискуете получить неверное поведение приложения или просто краш
Android Developers
Behavior changes: Apps targeting Android 14 or higher | Android Developers
Learn about changes in Android 14 that will affect apps when they target Android 14 or higher.
👍6❤3🔥2💩1
Forwarded from Mobile Developer (Алексей Гладков)
ИИ для создания дизайнов
https://www.usegalileo.ai/
Не могу не написать про это (хотя про это уже много где говорили). Одним из способов научиться делать аппки является (шок!) делать эти самые аппки. Но часто людям нужен дизайн, чтобы была некая предметная область что накидать. Другая тема свои пет проекты или стартапы. Раньше я советовал для этого UI8.net, но теперь появился игрок покруче
👉 Это можно попробовать бесплатно
👉 Оно очень хорошо понимает запрос и генерит дизайн просто пушечно
🔥 Экспорт в фигму!!
👉 Можно редактировать каждый экран отдельно и даже докидывать, сохраняя контекст
👉 Можно делать мобильную и десктопную версии
Короче, из всех ИИ это вот точно мастхэв инструмент для любого фронтового разработчика
P.S. За эту рекламу мне никто не заплатил, так что это не реклама, а рекомендация
https://www.usegalileo.ai/
Не могу не написать про это (хотя про это уже много где говорили). Одним из способов научиться делать аппки является (шок!) делать эти самые аппки. Но часто людям нужен дизайн, чтобы была некая предметная область что накидать. Другая тема свои пет проекты или стартапы. Раньше я советовал для этого UI8.net, но теперь появился игрок покруче
👉 Это можно попробовать бесплатно
👉 Оно очень хорошо понимает запрос и генерит дизайн просто пушечно
👉 Можно редактировать каждый экран отдельно и даже докидывать, сохраняя контекст
👉 Можно делать мобильную и десктопную версии
Короче, из всех ИИ это вот точно мастхэв инструмент для любого фронтового разработчика
P.S. За эту рекламу мне никто не заплатил, так что это не реклама, а рекомендация
Please open Telegram to view this post
VIEW IN TELEGRAM
Stitch
Stitch - Design with AI
Stitch generates UIs for mobile and web applications, making design ideation fast and easy.
🔥3👍2👏1
Forwarded from Android Good Reads (Anton Kondratiuk)
ViewModel и вообще весь пакет Lifecycle теперь в Compose Multiplatform.
Их так же переписали на Kotlin, поэтому все зависимости
*-ktx переехали в основные библиотекиА еще теперь больше возможностей для написание тестов приложениям с поддержкой нескольких экранов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥2👍1
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
PriorityDispatcher - CoroutineDispatcher, который работает на основе приоритетов. Проблема с том, что задать приоритет для корутины не получится в рамках единого Dispatcher. Создаются отдельные с с заданным приоритетом
#coroutines
#coroutines
🤯7👎3👍1😱1