We Love Android
622 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Corbind - аналог RxBinding, только построен на Kotlin корутинах. Данная библиотека предоставляет возможность осуществлять связывание с вьюшками Android SDK.

Поддерживает Flow, ReceiveChannel и Actor.

Пример:

findViewById<EditText>(R.id.et_name)
.textChanges() // Flow<CharSequence>
.onEach { /* handle text change events */ }
.launchIn(scope)

https://ldralighieri.github.io/Corbind/
CalendarView - достаточно гибкая реализация календаря, основанная на RecyclerView.

Использует ThreeTenABP для обратной совместимости работы с датами на старых версиях Android SDK.

https://github.com/kizitonwose/CalendarView
Когда не хватает собственных утечек памяти, гугл добавляет свои. Ну, подумаешь Activity утекает по нажатию кнопки назад и это фактически может быть в каждом приложении на 10ке. "Ничего, в следующих релизах, обязательно пофиксим" - подождите годик, другой.

https://issuetracker.google.com/issues/139738913
На удивление качественный доклад, который за 25 минут может удивить повидавших всякого Android-девелоперов.

1. Автор рассказывает о возможности внедрения зависимостей через сеттер в любую активити в несколько строк кода с помощью ActivityLifecycleCallbacks (ок, об этом думаю знали многие).

2. Автор рассказывает о возможности внедрения зависимостей через сеттер в любой фрагмент в несколько строк кода с помощью FragmentLifecycleCallbacks (ну кто бы знал, причем работает рекурсивно и распространяется на чайлдов).

3. Автор рассказывает о возможности внедрения зависимостей через конструктор в кастомную вьюшку с помощью LayoutInflater.Factory (еще один грязный хак).

4 И последнее - затрагивает появление компонента AppComponentsFactory, который позволяет, начиная с апи 28, указывать конструкторы, которые будут вызваны для активити, фрагментов, сервисов.

https://www.youtube.com/watch?v=ZnIv79j_iuY
Автор рассказывает о реализации периодического обновления местоположения с помощью Android Architecture Components и FusedLocationProviderClient.

https://proandroiddev.com/android-tutorial-on-location-update-with-livedata-774f8fcc9f15
Интересный доклад с весеннего мобиуса, где автор рассказывает о реализации кэша сообщений ВКонтакте.

Особенности:

1. Долгосрочный локальный кэш с информацией о разрывах в общей ленте сообщений.

2. Использует малое количество SQLite-таблиц, сложные сущности просто хранят в сериализованном виде и не парятся.

3. Ускорение SQLite (индексы, плейсхолдеры, размер кэша скомпилированных запросов, WAL, сборка собственного SQLite).

Стоит отметить, что советы из 3 группы можно смело применять в качестве инструкции, если придётся реализовывать похожую функциональность «Сообщений» или оптимизировать работу с базой данных.

https://www.youtube.com/watch?v=S7_hdLtDwcA
Еще один доклад с весеннего мобиуса, где автор делится советами как можно ускорить сборку android gradle проекта.

Большинство советов являются нетипичными и позволяют проводить собственные эксперименты:

1. Использовать Configuration Avoidance API.
2. afterEvaluate зло.
3. Вынесение кусков конфигурации (общей логики) в buildSrc.
4. Перестать использовать doLast.
5. Написание собственного чистого Kotlin, Java плагина с поддержкой android-зависимостей.
6. Вынесение констант из BuildConfig в AndroidManifest.xml.
7. Использование Ramdisk при сборке.
8. Отключение тасок через exclude.
9. Сборка собственной JVM на базе OpenJDK, GraalVM, OpenJ9.

https://www.youtube.com/watch?v=ez3mQoMZUBY
Достаточно забавный доклад с Droidcon Berlin 2019, где индусы (?) из Убера рассказывают как пишут бизнес-логику на Go и как все это дело потом компилится в AAR.

Видео:
https://www.droidcon.com/media-detail?video=352686984

Полезная ссылка:
https://godoc.org/golang.org/x/mobile/cmd/gomobile
Автор по шагам рассказывает о переходе на Kotlin Gradle DSL. Ничего лишнего, все по делу.

Можно отметить, что такой подход весьма интересен, но возникает некоторая сложность с пониманием того, что у некоторой зависимости появилась новая версия. На данный момент при таком подходе студия подсказок не выдает.

https://proandroiddev.com/converting-your-android-gradle-scripts-to-kotlin-1172f1069880
И набравший больше всего голосов доклад с весеннего мобиуса: Денис Неклюдов рассказывал об используемой архитектуре в Lyft.

Некоторые моменты, которые хочется отметить из доклада:
- создают собственные обертки, которые пытаются скрыть использование зависимостей от Android Framework;
- перешли к MVI;
- живут feature-модулями (разные команды несут ответственность за разные модули);
- для сборки проекта используют Bazel, а не Gradle (но для этого есть специальные люди, занимающиеся только сборкой);
- обмазываются линтерами;
- Gitflow упрощенный, фича-ветки льются сразу в мастер;
- используют Feature flags для управления содержимым напрямую с сервера;
- бережно относятся к документации API в Swagger;
- для DI используют Dagger2 (страдают, но альтернатив для проектов такого масштаба особо нет);
- обращает внимание на важность реализации механизма принудительного обновления приложения;
- используют собственную дизайн систему для вьюшек.

https://www.youtube.com/watch?v=_cFHtjIWjCc
Автор рассказывает про новый механизм взаимодействия с View - View Binding. Пытается объяснить, чем это решение лучше findViewById и котлиновских синтетиков.

По итогу, плюсом получаем type safety, а минусом - кодген.

https://joebirch.co/2019/09/18/exploring-view-binding-on-android/
Достаточно живой доклад с Droidcon Berlin 2019, где автор рассказывает про некоторые вещи в Kotlin, которые разработчики зачастую делают, а их следовало бы избегать.

https://www.droidcon.com/media-detail?video=352688794
Насыщенная подробностями история о том, как чувак реверсил игру HackEx.

Обшая последовательность шагов была примерно следующая:

- установил на эмулятор с рутом данную игру;
- собрал дамп сетевого трафика, загрузив tcpdump на устройство;
- проанализировал собранный дамп, убедился, что трафик под SSL;
- чтобы залезть под SSL использовал burp в качестве прокси и установку сертификата в список доверенных;
- собрал дамп сетевого трафика еще раз, уже используя burp, по итогу теперь может смотреть под SSL;
- проанализировав HTTP-запросы, убедился для проверки подлинности используется специальная подпись sig;
- разреверсил апкшку с помощью jadx и нашел необходимую функцию подписи в коде, но не все так просто - сама функция была определена сошке;
- вытащил из апкшки данную сошку и, открыв её с помощью radare2, смог достаточно поверхностно понять алгоритм работы функции подписи;
- затем перешел к динамическому анализу, собрал тестовый пример с использованием данной сошки и функции подписи, подключился с помощью GDB и занялся отладкой (это прям очень сурово);
- после адской отладки, окончательно выяснил как работает функция подписи, смог реализовать собственный аналог и пример, на котором показал успешный итоговый результат.

https://0x00sec.org/t/reversing-hackex-an-android-game/16243
Автор статьи делает базовое введение в функциональное программирование и рассказывает как писать код на Kotlin в функциональном стиле. В конце статьи рассказывает об использовании библиотеки Arrow.

https://www.raywenderlich.com/9527-functional-programming-with-kotlin-and-arrow-getting-started
Доклад с Droidcon Berlin 2019, посвященный анализу данных, которые Google собирает c Android устройств. Позволяет понять чуть больше о том, на основе каких данных строится уникальный отпечаток устройства.

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

https://www.droidcon.com/media-detail?video=352688386
И еще один доклад с Droidcon Berlin 2019. Автор рассказывает о малоизвестных вещах, найденных им в исходниках AndroidX:
- LocalBroadcastManager;
- VersionedParcelable;
- EmojiCompat;
- ImmLeakCleaner.

https://www.droidcon.com/media-detail?video=352671901
Автор рассказывает про механизм анализа apk файлов, используемый в Google Play Protect.

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

Набор инструментов для анализа достаточно стандартный: для статики - apktool, jadx, jeb, IDA, для динамики - Frida, gdb.

https://www.droidcon.com/media-detail?video=352670021
Еще один интересный троян-кликер найден в Google Play. Его основная функция заключалась в незаметной попытке осуществления подписки на платные сервисы.

Дополнительно запакован с помощью пакера Jiagu и пытается мимикрировать под Facebook SDK или Adjust SDK.

Сам троян был ориентирован на определенный набор стран, взаимодействуя с управляющим сервером, получая команды в виде JavaScript кода и выполняя их в невидимом WebView.

https://news.drweb.com/show/?i=13464&lng=en
Стартовал Android Dev Summit 2019. Из Keynote доклада хотелось бы отметить следующие вещи:
- уже доступна Android Studio 4.0 Canary 1, в которой можно пощупать Jetpack Compose;
- для Jetpack Compose добавлен предпросмотр, правда сделано это специальной аннотацией и надо компилить код;
- визуальный редактор MotionLayout доступен из новой студии;
- наконец-таки обещают полную поддержку Gradle Kotlin Scripts в новой студии;
- CameraX уже в бете.

https://www.youtube.com/watch?v=5jJ-e278BFY