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/
Corbind
Coroutines binding APIs for Android UI widgets from the platform and support libraries.
CalendarView - достаточно гибкая реализация календаря, основанная на RecyclerView.Использует
ThreeTenABP для обратной совместимости работы с датами на старых версиях Android SDK.https://github.com/kizitonwose/CalendarView
GitHub
GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.
A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendar
Когда не хватает собственных утечек памяти, гугл добавляет свои. Ну, подумаешь
https://issuetracker.google.com/issues/139738913
Activity утекает по нажатию кнопки назад и это фактически может быть в каждом приложении на 10ке. "Ничего, в следующих релизах, обязательно пофиксим" - подождите годик, другой.https://issuetracker.google.com/issues/139738913
На удивление качественный доклад, который за 25 минут может удивить повидавших всякого Android-девелоперов.
1. Автор рассказывает о возможности внедрения зависимостей через сеттер в любую активити в несколько строк кода с помощью
2. Автор рассказывает о возможности внедрения зависимостей через сеттер в любой фрагмент в несколько строк кода с помощью
3. Автор рассказывает о возможности внедрения зависимостей через конструктор в кастомную вьюшку с помощью
4 И последнее - затрагивает появление компонента
https://www.youtube.com/watch?v=ZnIv79j_iuY
1. Автор рассказывает о возможности внедрения зависимостей через сеттер в любую активити в несколько строк кода с помощью
ActivityLifecycleCallbacks (ок, об этом думаю знали многие).2. Автор рассказывает о возможности внедрения зависимостей через сеттер в любой фрагмент в несколько строк кода с помощью
FragmentLifecycleCallbacks (ну кто бы знал, причем работает рекурсивно и распространяется на чайлдов).3. Автор рассказывает о возможности внедрения зависимостей через конструктор в кастомную вьюшку с помощью
LayoutInflater.Factory (еще один грязный хак).4 И последнее - затрагивает появление компонента
AppComponentsFactory, который позволяет, начиная с апи 28, указывать конструкторы, которые будут вызваны для активити, фрагментов, сервисов.https://www.youtube.com/watch?v=ZnIv79j_iuY
YouTube
Публичное API, которое не рекламирует Google (Владимир Генович, Яндекс.Деньги)
Буду рвать шаблоны и ломать стереотипы — покажу, как внедрять синглтоны из ниоткуда, как забыть про базовые activity и fragment и научу легально делать то, чего раньше делать было нельзя.
Шпаргалка по основным командам
https://www.cheatography.com/citguy/cheat-sheets/android-package-manager-pm/
Android Package Manager (pm).https://www.cheatography.com/citguy/cheat-sheets/android-package-manager-pm/
Cheatography
Android Package Manager (pm) Cheat Sheet
How to use the Android Package Manager (pm)
Автор рассказывает о реализации периодического обновления местоположения с помощью
https://proandroiddev.com/android-tutorial-on-location-update-with-livedata-774f8fcc9f15
Android Architecture Components и FusedLocationProviderClient. https://proandroiddev.com/android-tutorial-on-location-update-with-livedata-774f8fcc9f15
Medium
Android Tutorial On Location Update With LiveData
In this tutorial, I will introduce you to how to implement continuous location update with Android architecture components and Google…
Интересный доклад с весеннего мобиуса, где автор рассказывает о реализации кэша сообщений ВКонтакте.
Особенности:
1. Долгосрочный локальный кэш с информацией о разрывах в общей ленте сообщений.
2. Использует малое количество SQLite-таблиц, сложные сущности просто хранят в сериализованном виде и не парятся.
3. Ускорение SQLite (индексы, плейсхолдеры, размер кэша скомпилированных запросов, WAL, сборка собственного SQLite).
Стоит отметить, что советы из 3 группы можно смело применять в качестве инструкции, если придётся реализовывать похожую функциональность «Сообщений» или оптимизировать работу с базой данных.
https://www.youtube.com/watch?v=S7_hdLtDwcA
Особенности:
1. Долгосрочный локальный кэш с информацией о разрывах в общей ленте сообщений.
2. Использует малое количество SQLite-таблиц, сложные сущности просто хранят в сериализованном виде и не парятся.
3. Ускорение SQLite (индексы, плейсхолдеры, размер кэша скомпилированных запросов, WAL, сборка собственного SQLite).
Стоит отметить, что советы из 3 группы можно смело применять в качестве инструкции, если придётся реализовывать похожую функциональность «Сообщений» или оптимизировать работу с базой данных.
https://www.youtube.com/watch?v=S7_hdLtDwcA
YouTube
Александр Сорокин — Реализация кэша сообщений ВКонтакте
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
. . .
. Сложный и интересный доклад про то, как под капотом работает мессенджер VK. Сложная бизнес-логика, оптимизации БД и другие тонкости того, как сделать, чтобы диалоги пользователя всегда были…
— —
. . .
. Сложный и интересный доклад про то, как под капотом работает мессенджер VK. Сложная бизнес-логика, оптимизации БД и другие тонкости того, как сделать, чтобы диалоги пользователя всегда были…
Еще один доклад с весеннего мобиуса, где автор делится советами как можно ускорить сборку
Большинство советов являются нетипичными и позволяют проводить собственные эксперименты:
1. Использовать
2.
3. Вынесение кусков конфигурации (общей логики) в
4. Перестать использовать
5. Написание собственного чистого
6. Вынесение констант из
7. Использование
8. Отключение тасок через
9. Сборка собственной
https://www.youtube.com/watch?v=ez3mQoMZUBY
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
YouTube
Степан Гончаров — Gradle pipeline optimisation: Beyond basics
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
. . .
. С ростом размера мобильных проектов вопрос времени сборки становится все более важным. Для Android оптимизация сборки в Gradle является критичным в этом вопросе. Нюансы этого процесса мы и…
— —
. . .
. С ростом размера мобильных проектов вопрос времени сборки становится все более важным. Для Android оптимизация сборки в Gradle является критичным в этом вопросе. Нюансы этого процесса мы и…
Достаточно забавный доклад с
Видео:
https://www.droidcon.com/media-detail?video=352686984
Полезная ссылка:
https://godoc.org/golang.org/x/mobile/cmd/gomobile
Droidcon Berlin 2019, где индусы (?) из Убера рассказывают как пишут бизнес-логику на Go и как все это дело потом компилится в AAR.Видео:
https://www.droidcon.com/media-detail?video=352686984
Полезная ссылка:
https://godoc.org/golang.org/x/mobile/cmd/gomobile
droidcon
“Go(lang) for mobile”
Cross platform development is a riddle that isn’t solved nor looks like it will be. There isn’t one concrete solution to which you could say, “Do it this way”. React Native, Flutter, Xamarin and others have their own backed approach to solve this.
Автор по шагам рассказывает о переходе на
Можно отметить, что такой подход весьма интересен, но возникает некоторая сложность с пониманием того, что у некоторой зависимости появилась новая версия. На данный момент при таком подходе студия подсказок не выдает.
https://proandroiddev.com/converting-your-android-gradle-scripts-to-kotlin-1172f1069880
Kotlin Gradle DSL. Ничего лишнего, все по делу.Можно отметить, что такой подход весьма интересен, но возникает некоторая сложность с пониманием того, что у некоторой зависимости появилась новая версия. На данный момент при таком подходе студия подсказок не выдает.
https://proandroiddev.com/converting-your-android-gradle-scripts-to-kotlin-1172f1069880
Medium
Converting your Android Gradle scripts to Kotlin
Using the same language throughout your whole project can further streamline and speed up your development process. With the stable…
И набравший больше всего голосов доклад с весеннего мобиуса: Денис Неклюдов рассказывал об используемой архитектуре в Lyft.
Некоторые моменты, которые хочется отметить из доклада:
- создают собственные обертки, которые пытаются скрыть использование зависимостей от
- перешли к
- живут feature-модулями (разные команды несут ответственность за разные модули);
- для сборки проекта используют
- обмазываются линтерами;
-
- используют
- бережно относятся к документации API в
- для
- обращает внимание на важность реализации механизма принудительного обновления приложения;
- используют собственную
https://www.youtube.com/watch?v=_cFHtjIWjCc
Некоторые моменты, которые хочется отметить из доклада:
- создают собственные обертки, которые пытаются скрыть использование зависимостей от
Android Framework;- перешли к
MVI;- живут feature-модулями (разные команды несут ответственность за разные модули);
- для сборки проекта используют
Bazel, а не Gradle (но для этого есть специальные люди, занимающиеся только сборкой);- обмазываются линтерами;
-
Gitflow упрощенный, фича-ветки льются сразу в мастер;- используют
Feature flags для управления содержимым напрямую с сервера;- бережно относятся к документации API в
Swagger;- для
DI используют Dagger2 (страдают, но альтернатив для проектов такого масштаба особо нет);- обращает внимание на важность реализации механизма принудительного обновления приложения;
- используют собственную
дизайн систему для вьюшек.https://www.youtube.com/watch?v=_cFHtjIWjCc
YouTube
Денис Неклюдов — Scaling architecture at Lyft
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
. . .
. Отличный докладчик, которому есть чем поделиться по опыту работы в Lyft. Доклад посвящен проблемам, часто встречающимся при масштабировании архитектуры приложения.
Lyft Android начиналось…
— —
. . .
. Отличный докладчик, которому есть чем поделиться по опыту работы в Lyft. Доклад посвящен проблемам, часто встречающимся при масштабировании архитектуры приложения.
Lyft Android начиналось…
Автор рассказывает про новый механизм взаимодействия с View -
По итогу, плюсом получаем
https://joebirch.co/2019/09/18/exploring-view-binding-on-android/
View Binding. Пытается объяснить, чем это решение лучше findViewById и котлиновских синтетиков.По итогу, плюсом получаем
type safety, а минусом - кодген.https://joebirch.co/2019/09/18/exploring-view-binding-on-android/
Joe Birch
Exploring View Binding on Android
When it comes to manipulating our user interfaces within Android applications, there are a couple of approaches that we can take. In these cases, we need to obtain a reference these views in-order to manipulate them in some way. For this, we'll either use…
Достаточно живой доклад с
https://www.droidcon.com/media-detail?video=352688794
Droidcon Berlin 2019, где автор рассказывает про некоторые вещи в Kotlin, которые разработчики зачастую делают, а их следовало бы избегать.https://www.droidcon.com/media-detail?video=352688794
Droidcon
Kotlin Not-to-Do List - What we should avoid doing in Kotlin
Kotlin gives us a lot of possibilities, but with every power comes responsibility. What should we avoid doing in Kotlin? What are Kotlin internal contracts in terms of different features and functions? What is dangerous and should be avoided? How to code…
Насыщенная подробностями история о том, как чувак реверсил игру
Обшая последовательность шагов была примерно следующая:
- установил на эмулятор с рутом данную игру;
- собрал дамп сетевого трафика, загрузив
- проанализировал собранный дамп, убедился, что трафик под SSL;
- чтобы залезть под SSL использовал
- собрал дамп сетевого трафика еще раз, уже используя burp, по итогу теперь может смотреть под SSL;
- проанализировав HTTP-запросы, убедился для проверки подлинности используется специальная подпись
- разреверсил апкшку с помощью
- вытащил из апкшки данную сошку и, открыв её с помощью
- затем перешел к динамическому анализу, собрал тестовый пример с использованием данной сошки и функции подписи, подключился с помощью
- после адской отладки, окончательно выяснил как работает функция подписи, смог реализовать собственный аналог и пример, на котором показал успешный итоговый результат.
https://0x00sec.org/t/reversing-hackex-an-android-game/16243
HackEx. Обшая последовательность шагов была примерно следующая:
- установил на эмулятор с рутом данную игру;
- собрал дамп сетевого трафика, загрузив
tcpdump на устройство;- проанализировал собранный дамп, убедился, что трафик под SSL;
- чтобы залезть под SSL использовал
burp в качестве прокси и установку сертификата в список доверенных;- собрал дамп сетевого трафика еще раз, уже используя burp, по итогу теперь может смотреть под SSL;
- проанализировав HTTP-запросы, убедился для проверки подлинности используется специальная подпись
sig;- разреверсил апкшку с помощью
jadx и нашел необходимую функцию подписи в коде, но не все так просто - сама функция была определена сошке;- вытащил из апкшки данную сошку и, открыв её с помощью
radare2, смог достаточно поверхностно понять алгоритм работы функции подписи;- затем перешел к динамическому анализу, собрал тестовый пример с использованием данной сошки и функции подписи, подключился с помощью
GDB и занялся отладкой (это прям очень сурово);- после адской отладки, окончательно выяснил как работает функция подписи, смог реализовать собственный аналог и пример, на котором показал успешный итоговый результат.
https://0x00sec.org/t/reversing-hackex-an-android-game/16243
0x00sec - The Home of the Hacker
Reversing HackEx - An android game
Hello peeps. I’m sp0re. This is my first post on 0x00sec, you can find more about me on my website. Today we are going to reverse engineer the network protocol of an android game so that we can automate the game, and earn unlimited money while drinking sodas…
Автор статьи делает базовое введение в функциональное программирование и рассказывает как писать код на
https://www.raywenderlich.com/9527-functional-programming-with-kotlin-and-arrow-getting-started
Kotlin в функциональном стиле. В конце статьи рассказывает об использовании библиотеки Arrow.https://www.raywenderlich.com/9527-functional-programming-with-kotlin-and-arrow-getting-started
kodeco.com
Functional Programming with Kotlin and Arrow: Getting Started
In this tutorial, you will learn the fundamentals of functional programming and how various Kotlin language features enable functional programming concepts.
Автор рассказывает о написании собственного
https://habr.com/ru/post/469237/
gradle плагина для реализации трансформации кода: добавления функциональности сохранения в Bundle.https://habr.com/ru/post/469237/
Хабр
Трансформация кода в Android
Вторая часть Вместо вступления Всё началось с того, что мне захотелось изучить тонкости настройки Gradle, понять его возможности в Android разработке (да и вообще). Начал с жизненного цикла и...
Доклад с
Также стоит отметить большое количество ссылок на другие источники - это может быть полезным, если необходимо углубиться в данную тему значительно глубже.
https://www.droidcon.com/media-detail?video=352688386
Droidcon Berlin 2019, посвященный анализу данных, которые Google собирает c Android устройств. Позволяет понять чуть больше о том, на основе каких данных строится уникальный отпечаток устройства. Также стоит отметить большое количество ссылок на другие источники - это может быть полезным, если необходимо углубиться в данную тему значительно глубже.
https://www.droidcon.com/media-detail?video=352688386
droidcon
Google Data Collection on Android
Autor droidcon View all posts
И еще один доклад с
-
-
-
-
https://www.droidcon.com/media-detail?video=352671901
Droidcon Berlin 2019. Автор рассказывает о малоизвестных вещах, найденных им в исходниках AndroidX:-
LocalBroadcastManager;-
VersionedParcelable;-
EmojiCompat;-
ImmLeakCleaner.https://www.droidcon.com/media-detail?video=352671901
droidcon
What ~new~ strange things one can find in AndroidX package
AndroidX package is well-know for its smashing hits such as Navigation components, the Room persistence library or LiveData. In my presentation we will not talk about any of them but rather focus on less known packages such as: SavedState, Activity, VersionedParcelable…
Автор рассказывает про механизм анализа
Сам процесс происходит в полуавтоматическом режиме: анализируемые файл прогоняется с помощью
Набор инструментов для анализа достаточно стандартный: для статики -
https://www.droidcon.com/media-detail?video=352670021
apk файлов, используемый в Google Play Protect. Сам процесс происходит в полуавтоматическом режиме: анализируемые файл прогоняется с помощью
ML алгоритмов и если результат подозрительный, то затем происходит ручная проверка - по сути реверс апкшки и её статический и динамический анализ. Набор инструментов для анализа достаточно стандартный: для статики -
apktool, jadx, jeb, IDA, для динамики - Frida, gdb.https://www.droidcon.com/media-detail?video=352670021
droidcon
A day in the life of a mobile reverse engineer
This talk will show you how we handle mobile applications in Android Security from a malware analyst point of view.
Еще один интересный троян-кликер найден в
Дополнительно запакован с помощью пакера
Сам троян был ориентирован на определенный набор стран, взаимодействуя с управляющим сервером, получая команды в виде JavaScript кода и выполняя их в невидимом
https://news.drweb.com/show/?i=13464&lng=en
Google Play. Его основная функция заключалась в незаметной попытке осуществления подписки на платные сервисы. Дополнительно запакован с помощью пакера
Jiagu и пытается мимикрировать под Facebook SDK или Adjust SDK.Сам троян был ориентирован на определенный набор стран, взаимодействуя с управляющим сервером, получая команды в виде JavaScript кода и выполняя их в невидимом
WebView.https://news.drweb.com/show/?i=13464&lng=en
Dr.Web
Clicker for Android subscribes users to paid services
Doctor Web has detected a clicker trojan that can automatically subscribe users to paid services in the official Android app store.
Стартовал
- уже доступна
- для
- визуальный редактор
- наконец-таки обещают полную поддержку
-
https://www.youtube.com/watch?v=5jJ-e278BFY
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
YouTube
Keynote (Android Dev Summit '19)
Event keynote featuring Dave Burke, VP of Engineering and Steph Cuthbertson, Senior Director of Product Management.
Presented by: Dave Burke, Stephanie Cuthbertson, Tian Lim, Romain Guy, Karen Ng
Android Dev Summit '19 all sessions playlist → https://g…
Presented by: Dave Burke, Stephanie Cuthbertson, Tian Lim, Romain Guy, Karen Ng
Android Dev Summit '19 all sessions playlist → https://g…