We Love Android
622 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Как же не хватало еще одно библиотеки для загрузки изображений. Вот она - Coil. (Жаль, что не Koil)

Киллер-фичи:
- реализована на Kotlin,
- на корутинах,
- относительно малое количество строк кода,
- не использует annotation processing,
- dynamic image sampling.

https://coil-kt.github.io/coil/
https://github.com/coil-kt/coil/
Вышла стабильная Android Studio 3.5.

Как заверяют разработчики было поправлено около 600 багов, 50 утечек памяти, 20 зависаний. Сколько утечек памяти было добавлено почему-то не сообщается.

Некоторые особенности:
- Instant Run убрали, ему на замену Apply Changes
- IDE стала давать больше рекомендаций о необходимости добавить память или выключить антивирус
- улучшена инкрементальная сборка
- правки в Layout Editor
- наконец-таки добавили возможность использования нескольких версий NDK (!!!)

Полная информация тут:

https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html

https://www.youtube.com/watch?v=OJ3K90FpQ6A
Автор рассказывает, как с помощью ProcessLifecycleOwner можно достаточно легко реализовать механизм, вычисляющий продолжительность сессии приложения.

https://proandroiddev.com/android-processlifecycleowner-by-example-2f965061b9da
Мигающий layout - это определенно то, чего не хватает в современном Android-приложении. Достаточно забавная пасхалка от Romain Guy.

https://medium.com/@anoopss/you-thought-you-knew-android-e46a556d0773
Обзор библиотеки для внедрения зависимостей Koin.

Простота использования, удобство DSL, поддержка из коробки ViewModel из AAC - основные особенности, на которые обращает внимание автор.

Также присутствует сравнение с Dagger и обзор фишек, появившихся в Koin 2.0.

https://www.youtube.com/watch?v=chCsNkjotfc
Достаточно удобный ресурс, где в одном месте можно посмотреть актуальную версию и релиз-ноуты AndroidX библиотек.

https://androidx.tech/
Троян в приложении, которое скачали более 100 миллионов раз? Почему бы и нет. Именно на этом попался CamScanner – Phone PDF creator.

Шифрование и удаленная загрузка модулей - схема знакомая и стандартная.

https://securelist.com/dropper-in-google-play/92496/
Автор рассматривает режимы наложения одного изображения на другое с помощью PorterDuff.Mode. Статья насыщена большим количеством примеров.

https://medium.com/better-programming/practical-image-porterduff-mode-usage-in-android-3b4b5d2e8f5f
В новой версии библиотек AndroidX Fragment и AndroidX Activity появилась возможность устанавливать необходимый файл разметки, передавая его через конструктор. В таком случае необходимость в setContentView отпадает. В некоторых случаях - это было единственное действие в onCreate, что, в конечном итоге, позволяет его не переопределять.

https://www.bignerdranch.com/blog/activity-and-fragment-layouts-with-androidx/
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