#BKUG #Kotlin #Meetup
Отчет о BKUG #11
11 декабря прошел митап сообщества Belarus Kotlin User Groupd (BKUG). Было рассказано о
👉 новинках в Kotlin 1.3
👉 опыт перехода на Kotlin в Android и о том как развивался язык, и о том как Kotlin упросщает Android разработку
👉 R2DBC - корутины для БД
Отчет о BKUG #11
11 декабря прошел митап сообщества Belarus Kotlin User Groupd (BKUG). Было рассказано о
👉 новинках в Kotlin 1.3
👉 опыт перехода на Kotlin в Android и о том как развивался язык, и о том как Kotlin упросщает Android разработку
👉 R2DBC - корутины для БД
#LibUpdates #AndroidX #Testing
Вышла новая версия библиотеки AndroidX Test 1.1.0
В рамках обновления новинки появились в:
👉 test-core
👉 Espresso
👉 JUnit4 Rules
👉 Runner
👉 Truth
Все библиотеки понемногу были улучшены, улучшена поддержка Robolectric, Android 9.0 и представлено ActivityScenario API. Оно позволяет запускать Activity во время тестов и проводить ее через весь жизненный цикл. Аналогичное API появилось для Fragment - FragmentScenario. Все это поддерживается Robolectric!
Примеры работы с новым API:
Вышла новая версия библиотеки AndroidX Test 1.1.0
В рамках обновления новинки появились в:
👉 test-core
👉 Espresso
👉 JUnit4 Rules
👉 Runner
👉 Truth
Все библиотеки понемногу были улучшены, улучшена поддержка Robolectric, Android 9.0 и представлено ActivityScenario API. Оно позволяет запускать Activity во время тестов и проводить ее через весь жизненный цикл. Аналогичное API появилось для Fragment - FragmentScenario. Все это поддерживается Robolectric!
Примеры работы с новым API:
@RunWith(AndroidJUnit4::class)
class MyTestSuite {
@Test fun testEvent() {
val scenario = ActivityScenario.launch(MyActivity::class.java)
scenario.moveToState(State.CREATED)
}
}
@RunWith(AndroidJUnit4::class)
class MyTestSuite {
@Test fun testEvent() {
val scenario = ActivityScenario.launch(MyActivity::class.java)
scenario.recreate()
}
}
GitHub
Release AndroidX Test 1.1.0 · android/android-test
AndroidX Test Espresso 3.1.1, Runner 1.1.1, Rules 1.1.1, Monitor 1.1.1 AndroidTestOrchestrator 1.1.1, Core 1.1.0 Truth 1.1.0, JUnit 1.1.0 (2018-12-13)
Core
New core-ktx kotlin extension artifact!...
Core
New core-ktx kotlin extension artifact!...
На последнем Android Dev Summit было рассказно об этом API. Ссылка прикреплена к таймингу начала расказа о ActivityScenario.
https://youtu.be/4m2yYSTdvIg?t=734
https://youtu.be/4m2yYSTdvIg?t=734
YouTube
Testing rebooted (with AndroidX Test) (Android Dev Summit '18)
The release of androidx.test v1.0 makes testing a first class citizen of Android developer tools. See how a new set of cross platform APIs enable you to write both unit and integration tests that run in any environment and learn of our upcoming plans for…
#Architecture #MVVM #MVP
Различия между MVVM и остальными MV*-паттернами
Хорошая статья в рамках которой автор показал историю развития MV(Any) паттернов, так и различия между ними и ошибки в понимание.
Вы найдете информацию о:
👉 MVC (Model-View-Controller)
👉 MVP (Model-View-Presenter) в 2 вариациях
👉 Passive View
👉 Supervising Controller
👉Presentation Model
👉MVVM (Model-View-ViewModel)
Presentation Model описывает подход, который использует Google для архитектуры на основе Architecture Components в Android.
Помните самое главное - нет правильной архитектуры, есть только та, которая эффективно решит задачу вашего приложения, и возможно она вполне будет за рамками этого списка. Напишите о ней в @android_broadcast_discussions и я расскажу о ней в канале.
Различия между MVVM и остальными MV*-паттернами
Хорошая статья в рамках которой автор показал историю развития MV(Any) паттернов, так и различия между ними и ошибки в понимание.
Вы найдете информацию о:
👉 MVC (Model-View-Controller)
👉 MVP (Model-View-Presenter) в 2 вариациях
👉 Passive View
👉 Supervising Controller
👉Presentation Model
👉MVVM (Model-View-ViewModel)
Presentation Model описывает подход, который использует Google для архитектуры на основе Architecture Components в Android.
Помните самое главное - нет правильной архитектуры, есть только та, которая эффективно решит задачу вашего приложения, и возможно она вполне будет за рамками этого списка. Напишите о ней в @android_broadcast_discussions и я расскажу о ней в канале.
Habr
Различия между MVVM и остальными MV*-паттернами
От переводчика : Уже опубликовано много материалов по MVC и его производным паттернам, но каждый понимает их по-своему. На этой почве возникают разногласия и холивары. Даже опытные разработчики...
#ArchitectureComponents #MVVM #Architecture
"MVVM with architecture components: a step by step guideline for MVP lovers" by Antonio Leiva
Давным давно в мире Android до Google I/O 2017 в архитектуре Android приложений преимущественно использоваться паттерн MVP, но появление Architecture Component (Arch Comp) начало склонять часу весов в сторону MVVM.
Если вы хотите перейти с MVP на MVVP в вашем приложение, то вам поможет стать от Antonio Leiva, в которой он описал способ миграции на Arch Comp.
"MVVM with architecture components: a step by step guideline for MVP lovers" by Antonio Leiva
Давным давно в мире Android до Google I/O 2017 в архитектуре Android приложений преимущественно использоваться паттерн MVP, но появление Architecture Component (Arch Comp) начало склонять часу весов в сторону MVVM.
Если вы хотите перейти с MVP на MVVP в вашем приложение, то вам поможет стать от Antonio Leiva, в которой он описал способ миграции на Arch Comp.
Antonio Leiva
MVVM with architecture components: a guideline for MVP lovers
Ok, so now that MVVM is the standard to implement Android Apps since Google released their Guide to App architecture, I think it's time to provide some
#DependencyInjection #Koin #Performance
"News from the trenches — What’s next for Koin?" by Arnaud Giuliani
Я большой фанат Dependency Injection (DI) решения на Kotlin - Koin. Почему он мне нравится? Как много расширенного функционала из Dagger 2 вы используете? Из личного опыта я видел много проектов где это не было нужно. Так зачем использовать ракету чтобы перейти улицу 🤔? Поэтому я и предпочитаю Koin для простых проектов.
Я делал доклад по Koin, запись которого вы можете найти здесь.
В статье описывается, что нас ждет в Koin 2.0 🔥. Основные изменения будут:
👉Улучшение производительности на Android 🚀
👉Более удобное API для инициализации
👉Движение в сторону поддержки работы Kotlin Multiplatform Project (финальная поддержка ожидается в Kotlin 2.1)
👉Будет убрана часть функционала в объявление модулей для упрощения работы с ними: вложенные модули, имена модулей и др.
👉Разделение на глобальный (приложение) и локальный (модули/библиотеки) контексты для работы с Koin в многомодульных приложения и SDK.
"News from the trenches — What’s next for Koin?" by Arnaud Giuliani
Я большой фанат Dependency Injection (DI) решения на Kotlin - Koin. Почему он мне нравится? Как много расширенного функционала из Dagger 2 вы используете? Из личного опыта я видел много проектов где это не было нужно. Так зачем использовать ракету чтобы перейти улицу 🤔? Поэтому я и предпочитаю Koin для простых проектов.
Я делал доклад по Koin, запись которого вы можете найти здесь.
В статье описывается, что нас ждет в Koin 2.0 🔥. Основные изменения будут:
👉Улучшение производительности на Android 🚀
👉Более удобное API для инициализации
👉Движение в сторону поддержки работы Kotlin Multiplatform Project (финальная поддержка ожидается в Kotlin 2.1)
👉Будет убрана часть функционала в объявление модулей для упрощения работы с ними: вложенные модули, имена модулей и др.
👉Разделение на глобальный (приложение) и локальный (модули/библиотеки) контексты для работы с Koin в многомодульных приложения и SDK.
Medium
News from the trenches — What’s next for Koin?
This is now 3 months that Koin 1.0 has been launched, the first version tagged as production-ready. This has been also a great period for…
Какую Dependency Injection/Service Locator библиотеку используете вы?
anonymous poll
Dagger 2 – 28
👍👍👍👍👍👍👍 54%
Koin – 17
👍👍👍👍 33%
Другое – 5
👍 10%
Kodein – 2
👍 4%
Dagger 1 by Square
▫️ 0%
Custom
▫️ 0%
👥 52 people voted so far. Poll closed.
anonymous poll
Dagger 2 – 28
👍👍👍👍👍👍👍 54%
Koin – 17
👍👍👍👍 33%
Другое – 5
👍 10%
Kodein – 2
👍 4%
Dagger 1 by Square
▫️ 0%
Custom
▫️ 0%
👥 52 people voted so far. Poll closed.
#Flutter #Dart #Android
MythBuster : 10 Rumors about Flutter, why it’s not worse than Android+Kotlin?
Flutter набирает все большую популярность, формируется сообщество, любители ну и без хейтеров не обходится. В статье автор разрушает самые популярные мифы о Flutter, а именно:
1️⃣ Пользователь заметит, что приложение нативное либо нет
2️⃣ Dart странный язык
3️⃣ Иерархия виджетов во Flutter трудночитаемая
4️⃣ На Flutter вы не можете использовать Gson или Moshi
5️⃣ На Flutter нет корутин 😢
6️⃣ На Android мы реализуем MVVM с LiveData-ами
7️⃣ На выходе у Flutter получается APK большого размера
8️⃣ На Flutter у вас не будет популярных библиотек
9️⃣ Мое SDK не работает на Flutter
🔟 Crashlytics недоступна на Flutter
На мой взгляд автор расписал все хорошо. Flutter - молодая технология. Она использует диковинный язык, имеет свой взгляд на архитектуру приложения, и требования, которые накладываются устройствами, где работают приложения.
Рекомендую всем взглянуть на Flutter, так как чутье мне подсказывает, что кроссплатформенная разработка будет становится все популярнее у бизнеса, особенно аутсорс.
Но после прочтения статьи у меня все также остаются вопросы:
❓Читабельны ли будут стектрейсы крешей в Crashlytics?
❓Можно ли сейчас сделать Instant App с Flutter?
❓Что с взаимодействием с железным API: камера, датчики, модули связи и пр. ?
❓Как решаются проблемы с разным видом стандартного UI в ОС? Например, уведомления в системной панели.
❓Насколько быстро добавляется поддержка свежих версий ОС (Android Q и iOS 13)?
MythBuster : 10 Rumors about Flutter, why it’s not worse than Android+Kotlin?
Flutter набирает все большую популярность, формируется сообщество, любители ну и без хейтеров не обходится. В статье автор разрушает самые популярные мифы о Flutter, а именно:
1️⃣ Пользователь заметит, что приложение нативное либо нет
2️⃣ Dart странный язык
3️⃣ Иерархия виджетов во Flutter трудночитаемая
4️⃣ На Flutter вы не можете использовать Gson или Moshi
5️⃣ На Flutter нет корутин 😢
6️⃣ На Android мы реализуем MVVM с LiveData-ами
7️⃣ На выходе у Flutter получается APK большого размера
8️⃣ На Flutter у вас не будет популярных библиотек
9️⃣ Мое SDK не работает на Flutter
🔟 Crashlytics недоступна на Flutter
На мой взгляд автор расписал все хорошо. Flutter - молодая технология. Она использует диковинный язык, имеет свой взгляд на архитектуру приложения, и требования, которые накладываются устройствами, где работают приложения.
Рекомендую всем взглянуть на Flutter, так как чутье мне подсказывает, что кроссплатформенная разработка будет становится все популярнее у бизнеса, особенно аутсорс.
Но после прочтения статьи у меня все также остаются вопросы:
❓Читабельны ли будут стектрейсы крешей в Crashlytics?
❓Можно ли сейчас сделать Instant App с Flutter?
❓Что с взаимодействием с железным API: камера, датчики, модули связи и пр. ?
❓Как решаются проблемы с разным видом стандартного UI в ОС? Например, уведомления в системной панели.
❓Насколько быстро добавляется поддержка свежих версий ОС (Android Q и iOS 13)?
ProAndroidDev
MythBuster : 10 Rumors about Flutter, why it’s not worse than Android+Kotlin ?
The problem with Flutter ? Every developer has myth about it, “I don’t want to develop on Flutter because #%&ç*”, let’s bust those myths !
#Library
Valigator
Полезная библиотека, позволяющая удобно писать валидаторы, для EditText на Kotlin.
Valigator
Полезная библиотека, позволяющая удобно писать валидаторы, для EditText на Kotlin.
GitHub
GitHub - radoyankov/valigator: Validation tools for EditText fields
Validation tools for EditText fields. Contribute to radoyankov/valigator development by creating an account on GitHub.
#Library #Span
Rialto by Mark Allison
В Android есть поддержка парсинга HTML текста с форматированием, например:
```<string name=”noscript”>Best practices for <b>text</b> on Android</string>```
с помощью android.text.Annotation вы можете кастомизировать существующие стили или вовсе добавлять новые. Например:
```<string name=”noscript”>Best practices for <annotation font=”noscript_emphasis”>text</annotation> on Android</string>```
Также важным является то, что таким образом любой ваш кастомный Span может быть сериализован и передан в другое приложение и восстановлен.
Но не все так сладко, так как чтобы все это заработало необходимо добавить много кода вокруг для обработки Annotation. Mark Allison решил упростить эту задачу и сделал библиотеку Rialto для этого. Подробности найдете в документации на Github и из серии статей:
AnnotationSpans – Part 1
AnnotationSpans – Part 2
Rialto – Getting Started
Rialto – Advanced Usage
Rialto: V1.1.0
Rialto by Mark Allison
В Android есть поддержка парсинга HTML текста с форматированием, например:
```<string name=”noscript”>Best practices for <b>text</b> on Android</string>```
с помощью android.text.Annotation вы можете кастомизировать существующие стили или вовсе добавлять новые. Например:
```<string name=”noscript”>Best practices for <annotation font=”noscript_emphasis”>text</annotation> on Android</string>```
Также важным является то, что таким образом любой ваш кастомный Span может быть сериализован и передан в другое приложение и восстановлен.
Но не все так сладко, так как чтобы все это заработало необходимо добавить много кода вокруг для обработки Annotation. Mark Allison решил упростить эту задачу и сделал библиотеку Rialto для этого. Подробности найдете в документации на Github и из серии статей:
AnnotationSpans – Part 1
AnnotationSpans – Part 2
Rialto – Getting Started
Rialto – Advanced Usage
Rialto: V1.1.0
GitHub
GitHub - StylingAndroid/Rialto
Contribute to StylingAndroid/Rialto development by creating an account on GitHub.
#R8 #Optimization #Kotlin
"R8 Optimization: Staticization" by Jake Wharton|Google
Новая часть статей о компиляции Java кода в Android. В новой статье рассматривается R8 - замена ProGuard от Google. R8 - это не отдельная утилита, а расширение D8, либо более простая формула R8 = D8 + оптимизации.
В статье рассматривается первая оптимизация, которую выполняет R8 - конвертация обычных методов в статические. Вы можете узнать о том, как это выполняется для Companion Object классов в Kotlin.
"R8 Optimization: Staticization" by Jake Wharton|Google
Новая часть статей о компиляции Java кода в Android. В новой статье рассматривается R8 - замена ProGuard от Google. R8 - это не отдельная утилита, а расширение D8, либо более простая формула R8 = D8 + оптимизации.
В статье рассматривается первая оптимизация, которую выполняет R8 - конвертация обычных методов в статические. Вы можете узнать о том, как это выполняется для Companion Object классов в Kotlin.
Jake Wharton
R8 Optimization: Staticization – Jake Wharton
#Dagger #Modularization #Architecture
"Using Dagger in a multi-module project" by Marcos Holgado
Последний тренд в архитектуре Android приложений - это модуляризация (разбиение на Gradle модули). Ее преимущества:
👉 изоляцию функционала друг от друга
👉 более высокая скорость инкрементальной сборки проекта
👉 возможность поддержки Instant Apps и Dynamic Features
👉 меньше конфликтов при работе нескольких разработчиков над проектом.
Преимущества этого подхода прекрасны, но проблема в том, что интеграция подхода в проект непроста, особенно если в уже существующий.
Одна из трудных задач при миграции в многомодульный проект - это разделение графа зависимостей Dagger. В статье вы найдете путеводитель, как пройти путь от одного модуля в множество и нигде не заплутать.
Хорошее видео о модуляризация вашего приложения от Денис Неклюдов — "Как не состариться во время сборки: Kapt и другие приключения"
"Using Dagger in a multi-module project" by Marcos Holgado
Последний тренд в архитектуре Android приложений - это модуляризация (разбиение на Gradle модули). Ее преимущества:
👉 изоляцию функционала друг от друга
👉 более высокая скорость инкрементальной сборки проекта
👉 возможность поддержки Instant Apps и Dynamic Features
👉 меньше конфликтов при работе нескольких разработчиков над проектом.
Преимущества этого подхода прекрасны, но проблема в том, что интеграция подхода в проект непроста, особенно если в уже существующий.
Одна из трудных задач при миграции в многомодульный проект - это разделение графа зависимостей Dagger. В статье вы найдете путеводитель, как пройти путь от одного модуля в множество и нигде не заплутать.
Хорошее видео о модуляризация вашего приложения от Денис Неклюдов — "Как не состариться во время сборки: Kapt и другие приключения"
Medium
Using Dagger in a multi-module project
Struggling to use dagger in a multi-module project? This article should help you a lot so you don’t waste the time I wasted a year ago.
#Google Play
In reviews we trust — Making Google Play ratings and reviews more trustworthy
В Google Play провели тотальную чистку отзывов и рейтингов, которые посчитали неприемлемыми: фейковые, нарушающие политику Google Play или специально предназначенные для занижения или завышения рейтинга приложения.
In reviews we trust — Making Google Play ratings and reviews more trustworthy
В Google Play провели тотальную чистку отзывов и рейтингов, которые посчитали неприемлемыми: фейковые, нарушающие политику Google Play или специально предназначенные для занижения или завышения рейтинга приложения.
Android Developers Blog
In reviews we trust — Making Google Play ratings and reviews more trustworthy
Posted by Fei Ye, Software Engineer and Kazushi Nagayama, Ninja Spamologist Google Play ratings and reviews are extremely importa...
#Gradle #Kotlin
Gradle Site plugin was updated to 5.0
Не так давно вышел Gradle 5.0 и вот только сейчас Gradle полностью обновила пример по написанию своих собственных плагинов, добавив все новые функции. и теперь пример полностью на Kotlin 🎉.
Gradle Site plugin was updated to 5.0
Не так давно вышел Gradle 5.0 и вот только сейчас Gradle полностью обновила пример по написанию своих собственных плагинов, добавив все новые функции. и теперь пример полностью на Kotlin 🎉.
#Kotlin #Performance #Benchmark
"Kotlin performance on Android" от Александра Смирнова
Kotlin - прекрасный язык, предоставивший нам много синтаксиса и возможностей, позволяющих упростить реализацию задач. Но какова цена этого сахара? В статье вы можете найти сравнение производительности основных фичей Kotlin и того как они могут влиять на скорость работы приложения на устройствах.
Спойлер результатов - все примерно одинаково, но если вы еще включите R8/Proguard то результаты будут лучше, так что используйте их для релизных сборок вашего приложения.
"Kotlin performance on Android" от Александра Смирнова
Kotlin - прекрасный язык, предоставивший нам много синтаксиса и возможностей, позволяющих упростить реализацию задач. Но какова цена этого сахара? В статье вы можете найти сравнение производительности основных фичей Kotlin и того как они могут влиять на скорость работы приложения на устройствах.
Спойлер результатов - все примерно одинаково, но если вы еще включите R8/Proguard то результаты будут лучше, так что используйте их для релизных сборок вашего приложения.
Хабр
Kotlin performance on Android
Поговорим сегодня о производительности Kotlin на Android в production. Посмотрим под капот, реализуем хитрые оптимизаци, сравним байт-код. Наконец, серьезно подо...