We Love Android – Telegram
We Love Android
630 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Начинаем работу с Detekt, статическим анализатором кода для Android

Как вы знаете, процесс code review занимает все больше времени по мере роста команды разработчиков. В этой статье я расскажу об инструменте, который облегчает этот процесс.

С помощью инструмента под названием Detekt вы можете выполнить любые проверки классов, написанных на Kotlin, запустить процесс ревью кода в любое время (например, перед коммитом) и сэкономить время.

Статья: https://apptractor.ru/info/articles/nachinaem-rabotu-s-detekt-staticheskim-analizatorom-koda-dlya-android.html
Платформа: Android
👍4🔥1
Forwarded from Kotlin Multiplatform (Kostya)
Недавно в чате в очередной раз всплыл вопрос о том, что не надо использовать expect/actual там где достаточно обычных интерфейсов. А сегодня я наткнулся на статью как раз об этом!🤌
https://proandroiddev.com/achieving-platform-specific-implementations-with-koin-in-kmm-5cb029ba4f3b
Коин классный и популярный DI фреймворк. Автор на его примере показывает, как инжектить платформенные реализации в общий код. 👍
👍4🔥2👎1
Forwarded from Локалхост (Никита Куликов) (Nikita Kulikov)
Застрял на трёх пальцах

https://cs.uwaterloo.ca/~csk/slide/
😱5👍2🔥2
Forwarded from Mobile Developer (Алексей Гладков)
Пишем корутины с нуля [EN]
https://blog.kotlin-academy.com/kotlin-coroutines-animated-part-1-coroutine-hello-world-51797d8b9cd4

Лучший способ понять фреймворк - написать его с нуля. Чем собственно и заняты люди в этой статье

👉 Как сделать асинхронный код синхронным
👉 Как это все работает в рантайме
👉 Интерфейс Continuation (suspend под капотом)
👉 и многое другое интересное
👍5🔥21
Forwarded from Mobile Developer (Алексей Гладков)
Как работает Android code
https://medium.com/@charlie.lee.yo/understanding-how-android-code-runs-2091049318f8

Обожаю статьи, которые показывают как оно устроено под капотом. Очень полезно для понимания процессов, а не заучивания

👉 Какие фазы компиляции
👉 Устройство dex файлов
👉 Как исполняется bytecode
👉 … и многое другое
👍6🫡2🤔1
Forwarded from Android Broadcast (Кирилл Розов)
Media is too big
VIEW IN TELEGRAM
Compose Hammer - плагин для Android Studio, который содержит много шаблонов Material3 компонентов и Jetpack Compose, которые вам нужно просто выбрать из боковой панели и код вставится в редакторе

#compose
👍3🔥3
Platform Samples - коллекция примеров применения различных API платформы Android.

Целью этих примеров является демонстрация определенной функциональности в изоляции, и они могут использовать упрощенный код. Для лучших практик в реальных условиях разработчики рекомендуют следовать документации и Now In Android.

Среди рассмотренных тем - доступность, камера, подключение, графика, геолокация, приватность, пользовательский интерфейс.

Platform Samples на GitHub: https://github.com/android/platform-samples
Платформа: Android
⭐️: 234
👍2🔥2
Forwarded from Mobile AppSec World (Yury Shabalin)
Разрешения в Android

Вдохновлённые одной из статей Oversecured про типичные ошибки в разрешениях, которые присутствуют при разработке приложений мы решили собрать чек-лист чуть побольше и дать немного больше описания и теории всем, кто хотел бы узнать что-то новое или освежить воспоминания об этом инструменте.

По итогу родилась статья на Хабр.
Прошу вашего внимания и, надеюсь, что информация окажется полезной!

Всем приятного чтения и хорошего настроения!

#habr #android #permissions
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Существует отличный вариант украсить заголовки страниц в приложении при перелистывании. Предлагаем вам туториал — изучайте 😎

Читать статью

#новостиproglib
🤔3👍2👎2🔥2
Forwarded from Android Guards
Если для эксплуатации уязвимости нужно передать Parcelable класс в intent-е, то есть пара способов это сделать. Представим, что activity ожидает модель User, которая лежит в пакете com.myapp.xxx. Можно создать в эксплойте такую же структуру пакетов, и класс с таким же названием и необходимыми полями. Чтобы не писать реализацию сериализации руками, то можно воспользоваться плагином и добавить к созданному классу аннотацию @Parcelize. Но иногда классы бывают сложными или их требуется несколько сразу. В этом случае проще взять из целевого приложения .dex файлы с этими классами, положить их в assets и работать с ними через DexClassLoader. Пример здесь.
#aht
👍2🔥2🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Clock of Clocks - анимированные часы, сделанные с помощью Jetpack Compose.

Clock of Clocks на GitHub: https://github.com/khoa-omega/clock-of-clocks
Платформа: Android
⭐️: 22
🔥5👍2😱1
Forwarded from Dev Easy Notes (Nikita)
Хочу оформить главные, можно назвать их заповедями тестирования или постулатами, называйте как хотите. Я уже в разработке почти 6 лет и вот весь мой опыт, который есть на данный момент можно оформить так:

Зачем тесты?

👉 Тесты не избавляют от багов, не делают программу надежнее и не заставляют тебя писать чистый код. Тесты нужны лишь убедится, что ты новым кодом не сломал предыдущий, позволяют не оглядываться назад на каждом шагу
👉 Тесты имеют смысл только в том случае, если они постоянно запускаются на CI и блокируют МРы, иначе это бессмысленная трата времени, плавали знаем
👉 Тест плох, если он падает постоянно, на него перестают обращать внимания и забивают
👉 Тест плох если всегда проходит, значит он нихрена не тестирует
👉 Тест пишем только тогда, когда уверены, что нет другого механизма обеспечить качество (см. прошлые посты)
👉 Флакающие/мигающие тесты, от таких тестов нужно избавляться также быстро как гугл отказывается от проектов. Мигающие тесты приносят целый ворох проблем: не дают никакой информации, нагружают систему т.к приходится их перезапускать, и увеличивают вероятность оказаться вне поля зрения.

Как не нужно тестировать?

👉 Не нужно писать тесты для банальных вещей когда у вас репозиторий тупо в сеть ходит и выдает список или проверять правильно ли мы вызываем какой-то метод
👉 Не нужно делать тесты, которые протестируют все возможные кейсы на свете. Сосредоточтесь на базовых сценариях, для всего остального есть мониторинг, поддержка и грамотный подход к ошибкам
👉 Конкретно в мобильной разработке, нахер не нужны тесты которые тестируют цвета, иконки, правильность отображения или не дай бог анимации. Такие тесты ебанутся какие дорогие, а выхлоп от них никакущий.
👉 Не нужно делать тестов на "всякий случай", нужно чтобы у каждого теста было четкое обоснование зачем он нужен
👉 Попытки добится какого либо процента покрытия кода бессмысленная дроч, которая ничего не дает, а только вынуждает идти на хаки и писать тесты на сэтеры (кринж даже от упоминания)

Как лучше тестировать?

👉 Тесты не должны ломаться при рефакторинге, и быть обузой. Иначе разрабы просто будут боятся рефакторить код, а это приведет к протуханию кода
👉 Тесты должны писаться также легко как и основной код
👉 В тестах может быть дублирование, так как избавление от дублирование это уже абстракция, абстракция это сложно, а сложность ведет к багам. Вам нужны баги еще и в тестах?
👉 Ассинхронность. Как показывает практика лучше ничего не подменять и тестировать в условиях реальной работы. Иначе в тестах на одном потоке все прекрасно, а в проде гонка и плавающие баги (см. подход из предыдущего поста).
👉 Тесты могут потребовать изменения в архитектуре или инфраструктуре, это ок так и должно быть. Однако внутри кода проекта не должно быть упоминаний о тестах: @visiblefortesting или idling в коде проекта это сигнал о том, что вы профакапились с архитектурой
🔥3👍2
Forwarded from Mobile Developer (Алексей Гладков)
Набор маленьких анимаций в Jetpack Compose [EN]

https://rodrigomartind.medium.com/the-art-of-small-animations-in-android-with-jetpack-compose-566caa94deba

Просто прикольные визуальные эффекты для вашей библиотеки

👉 Эффект нажатия
👉 Эффект колокольчика
👉 Эффект сжатия
👉 и еще пару эффектов
👍2🔥2
Forwarded 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)
👍3🔥2🤔1
Вау, просто вау. В комментарии в сорцах SQLite обнаружилась потрясающая история: для временных файлов пришлось по умолчанию использовать префикс "etilqs_" (SQLite наоборот), потому что McAfee засирали юзерам temp папку, а юзеры находили контакты разработчиков SQLite и названивали им с жалобами.

#sqlite #db #humor
👍2🔥2
Forwarded from Android Broadcast (Кирилл Розов)
Команда Ozon стоклнулась с проблемой скорости работы Jetpack Compose. Все это они решили, выработали практики и теперь делятся ими в статье (28 мин):
👉 Разберитесь как работает отрисовка и обновление UI в Compose
👉 Правильно выставляйте аннотации @Stable и @Immutable
👉 Правильно готовьте лямбды (не ссылку на метод) через remember
👉 Оптимизируйте функции, так чтобы они были пропускаемые в рекомпозиции
👉 Уменьшайте область рекомпозиции
👉 Быстрые вычисления при смене состояния
👉 Оптимально реализуйте собственные layout
👉 Не менять состояние, которое только что обновилось
👉 Занимайтесь отладкой и профилированием

#compose #performance
👍2🔥2
Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
Инструкция (4 мин) по созданию циферблата с Google Pixel Watch с использованием Compose и Canvas API

Исходный код тут

#compose
👍3🔥1