We Love Android
Open in Telegram
655
Subscribers
No data24 hours
+17 days
+2430 days
Posts Archive
Repost from Mobile Compose
#Tools #Compose
Jetpack Compose SVG to Compose converter
Появился онлайн конвертер SVG файлов (можно загрузить как SVG код так и файл целиком) в Composable функции. В некоторых кейсах вполне полезный инструмент.
Repost from Android Good Reads
Разбор новых фичей Figma
👉Переменные, которые могут представлять цвета, размеры, эффекты, типографику и локализованные строки.
👉Новые настройки автолейаута, с помощью которых можно прямо в Figma делать адаптивный дизайн.
👉Новый Developer Mode, который позволяет готовить экраны для передачи их разработчикам.
👉Песочница компонентов, в которой дизайнер может легко переключать разные настройки экспортируемых компонентов и смотреть, как они себя ведут в граничных состояниях.
👉Поддержка в VSCode для работы с макетом прямо в IDE.
👉Плагины для экспорта дизайна в код на любом фреймворке.
Repost from Invalidate cache & restart
Gradle и аббревиатуры
Недавно обнаружил, что Gradle позволяет использовать сокращённые названия тасок. Может быть даже одна буква, при отсутствии конфликтов.
Выглядит полезным. Однако, не используйте это в скриптах, чтобы никого не запутать.
Repost from Kotlin Multiplatform Broadcast
Вышел Kotlin 1.9.0
👉 Kotlin K2 комплиятор в Beta для JVM (Compose и KSP пока еще не поддерживают его). Теперь работает kapt с K2
👉 Новое свойство
entries для enum class на замену values(). Лучше скорость работы и современный синтаксис. Подробности тут
👉 Стабильные data object
👉 Поддержка secondary constructor в inline value классах
👉 Превью нового механизма выделения памяти для объектов в Kotlin/Native
👉 Улучшения в Kotlin Multiplatform для работы с Android
#kotlinRepost from Android Live 🤖
Обзор уязвимостей Positive Hack Days
#security
Отдельное место у меня занимают статьи, которые рассказывают о лучших практиках безопасности Android-приложений: ведь даже если приложение будет с идеальным UI-UX, но будет иметь дыры в безопасности, то вся работа может свестись на нет. 🥴
Вот вам отличный список-обзор уязвимостей с недавнего Positive Hack Days: рекомендую сделать овервью своего приложения, вдруг найдёте что-то подобное.
Тут и
exported=true для WebViewActivity, и проблемы в дебаг-панели, и вход без PIN-кода в приложение через виджет... в общем, есть на что обратить внимание. 👌Repost from Kotlin Multiplatform Broadcast
Стал доступен плагин Kotlin Notebook для IDEA - интерактивный инструмент, позволяющий комбинировать код, визуализации и текст в одном документе. Вы сможете быстро прототипировать, анализировать и работать с данными.
Если видите полезное применение в своей работе - делитесь в комментариях
#tooling
Repost from Compose Broadcast
Сравнение Flutter, Jetpack Compose и SwiftUI при решение одинаковых задач. Изучайте тут
Repost from Mobile Development by AppTractor
Вероятно Twitter заDDOSил сам себя
Последние два дня Илон Маск утверждал, что Twitter подвергается атаке со стороны "нескольких сотен организаций", которые осуществляют "ЭКСТРЕМАЛЬНЫЙ уровень извлечения данных". Это вынудило компанию экстренно включить "большое количество серверов" и принять чрезвычайные меры.
1. В выходные Twitter начал блокировать доступ к Twitter всем вышедшим из системы, требуя входа в систему для просмотра любого твита или профиля. Маск назвал это "временной чрезвычайной мерой".
2. Очевидно, это не остановило наплыв трафика, и Twitter ограничил количество твитов, которые вы можете просматривать.
3. Сразу же пользователи Twitter начали видеть сообщения "Rate Limit Exceeded".
4. Неужели компании, занимающиеся разработкой искусственного интеллекта, обрушили соцсеть? Возможно, да. А возможно и нет.
5. Само веб-приложении Twitter постоянно отправляет запросы в Twitter в бесконечном цикле. "Это уморительно. Похоже, что Твиттер сам себя заDDOSил". Twitter отправляет около 10 запросов в секунду, пытаясь получить контент, который никогда не приходит. Вероятно, это создало адские условия, которые инженеры даже не предполагали, и поэтому мы получаем эту комедию ошибок, приводящую к самой эпической самоликвидации - само-DDOS.
6. С другой стороны в настоящее время неизвестно, когда этот баг появился и насколько сильно он влияет на трафик, поэтому трудно определить, этот баг вдохновил Twitter заблокировать незарегистрированный доступ и добавить ограничения скорости, или же баг был спровоцирован развертыванием этих изменений.
И что: было бы забавно, если бы эта "чрезвычайная ситуация" от начала и до конца была вызвана ошибкой, в результате которой Twitter сам себе устроил DDOS, породив все эти "интересные" решения 🤡
Repost from Локалхост (Никита Куликов)
Опубликовали мое выступление на Mobius. Теперь оно доступно на Ютубе всем желающим:
https://youtu.be/htWzdvht0Qg
И ещё выступление где я был приглашенным экспертом - про Lobzik: https://youtu.be/8BB5Qa1O5TM
Repost from iOS Makes Me Hate
Игры, в которые играют люди на собесах
Тема собесов интересна всем. Рынок адаптируется и меняется каждые пол года, а каждые 5 лет меняется почти полностью. Очень важно понимать игру с обоих сторон.
Доклад от опытного интервьюера, который собрал модели поведения как кандидатов, так и интервьюеров.
Repost from Android Broadcast
Инструкция (4 мин) по созданию циферблата с Google Pixel Watch с использованием Compose и Canvas API
Исходный код тут
#compose
Repost from Android Broadcast
Команда Ozon стоклнулась с проблемой скорости работы Jetpack Compose. Все это они решили, выработали практики и теперь делятся ими в статье (28 мин):
👉 Разберитесь как работает отрисовка и обновление UI в Compose
👉 Правильно выставляйте аннотации @Stable и @Immutable
👉 Правильно готовьте лямбды (не ссылку на метод) через remember
👉 Оптимизируйте функции, так чтобы они были пропускаемые в рекомпозиции
👉 Уменьшайте область рекомпозиции
👉 Быстрые вычисления при смене состояния
👉 Оптимально реализуйте собственные layout
👉 Не менять состояние, которое только что обновилось
👉 Занимайтесь отладкой и профилированием
#compose #performance
Repost from Разработка ждёт балета
Вау, просто вау. В комментарии в сорцах SQLite обнаружилась потрясающая история: для временных файлов пришлось по умолчанию использовать префикс "etilqs_" (SQLite наоборот), потому что McAfee засирали юзерам temp папку, а юзеры находили контакты разработчиков SQLite и названивали им с жалобами.
#sqlite #db #humor
Repost from Mobile Native ️️
Android Data Repository — A simple pattern that we often misunderstand
Статья про паттерн репозиторий, как он должен выглядеть и чего там делать не стоит.
👉 Don’t use JSON/SQL model in the Repository methods
👉 Repository is not a group of backend endpoints
👉 Repository is not a database table
👉 Not every Repository needs a Data Source
Читать (En)
Repost from Mobile Developer
Набор маленьких анимаций в Jetpack Compose [EN]
https://rodrigomartind.medium.com/the-art-of-small-animations-in-android-with-jetpack-compose-566caa94deba
Просто прикольные визуальные эффекты для вашей библиотеки
👉 Эффект нажатия
👉 Эффект колокольчика
👉 Эффект сжатия
👉 и еще пару эффектов
Repost from Dev Easy Notes
Хочу оформить главные, можно назвать их заповедями тестирования или постулатами, называйте как хотите. Я уже в разработке почти 6 лет и вот весь мой опыт, который есть на данный момент можно оформить так:
Зачем тесты?
👉 Тесты не избавляют от багов, не делают программу надежнее и не заставляют тебя писать чистый код. Тесты нужны лишь убедится, что ты новым кодом не сломал предыдущий, позволяют не оглядываться назад на каждом шагу
👉 Тесты имеют смысл только в том случае, если они постоянно запускаются на CI и блокируют МРы, иначе это бессмысленная трата времени, плавали знаем
👉 Тест плох, если он падает постоянно, на него перестают обращать внимания и забивают
👉 Тест плох если всегда проходит, значит он нихрена не тестирует
👉 Тест пишем только тогда, когда уверены, что нет другого механизма обеспечить качество (см. прошлые посты)
👉 Флакающие/мигающие тесты, от таких тестов нужно избавляться также быстро как гугл отказывается от проектов. Мигающие тесты приносят целый ворох проблем: не дают никакой информации, нагружают систему т.к приходится их перезапускать, и увеличивают вероятность оказаться вне поля зрения.
Как не нужно тестировать?
👉 Не нужно писать тесты для банальных вещей когда у вас репозиторий тупо в сеть ходит и выдает список или проверять правильно ли мы вызываем какой-то метод
👉 Не нужно делать тесты, которые протестируют все возможные кейсы на свете. Сосредоточтесь на базовых сценариях, для всего остального есть мониторинг, поддержка и грамотный подход к ошибкам
👉 Конкретно в мобильной разработке, нахер не нужны тесты которые тестируют цвета, иконки, правильность отображения или не дай бог анимации. Такие тесты ебанутся какие дорогие, а выхлоп от них никакущий.
👉 Не нужно делать тестов на "всякий случай", нужно чтобы у каждого теста было четкое обоснование зачем он нужен
👉 Попытки добится какого либо процента покрытия кода бессмысленная дроч, которая ничего не дает, а только вынуждает идти на хаки и писать тесты на сэтеры (кринж даже от упоминания)
Как лучше тестировать?
👉 Тесты не должны ломаться при рефакторинге, и быть обузой. Иначе разрабы просто будут боятся рефакторить код, а это приведет к протуханию кода
👉 Тесты должны писаться также легко как и основной код
👉 В тестах может быть дублирование, так как избавление от дублирование это уже абстракция, абстракция это сложно, а сложность ведет к багам. Вам нужны баги еще и в тестах?
👉 Ассинхронность. Как показывает практика лучше ничего не подменять и тестировать в условиях реальной работы. Иначе в тестах на одном потоке все прекрасно, а в проде гонка и плавающие баги (см. подход из предыдущего поста).
👉 Тесты могут потребовать изменения в архитектуре или инфраструктуре, это ок так и должно быть. Однако внутри кода проекта не должно быть упоминаний о тестах: @visiblefortesting или idling в коде проекта это сигнал о том, что вы профакапились с архитектурой
Repost from AppFiles - Mobile Development
Clock of Clocks - анимированные часы, сделанные с помощью Jetpack Compose.
Clock of Clocks на GitHub: https://github.com/khoa-omega/clock-of-clocks
Платформа: Android
⭐️: 22
Repost from Android Guards
Если для эксплуатации уязвимости нужно передать
Parcelable класс в intent-е, то есть пара способов это сделать. Представим, что activity ожидает модель User, которая лежит в пакете com.myapp.xxx. Можно создать в эксплойте такую же структуру пакетов, и класс с таким же названием и необходимыми полями. Чтобы не писать реализацию сериализации руками, то можно воспользоваться плагином и добавить к созданному классу аннотацию @Parcelize. Но иногда классы бывают сложными или их требуется несколько сразу. В этом случае проще взять из целевого приложения .dex файлы с этими классами, положить их в assets и работать с ними через DexClassLoader. Пример здесь.
#ahtСуществует отличный вариант украсить заголовки страниц в приложении при перелистывании. Предлагаем вам туториал — изучайте 😎
Читать статью
#новостиproglib
