Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
👍1👎1
Forwarded from Mobile Developer (Алексей Гладков)
Пишем корутины с нуля [EN]
https://blog.kotlin-academy.com/kotlin-coroutines-animated-part-1-coroutine-hello-world-51797d8b9cd4
Лучший способ понять фреймворк - написать его с нуля. Чем собственно и заняты люди в этой статье
👉 Как сделать асинхронный код синхронным
👉 Как это все работает в рантайме
👉 Интерфейс Continuation (suspend под капотом)
👉 и многое другое интересное
https://blog.kotlin-academy.com/kotlin-coroutines-animated-part-1-coroutine-hello-world-51797d8b9cd4
Лучший способ понять фреймворк - написать его с нуля. Чем собственно и заняты люди в этой статье
👉 Как сделать асинхронный код синхронным
👉 Как это все работает в рантайме
👉 Интерфейс Continuation (suspend под капотом)
👉 и многое другое интересное
Medium
Kotlin Coroutines Animated: Part 1 - Coroutine Hello World
Let’s build the coroutine framework from scratch!
👍5🔥2❤1
Forwarded from Android Security & Malware
Binder Trace: Tool for intercepting and parsing Android Binder messages Think of it as "Wireshark for Binder"
https://github.com/foundryzero/binder-trace
https://github.com/foundryzero/binder-trace
GitHub
GitHub - foundryzero/binder-trace: Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as…
Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as "Wireshark for Binder". - foundryzero/binder-trace
🔥3👍1
Forwarded from Mobile Developer (Алексей Гладков)
Как работает Android code
https://medium.com/@charlie.lee.yo/understanding-how-android-code-runs-2091049318f8
Обожаю статьи, которые показывают как оно устроено под капотом. Очень полезно для понимания процессов, а не заучивания
👉 Какие фазы компиляции
👉 Устройство dex файлов
👉 Как исполняется bytecode
👉 … и многое другое
https://medium.com/@charlie.lee.yo/understanding-how-android-code-runs-2091049318f8
Обожаю статьи, которые показывают как оно устроено под капотом. Очень полезно для понимания процессов, а не заучивания
👉 Какие фазы компиляции
👉 Устройство dex файлов
👉 Как исполняется bytecode
👉 … и многое другое
Medium
Understanding How Android Code Runs
A simple example to go through Android bytecode
👍6🫡2🤔1
Forwarded from Android Broadcast (Кирилл Розов)
Media is too big
VIEW IN TELEGRAM
Compose Hammer - плагин для Android Studio, который содержит много шаблонов Material3 компонентов и Jetpack Compose, которые вам нужно просто выбрать из боковой панели и код вставится в редакторе
#compose
#compose
👍3🔥3
Forwarded from AppFiles - Mobile Development
Platform Samples - коллекция примеров применения различных API платформы Android.
Целью этих примеров является демонстрация определенной функциональности в изоляции, и они могут использовать упрощенный код. Для лучших практик в реальных условиях разработчики рекомендуют следовать документации и Now In Android.
Среди рассмотренных тем - доступность, камера, подключение, графика, геолокация, приватность, пользовательский интерфейс.
Platform Samples на GitHub: https://github.com/android/platform-samples
Платформа: Android
⭐️: 234
Целью этих примеров является демонстрация определенной функциональности в изоляции, и они могут использовать упрощенный код. Для лучших практик в реальных условиях разработчики рекомендуют следовать документации и Now In Android.
Среди рассмотренных тем - доступность, камера, подключение, графика, геолокация, приватность, пользовательский интерфейс.
Platform Samples на GitHub: https://github.com/android/platform-samples
Платформа: Android
⭐️: 234
GitHub
GitHub - android/platform-samples: A collection of samples of different Android OS platform APIs.
A collection of samples of different Android OS platform APIs. - android/platform-samples
👍2🔥2
Forwarded from Mobile AppSec World (Yury Shabalin)
Разрешения в Android
Вдохновлённые одной из статей Oversecured про типичные ошибки в разрешениях, которые присутствуют при разработке приложений мы решили собрать чек-лист чуть побольше и дать немного больше описания и теории всем, кто хотел бы узнать что-то новое или освежить воспоминания об этом инструменте.
По итогу родилась статья на Хабр.
Прошу вашего внимания и, надеюсь, что информация окажется полезной!
Всем приятного чтения и хорошего настроения!
#habr #android #permissions
Вдохновлённые одной из статей Oversecured про типичные ошибки в разрешениях, которые присутствуют при разработке приложений мы решили собрать чек-лист чуть побольше и дать немного больше описания и теории всем, кто хотел бы узнать что-то новое или освежить воспоминания об этом инструменте.
По итогу родилась статья на Хабр.
Прошу вашего внимания и, надеюсь, что информация окажется полезной!
Всем приятного чтения и хорошего настроения!
#habr #android #permissions
Хабр
Permissions в Android: как не допустить ошибок при разработке
Всем привет! На связи Юрий Шабалин, ведущий архитектор Swordfish Security и генеральный директор Стингрей Технолоджиз. Эта статья написана в соавторстве с Android-разработчиком Веселиной Зацепиной (...
👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Существует отличный вариант украсить заголовки страниц в приложении при перелистывании. Предлагаем вам туториал — изучайте 😎
Читать статью
#новостиproglib
Читать статью
#новостиproglib
🤔3👍2👎2🔥2
Forwarded from Android Guards
Если для эксплуатации уязвимости нужно передать
#aht
Parcelable класс в intent-е, то есть пара способов это сделать. Представим, что activity ожидает модель User, которая лежит в пакете com.myapp.xxx. Можно создать в эксплойте такую же структуру пакетов, и класс с таким же названием и необходимыми полями. Чтобы не писать реализацию сериализации руками, то можно воспользоваться плагином и добавить к созданному классу аннотацию @Parcelize. Но иногда классы бывают сложными или их требуется несколько сразу. В этом случае проще взять из целевого приложения .dex файлы с этими классами, положить их в assets и работать с ними через DexClassLoader. Пример здесь.#aht
👍2🔥2🤔1
Forwarded from AppFiles - Mobile Development
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
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 в коде проекта это сигнал о том, что вы профакапились с архитектурой
Зачем тесты?
👉 Тесты не избавляют от багов, не делают программу надежнее и не заставляют тебя писать чистый код. Тесты нужны лишь убедится, что ты новым кодом не сломал предыдущий, позволяют не оглядываться назад на каждом шагу
👉 Тесты имеют смысл только в том случае, если они постоянно запускаются на 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
Просто прикольные визуальные эффекты для вашей библиотеки
👉 Эффект нажатия
👉 Эффект колокольчика
👉 Эффект сжатия
👉 и еще пару эффектов
https://rodrigomartind.medium.com/the-art-of-small-animations-in-android-with-jetpack-compose-566caa94deba
Просто прикольные визуальные эффекты для вашей библиотеки
👉 Эффект нажатия
👉 Эффект колокольчика
👉 Эффект сжатия
👉 и еще пару эффектов
Medium
The Art of Small Animations in Android with Jetpack Compose
Small details that make a difference for Users
👍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)
Статья про паттерн репозиторий, как он должен выглядеть и чего там делать не стоит.
👉 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
Forwarded from Разработка ждёт балета
Вау, просто вау. В комментарии в сорцах SQLite обнаружилась потрясающая история: для временных файлов пришлось по умолчанию использовать префикс "etilqs_" (SQLite наоборот), потому что McAfee засирали юзерам temp папку, а юзеры находили контакты разработчиков SQLite и названивали им с жалобами.
#sqlite #db #humor
#sqlite #db #humor
👍2🔥2
Forwarded from Android Broadcast (Кирилл Розов)
Команда Ozon стоклнулась с проблемой скорости работы Jetpack Compose. Все это они решили, выработали практики и теперь делятся ими в статье (28 мин):
👉 Разберитесь как работает отрисовка и обновление UI в Compose
👉 Правильно выставляйте аннотации @Stable и @Immutable
👉 Правильно готовьте лямбды (не ссылку на метод) через remember
👉 Оптимизируйте функции, так чтобы они были пропускаемые в рекомпозиции
👉 Уменьшайте область рекомпозиции
👉 Быстрые вычисления при смене состояния
👉 Оптимально реализуйте собственные layout
👉 Не менять состояние, которое только что обновилось
👉 Занимайтесь отладкой и профилированием
#compose #performance
👉 Разберитесь как работает отрисовка и обновление 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
Исходный код тут
#compose
👍3🔥1
Forwarded from iOS Makes Me Hate (Lev Bondarenko)
Игры, в которые играют люди на собесах
Тема собесов интересна всем. Рынок адаптируется и меняется каждые пол года, а каждые 5 лет меняется почти полностью. Очень важно понимать игру с обоих сторон.
Доклад от опытного интервьюера, который собрал модели поведения как кандидатов, так и интервьюеров.
Тема собесов интересна всем. Рынок адаптируется и меняется каждые пол года, а каждые 5 лет меняется почти полностью. Очень важно понимать игру с обоих сторон.
Доклад от опытного интервьюера, который собрал модели поведения как кандидатов, так и интервьюеров.
👍3🤔2
Forwarded from Локалхост (Никита Куликов) (Nikita Kulikov)
Опубликовали мое выступление на Mobius. Теперь оно доступно на Ютубе всем желающим:
https://youtu.be/htWzdvht0Qg
И ещё выступление где я был приглашенным экспертом - про Lobzik: https://youtu.be/8BB5Qa1O5TM
https://youtu.be/htWzdvht0Qg
И ещё выступление где я был приглашенным экспертом - про Lobzik: https://youtu.be/8BB5Qa1O5TM
YouTube
Никита Куликов — Разгоняем BLE
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV
— —
BLE изначально задуман как технология для обмена…
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV
— —
BLE изначально задуман как технология для обмена…
❤4👍2
Forwarded 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, породив все эти "интересные" решения 🤡
Последние два дня Илон Маск утверждал, что Twitter подвергается атаке со стороны "нескольких сотен организаций", которые осуществляют "ЭКСТРЕМАЛЬНЫЙ уровень извлечения данных". Это вынудило компанию экстренно включить "большое количество серверов" и принять чрезвычайные меры.
1. В выходные Twitter начал блокировать доступ к Twitter всем вышедшим из системы, требуя входа в систему для просмотра любого твита или профиля. Маск назвал это "временной чрезвычайной мерой".
2. Очевидно, это не остановило наплыв трафика, и Twitter ограничил количество твитов, которые вы можете просматривать.
3. Сразу же пользователи Twitter начали видеть сообщения "Rate Limit Exceeded".
4. Неужели компании, занимающиеся разработкой искусственного интеллекта, обрушили соцсеть? Возможно, да. А возможно и нет.
5. Само веб-приложении Twitter постоянно отправляет запросы в Twitter в бесконечном цикле. "Это уморительно. Похоже, что Твиттер сам себя заDDOSил". Twitter отправляет около 10 запросов в секунду, пытаясь получить контент, который никогда не приходит. Вероятно, это создало адские условия, которые инженеры даже не предполагали, и поэтому мы получаем эту комедию ошибок, приводящую к самой эпической самоликвидации - само-DDOS.
6. С другой стороны в настоящее время неизвестно, когда этот баг появился и насколько сильно он влияет на трафик, поэтому трудно определить, этот баг вдохновил Twitter заблокировать незарегистрированный доступ и добавить ограничения скорости, или же баг был спровоцирован развертыванием этих изменений.
И что: было бы забавно, если бы эта "чрезвычайная ситуация" от начала и до конца была вызвана ошибкой, в результате которой Twitter сам себе устроил DDOS, породив все эти "интересные" решения 🤡
🤔3👍2