#AndroidQ
Вышла Android Q Beta 4 и финальное API
Вышла новая Beta Android Q в которой финализировали SDK и вы можете уже скачать 29 версию в Android Studio, а также Build Tools и Platform Tools. Также открыта публикация приложений с compileSdk и/или targetSdk 29. Дальше нас ждёт исправление багов в работе системы и SDK.
Владельцы Pixel всех поколений уже могут накатить новую бетку и похвастаться, а главное рассказать стабильно ли там все работает.
Вышла Android Q Beta 4 и финальное API
Вышла новая Beta Android Q в которой финализировали SDK и вы можете уже скачать 29 версию в Android Studio, а также Build Tools и Platform Tools. Также открыта публикация приложений с compileSdk и/или targetSdk 29. Дальше нас ждёт исправление багов в работе системы и SDK.
Владельцы Pixel всех поколений уже могут накатить новую бетку и похвастаться, а главное рассказать стабильно ли там все работает.
Android Developers Blog
News and insights on the Android platform, developer tools, and events.
#Network
Вышел Retrofit 2.6.0
Что нового:
🎉 Поддержка корутин
👉 Новая аннотация
👉Новая аннотация
👉Поддержка типов header-ок в
👉Исправление багов
Вышел Retrofit 2.6.0
Что нового:
🎉 Поддержка корутин
@GET("users/{id}")
suspend fun user(@Path("id") long id): User
👉 Новая аннотация
@Tag
, позволяющая задать tag для OkHttp Request
. Это можно использовать чтобы идентифицировать запрос👉Новая аннотация
@SkipCallbackExecutor
, которая выполняет callback на том же executor, на котором происходит HTTP запрос👉Поддержка типов header-ок в
@HeaderMap
👉Исправление багов
Как вы заботитесь о производительности в своём приложение?
Final Results
8%
Мониторим ежедневно и сразу исправляем
42%
Смотрим от релиза к релизу
18%
Только когда статистика светится красным
32%
Не заботимся, пусть пользователи телефоны обновляют!
#AndroidX
Обновление AndroidX
Вышло свежая порция обновление библиотек AndroidX. Из интересного:
Стабильная версия Collection 1.1.0 + ktx
👉Улучшена производительность и API Android коллекций
Первая beta Fragment 1.1.0
👉 Создание собственной FragmentFactory, которая будет использоваться для создание
👉 Тестирование
👉 Больше nullability аннотаций в API
👉 Kotlin делегаты
👉 Поддержка задания
👉Креши, выбрасываемые
👉Возможность задать максимальное состояние в
Первая beta Activity 1.0.0
👉 Возможность задать
👉 Новые удобные Kotlin API
👉 Задание content view
Первая beta Preference 1.1.0
👉 Возможность динамического изменения описания
👉 Обновлена
👉 Возможность задания доступности для копирования содержимого с помощью Preference.setCopyingEnabled()
👉 Используйте
👉 Кастомизациия
Обновление AndroidX
Вышло свежая порция обновление библиотек AndroidX. Из интересного:
Стабильная версия Collection 1.1.0 + ktx
👉Улучшена производительность и API Android коллекций
Первая beta Fragment 1.1.0
👉 Создание собственной FragmentFactory, которая будет использоваться для создание
Fragment
. Это позволяет избавиться от рефлексии при создании Fragment
и начать передавать параметры в конструктор.👉 Тестирование
Fragment
в изоляции с помощью FragmentScenario👉 Больше nullability аннотаций в API
👉 Kotlin делегаты
by viewModels()
и by activityViewModels()
для получения ViewModel
👉 Поддержка задания
View
для Fragment
с помощью передачи его в конструктор👉Креши, выбрасываемые
FragmentManager
, теперь содержат информацию о Fragment
👉Возможность задать максимальное состояние в
Lifecycle
для выполнения транзакции FragmentManager
Первая beta Activity 1.0.0
👉 Возможность задать
OnBackPressedCallback
в Activity
👉 Новые удобные Kotlin API
👉 Задание content view
Activity
с помощью аннотации @ContentView
Первая beta Preference 1.1.0
👉 Возможность динамического изменения описания
Preference
с помощью SummaryProvider👉 Обновлена
SeekBarPreference
: соответствие Material Design и возможность обновление во время перемещения ползунка👉 Возможность задания доступности для копирования содержимого с помощью Preference.setCopyingEnabled()
👉 Используйте
PreferenceFragmentCompat
вместо PreferenceFragment
. Аналогично правило теперь действует и для Preference
👉 Кастомизациия
EditText
с помощью EditTextPreference.OnBindEditTextListener#Kotlin
JetBrains запустила Kotlin Hands-On
Kotlin Hands-On - уроки в рамках которых вы можете различные технологии по Kotlin. Сейчас доступно 2 урока: "Introduction to Coroutines and Channels" и "Introduction to Kotlin/Native".
Kotlin Hands-On очень похоже на Google Codelabs и понравится любителям данного сервиса для знакомства с технологиями.
JetBrains запустила Kotlin Hands-On
Kotlin Hands-On - уроки в рамках которых вы можете различные технологии по Kotlin. Сейчас доступно 2 урока: "Introduction to Coroutines and Channels" и "Introduction to Kotlin/Native".
Kotlin Hands-On очень похоже на Google Codelabs и понравится любителям данного сервиса для знакомства с технологиями.
#Dagger #ArchitectureComponents #ViewModel
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
Пример использования:
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
ViewModelProvider.Factory
для ViewModel
из Architecture Components? Процесс не самый удобный, особенно когда в конструктор вы передаете только зависимости из графа . Dagger?Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
ViewModelProvider.Factory
.Пример использования:
class SampleViewModel @AssistedViewModel constructor(
repository:Repository
): ViewModel
class SampleFragment: Fragment {
private lateinit var viewModel: SampleViewModel
@Inject
// AssistedViewModelFactory is generated
fun init(factory: AssistedViewModelFactory) {
viewModel =
ViewModelProviders.of(this, factory)
.get(SampleViewModel::class.java)
}
}
#Performance
Android app startup time: why we care
Почему важна производительность мобильных приложений? На мой взгляд причины следующие:
👉 Улучшение пользовательского опыта использования приложения
👉 Более высокое расположение в Google Play
👉 Возможность работы на более слабых устройствах, что расширяет аудиторию
В статье разбирается из чего состоит запуск приложения, как измерять скорость и оптимизировать её
Android app startup time: why we care
Почему важна производительность мобильных приложений? На мой взгляд причины следующие:
👉 Улучшение пользовательского опыта использования приложения
👉 Более высокое расположение в Google Play
👉 Возможность работы на более слабых устройствах, что расширяет аудиторию
В статье разбирается из чего состоит запуск приложения, как измерять скорость и оптимизировать её
Medium
Android app startup time: why we care
When we talk about mobile applications, performance is a fundamental concept. The low resource availability in these types of devices…
#News
Опрос Android Broadcast
Чтобы сделать контент лучше на канале, очень важно иметь обратную связь от аудитории и пониманить какой контент ей интересене. Уделите 5 минут чтобы ответить на несколько вопросов
Опрос Android Broadcast
Чтобы сделать контент лучше на канале, очень важно иметь обратную связь от аудитории и пониманить какой контент ей интересене. Уделите 5 минут чтобы ответить на несколько вопросов
#Test #Kotlin #DSL
Kotlin DSL, Fixtures и элегантные UI тесты в Android
Рассказ о том как Kotlin DSL помог эффективнее писать UI тесты в HeadHunter
Kotlin DSL, Fixtures и элегантные UI тесты в Android
Рассказ о том как Kotlin DSL помог эффективнее писать UI тесты в HeadHunter
Хабр
Kotlin DSL, Fixtures и элегантные UI тесты в Android
Когда познакомился с Kotlin DSL, подумал: отличная штука, жалко в продуктовой разработке она не пригодится. Однако, я был неправ: он нам помог сделать очень лако...
#Test #Coroutines
Android Testing Codelab теперь содержит информацию про корутины
Теперь в официальной codelab по тестированию на Android можно найти следующую информацию:
👉 Как создать настроить тест корутин
👉 Когда использовать runBlockingTest
👉 Как тестировать Architecture Components
👉 Как использовать TestCoroutineDispatcher для приостановки выполнения корутин
Android Testing Codelab теперь содержит информацию про корутины
Теперь в официальной codelab по тестированию на Android можно найти следующую информацию:
👉 Как создать настроить тест корутин
👉 Когда использовать runBlockingTest
👉 Как тестировать Architecture Components
👉 Как использовать TestCoroutineDispatcher для приостановки выполнения корутин
#Architecture #DynamicFeature #Modularization
Patterns for accessing code from Dynamic Feature Modules
Модуляризация и динамическая доставка модулей - это самый трендовые направления в архитектуре Android направлений. Проблема динамических модулей в том, что код основного приложения не знает о коде в динамическом модуле.
Решение проблемы в лоб - использование рефлексии. Но это решение влияет на производительность, особенно на старых устройствах. Какие решения можно использовать помимо рефлексии:
👉 ServiceLoader
👉 Интеграция с Dagger 2 или Koin 2
👉 Выделение интерфейса для взаимодействия c динамическим модулем из основного путем создания общего модуля. В основной модуль будет подключаться как
В статье рассматривается как реализовать эти подходы (все кроме последнего) и даются советы по модуляризации вашего приложения.
Patterns for accessing code from Dynamic Feature Modules
Модуляризация и динамическая доставка модулей - это самый трендовые направления в архитектуре Android направлений. Проблема динамических модулей в том, что код основного приложения не знает о коде в динамическом модуле.
Решение проблемы в лоб - использование рефлексии. Но это решение влияет на производительность, особенно на старых устройствах. Какие решения можно использовать помимо рефлексии:
👉 ServiceLoader
👉 Интеграция с Dagger 2 или Koin 2
👉 Выделение интерфейса для взаимодействия c динамическим модулем из основного путем создания общего модуля. В основной модуль будет подключаться как
compileOnly
зависимость, а в динамический - implementation
. В статье рассматривается как реализовать эти подходы (все кроме последнего) и даются советы по модуляризации вашего приложения.
Medium
Patterns for accessing code from Dynamic Feature Modules
In this post I am going to show you how to solve a common problem that arises when using dynamic feature modules in your project…
Android Broadcast pinned «#News Опрос Android Broadcast Чтобы сделать контент лучше на канале, очень важно иметь обратную связь от аудитории и пониманить какой контент ей интересене. Уделите 5 минут чтобы ответить на несколько вопросов»
Почему только прокачка кодинга не сделает из тебя лучшего разработчика
Как быть крутым разработчиком? Многие программисты задавались таким вопросом. Я также всегда задавался этим вопросом, но мнение мое меняется с течением времени. В начале я делал большой упор на технические навыки, но со временем мои взгляды менялись и начали смещаться приоритеты. Статья очень подробно отразила их. В ней вы найдете навыки, которые важно иметь хорошему программисту, а главное почему.
Как быть крутым разработчиком? Многие программисты задавались таким вопросом. Я также всегда задавался этим вопросом, но мнение мое меняется с течением времени. В начале я делал большой упор на технические навыки, но со временем мои взгляды менялись и начали смещаться приоритеты. Статья очень подробно отразила их. В ней вы найдете навыки, которые важно иметь хорошему программисту, а главное почему.
Хабр
Почему только прокачка кодинга не сделает из тебя лучшего разработчика
Techlead Skyeng Кирилл Роговой (flashhhh) выступает на конференциях с докладом, в котором рассказывает о навыках, развивать которые стоит каждому хорошему разра...
#Coroutines
Using the synchronized keyword in coroutines?
Coroutine-ы отличаются по своему механизму работы от потоков, соответственно требует отличные от Java механизмы для решения стандартных задач, например
Using the synchronized keyword in coroutines?
Coroutine-ы отличаются по своему механизму работы от потоков, соответственно требует отличные от Java механизмы для решения стандартных задач, например
synchronized
или ReentrantLock
. На замену им рекомендуется использовать Channel или Mutex.Jacques Smuts
Using the synchronized keyword in coroutines?
Working with coroutines is subtly different from normal locking functions. Introduce some thread-safety with mutex.
Какую библиотеку для работы с JSON вы используете?
Final Results
81%
GSON
5%
Jackson
12%
Moshi
1%
JSON Java (org.json)
0%
Другое решение
1%
Не работаю с JSON
#SQLite #Tools
Android SQLite debug tools
Разбор инструментов для дебага SQLite:
👉 SQLScout (платная) - плагин для Android Studio и Intellij IDEA
👉 Facebook Stetho - дебаг Android приложений из Chrome консоли
👉 AppSpector (платная) - сервис для удаленного дебага Android и iOS
👉 SQLiteFlow (macOS, платная) - SQLite редактор
Самый богатая по возможностям из этих утилит - SQLScout. Она строится вокруг работы с SQLite БД и имеет следующие возможности:
👉 поддержка Room
👉 просматривать схему БД
👉 выполнять SQL запросы
👉 просматривать данные, редактировать и экспортировать
👉 визуализировать БД в виде диаграммы
Android SQLite debug tools
Разбор инструментов для дебага SQLite:
👉 SQLScout (платная) - плагин для Android Studio и Intellij IDEA
👉 Facebook Stetho - дебаг Android приложений из Chrome консоли
👉 AppSpector (платная) - сервис для удаленного дебага Android и iOS
👉 SQLiteFlow (macOS, платная) - SQLite редактор
Самый богатая по возможностям из этих утилит - SQLScout. Она строится вокруг работы с SQLite БД и имеет следующие возможности:
👉 поддержка Room
👉 просматривать схему БД
👉 выполнять SQL запросы
👉 просматривать данные, редактировать и экспортировать
👉 визуализировать БД в виде диаграммы
Medium
Android SQLite debug tools
The process of development can be much easier if a developer uses a special tools for debugging.
#Gradle
Gradle Dependency: api vs implementation
Визуализация отличий между подключением зависимостей в Gradle через
Gradle Dependency: api vs implementation
Визуализация отличий между подключением зависимостей в Gradle через
implementation
и api
Twitter
Florina Muntenescu
I keep on forgetting what's the difference between api and implementation, so I made this gif #AndroidDev https://t.co/H3kd55JZHw
#AndroidX #Navigation #Yandex
Как мы внедряли навигацию из Jetpack в боевое приложение. Доклад Яндекс.Еды
Вы уже внедряли к себе решение навигации от Google? Если нет, то вам будет полезен опыт интеграции Navigation Arch Component в Яндекс.Еда
от 1.0.0-alpha3 до стабильного релиза 1.0.0
Видео доклада
Как мы внедряли навигацию из Jetpack в боевое приложение. Доклад Яндекс.Еды
Вы уже внедряли к себе решение навигации от Google? Если нет, то вам будет полезен опыт интеграции Navigation Arch Component в Яндекс.Еда
от 1.0.0-alpha3 до стабильного релиза 1.0.0
Видео доклада
Хабр
Как мы внедряли навигацию из Jetpack в боевое приложение. Доклад Яндекс.Еды
В мобильных приложениях всё чаще используются deep links. Это ссылки, которые позволяют не просто перейти в приложение извне, а попасть на конкретный экран. Android-разработчик из Яндекс.Еды...
#AndroidX
AndroidX Versions
Наконец-то Google упростила способ понять какую версию библиотеки из AndroidX сейчас можно использовать: доступна таблица всех библиотек из AndroidX с текущей стабильной, rc, beta и alpha версиями.
AndroidX Versions
Наконец-то Google упростила способ понять какую версию библиотеки из AndroidX сейчас можно использовать: доступна таблица всех библиотек из AndroidX с текущей стабильной, rc, beta и alpha версиями.
#AndroidStudio #Emulator
Moving Android Studio and Android Emulator to 64-bit versions
Google убивает 32-битные версии Android Studio и эмулятора. В первую очередь это затронет пользователей Windows.
Android Studio 3.6 и Android Emulator 28.0.5 станут последними версиями, содержащие x32 варианты. До конца 2020 года их можно будет скачать, а после ссылки на них будут удалены с официального сайта
Google как всегда слишком мягкие 😔
Moving Android Studio and Android Emulator to 64-bit versions
Google убивает 32-битные версии Android Studio и эмулятора. В первую очередь это затронет пользователей Windows.
Android Studio 3.6 и Android Emulator 28.0.5 станут последними версиями, содержащие x32 варианты. До конца 2020 года их можно будет скачать, а после ссылки на них будут удалены с официального сайта
Google как всегда слишком мягкие 😔