We Love Android
622 subscribers
259 photos
26 videos
4 files
630 links
Новости из мира Android-разработки
Download Telegram
Интересный подход для реализации навигации в многомодульном Android-приложении.

https://overflow.buffer.com/2019/07/30/library-module-navigation-in-android-applications/
Автор рассматривает преимущества и недостатки различных подходов для получения данных внутри ViewModel.

https://proandroiddev.com/when-to-load-data-in-viewmodels-ad9616940da7
Опубликован исходный код приложения Google I/O 19. Google пытается показать людям лучшие практики в использовании Android Architecture Components. Изучить определенно стоит.

https://github.com/google/iosched
Как же не хватало еще одно библиотеки для загрузки изображений. Вот она - 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