#GooglePlay
Google Mobile Developer Day at Game Developers Conference 2019
Google принимает участие в Game Developers Conference и сделала интересные анонсы:
👉 Теперь предварительная регистрация доступна для всех. Этот механизм позволяет заранее узнать о выходе продукта и подписаться пользователям на анонс приложения/игры, когда оно станет доступно в Google Play
👉 Увеличен размер конечной APK, получаемой из Android App Bundles, до 150 МБ (раньше было 100 МБ)
👉 Возможность кастомизации описания приложения в разных странах
👉 Обновление A/B тестов с описанием приложения в Google Play: теперь можно поменять описание для пользователей кто уже посетил страничку приложения.
Google Mobile Developer Day at Game Developers Conference 2019
Google принимает участие в Game Developers Conference и сделала интересные анонсы:
👉 Теперь предварительная регистрация доступна для всех. Этот механизм позволяет заранее узнать о выходе продукта и подписаться пользователям на анонс приложения/игры, когда оно станет доступно в Google Play
👉 Увеличен размер конечной APK, получаемой из Android App Bundles, до 150 МБ (раньше было 100 МБ)
👉 Возможность кастомизации описания приложения в разных странах
👉 Обновление A/B тестов с описанием приложения в Google Play: теперь можно поменять описание для пользователей кто уже посетил страничку приложения.
Android Developers Blog
Google Mobile Developer Day at Game Developers Conference 2019
Posted by Kacey Fahey, Developer Marketing, Google Play & Android We're excited to host the Google Mobile Developer Day at Game Deve...
#Coroutines #Architecture #ViewModel
Easy Coroutines in Android: viewModelScope
Coroutine имеют очень хорошую возможность - CoroutineScope, которые позволяют вам автоматически отменять выполнение всех Coroutine, связанных с ним. Это очень эффективно помогает при работе с UI, например при запуске Coroutine в Activity/Fragment/ViewModel.
Google активно поддерживает Coroutine и в AndroidX Lifecycle v2.1.0 добавлена поддержка CoroutineScope для ViewModel с помощью
Ждем релиза новой версии библиотеки ⌛
Easy Coroutines in Android: viewModelScope
Coroutine имеют очень хорошую возможность - CoroutineScope, которые позволяют вам автоматически отменять выполнение всех Coroutine, связанных с ним. Это очень эффективно помогает при работе с UI, например при запуске Coroutine в Activity/Fragment/ViewModel.
Google активно поддерживает Coroutine и в AndroidX Lifecycle v2.1.0 добавлена поддержка CoroutineScope для ViewModel с помощью
viewModelScope
extension property. Подробности использования и реализации вы можете найти в статье!Ждем релиза новой версии библиотеки ⌛
Medium
Easy Coroutines in Android: viewModelScope
Cancelling coroutines when they are no longer needed can be a task easy to forget, it’s monotonous work and adds a lot of boilerplate code…
#Architecture #ViewModel #MVVM #ArchComponents
MVVM — How View and ViewModel should communicate?
Выбор архитектуру - важный вопрос для любого проекта, но приняв это решение, надо понимать как эффективно реализовать его, чтобы получить все преимущества от.
На текущий момент очень популярным решением стало MVVM (Model-View-ViewModel). Рост спроса на эту архитектуру подкрепился тем, что разработчики из Google сделали готовые компоненты для удобной реализации этого подхода, что значительно упрощает задачу.
Замечание: классический MVVM, описанный в Microsoft, отличается от того что обычно применяется в Android
Чтобы сделать MVVM качественно надо придерживаться нескольких правил:
👉 У каждого компонента есть четкая роль:
👉
👉 Когда происходит клик или прочие события на UI,
👉
👉 При модификации данных в
👉 ViewModel может предоставлять дополнительные методы для View. В случаях когда у вас много логики в
Следование правилам, описанным выше, позволит вам:
👉 реализовать эффективную архитектуру в Android
👉 не иметь проблем с жизненным циклом
👉 не думать о сохранение данных при повороте экрана
👉 позволит покрыть логику Unit тестами
👉 упростит расширение функционала в будущем
MVVM — How View and ViewModel should communicate?
Выбор архитектуру - важный вопрос для любого проекта, но приняв это решение, надо понимать как эффективно реализовать его, чтобы получить все преимущества от.
На текущий момент очень популярным решением стало MVVM (Model-View-ViewModel). Рост спроса на эту архитектуру подкрепился тем, что разработчики из Google сделали готовые компоненты для удобной реализации этого подхода, что значительно упрощает задачу.
Замечание: классический MVVM, описанный в Microsoft, отличается от того что обычно применяется в Android
Чтобы сделать MVVM качественно надо придерживаться нескольких правил:
👉 У каждого компонента есть четкая роль:
View
отвечает за отображение данных, VM
- предоставляет данные, которые отобразятся на View
и обрабатывает события, связанные с данными в ней👉
VM
содержит только логику. Он не должен содержать никаких классов из Android SDK, все платформенное API должно предоставляться через абстракции в виде интерфейсов.👉 Когда происходит клик или прочие события на UI,
View
только сообщается VM
о произошедшем событие (простым вызовом метода в VM
) и не выполняет какой-либо логики👉
VM
не знает ничего о View
👉 При модификации данных в
VM
они сразу же должны отображаться в View
. Эффективный способ достичь этого - использовать LiveData. Это позволяет организовать push взаимодействие между VM
и View
, что дает мгновенное отображение любых изменений в данных на экране.👉 ViewModel может предоставлять дополнительные методы для View. В случаях когда у вас много логики в
VM
можно вынести ее в отдельный класс - Presenter
, который служит медиатором между VM
. В таком случае VM
будет служить чистым контейнером состояния View
.Следование правилам, описанным выше, позволит вам:
👉 реализовать эффективную архитектуру в Android
👉 не иметь проблем с жизненным циклом
👉 не думать о сохранение данных при повороте экрана
👉 позволит покрыть логику Unit тестами
👉 упростит расширение функционала в будущем
#MachineLearning #TensorFlow
TensorFlow Dev Summit key takeaways for Android Developers
На прошедшем TensorFlow Dev Summit было объявлено несколько важных новостей касательно работы этого фреймворка на Android:
👉 Ускорение TensorFlow Lite на GPU, которая увеличивает скорость 2-7 раз на устройствах с OpenGL ES 3.1 (Android 5.0+)
👉 Улучшена документация. больше примеров
👉 Запуск более сложных моделей на устройстве
TensorFlow Dev Summit key takeaways for Android Developers
На прошедшем TensorFlow Dev Summit было объявлено несколько важных новостей касательно работы этого фреймворка на Android:
👉 Ускорение TensorFlow Lite на GPU, которая увеличивает скорость 2-7 раз на устройствах с OpenGL ES 3.1 (Android 5.0+)
👉 Улучшена документация. больше примеров
👉 Запуск более сложных моделей на устройстве
#Gradle
Gradle 5.3 Released
Вышла новая версия Gradle. Релиз содержит следующие обновления:
👉 Feature variants (аналогично опциональным зависимостям в Maven)
👉 Обновление Kotlin DSL
👉 Gradle Module Metadata 1.0 - новый формат метаданных, которые решает проблемы Maven POM
👉 Исправление багов
Gradle 5.3 Released
Вышла новая версия Gradle. Релиз содержит следующие обновления:
👉 Feature variants (аналогично опциональным зависимостям в Maven)
👉 Обновление Kotlin DSL
👉 Gradle Module Metadata 1.0 - новый формат метаданных, которые решает проблемы Maven POM
👉 Исправление багов
blog.gradle.org
Introducing Gradle Module Metadata
Gradle Module Metadata reaches 1.0 in Gradle 5.3 and here we explain why you should be as excited as we are!
#Performance #Gradle #Marble #AndroidGradlePlugin
Improving build speed in Android Studio
Статья о том как Google старается улучшить скорость сборки приложения в Android Studio (AS), хотя не совсем это получается по результатам работы на разных проектах. Причин этому несколько:
👉 Рост кодовой базы
👉 Spectre и Meltdown патчи снизили скорость процессоров
👉 Сторонние и собственные Gradle плагины, которые не поддерживают API последних версий Gradle, позволяющих ускорить сборку
👉 Использование Java 8 - приводит к работе desugar, что увеличивает время сборки. D8 и R8 позволяют снизить негативный эффект.
👉 Использование Kotlin, в особенности Kotlin annotation processing (KAPT), влияет на сборку
👉 Множество библиотек, построенных на Android Support Library, и требующих работы Jetifier при использование AndroidX библиотек
Для того чтобы решить проблемы Google активно работает с Gradle и JetBrains.
Google сделала множество улучшений в последних версиях Android Gradle Plugin:
👉 namespaced resources
👉 Инкрементальный annotation processor
👉 Поддержка Gradle Worker API
👉 Миграция на Gradle Lazy API
Как исправить положение дел в вашем проекте:
👉 Анализируйте производительность сборки вашего проекта с помощью Gradle Scan или Gradle profiler
👉 Используйте Gradle Lazy API, избегайте использовать I/O или любых других длительных операций
👉 Настраивайте все task-и в фазе конфигурации
👉 Настраивайте входные и выходные файлы/папки, чтобы ваши результат task-ов могли кэшироваться
👉 Разделяйте большие task-и на более мелкие, чтобы они могли кэшироваться независимо и выполняться инкрементально
👉 Убедитесь что один task не затирает результаты другого
👉 Используйте языки со статической типизацией (Java/Kotlin) вместо динамически типизируемых (Groovy) для написания ваших плагинов и Gradle скриптов
Improving build speed in Android Studio
Статья о том как Google старается улучшить скорость сборки приложения в Android Studio (AS), хотя не совсем это получается по результатам работы на разных проектах. Причин этому несколько:
👉 Рост кодовой базы
👉 Spectre и Meltdown патчи снизили скорость процессоров
👉 Сторонние и собственные Gradle плагины, которые не поддерживают API последних версий Gradle, позволяющих ускорить сборку
👉 Использование Java 8 - приводит к работе desugar, что увеличивает время сборки. D8 и R8 позволяют снизить негативный эффект.
👉 Использование Kotlin, в особенности Kotlin annotation processing (KAPT), влияет на сборку
👉 Множество библиотек, построенных на Android Support Library, и требующих работы Jetifier при использование AndroidX библиотек
Для того чтобы решить проблемы Google активно работает с Gradle и JetBrains.
Google сделала множество улучшений в последних версиях Android Gradle Plugin:
👉 namespaced resources
👉 Инкрементальный annotation processor
👉 Поддержка Gradle Worker API
👉 Миграция на Gradle Lazy API
Как исправить положение дел в вашем проекте:
👉 Анализируйте производительность сборки вашего проекта с помощью Gradle Scan или Gradle profiler
👉 Используйте Gradle Lazy API, избегайте использовать I/O или любых других длительных операций
👉 Настраивайте все task-и в фазе конфигурации
👉 Настраивайте входные и выходные файлы/папки, чтобы ваши результат task-ов могли кэшироваться
👉 Разделяйте большие task-и на более мелкие, чтобы они могли кэшироваться независимо и выполняться инкрементально
👉 Убедитесь что один task не затирает результаты другого
👉 Используйте языки со статической типизацией (Java/Kotlin) вместо динамически типизируемых (Groovy) для написания ваших плагинов и Gradle скриптов
Medium
Improving build speed in Android Studio
Posted by Leo Sei, Product manager on Android Studio
#AppBundle #GooglePlay #Instant
The latest Android App Bundle updates including the additional languages API
Google представили обновления Android App Bundle и его работе в Google Play:
👉Дополнительное API по установке языков, которое позволяет показывать пользователю диалог с выбором языков для установки, а также получить список всех установленных языков. API доступно в Play Core Library 1.4.0.
👉Поддержка Google Play Instant в App Bundle, теперь можно загружать Android App Bundle, который содержит модули для Google Play Instant
👉Удаление dymanic feature модулей, встроенных в приложение, при установке приложения. Это позволит удалять модули, для которых выставлено
👉Теперь необязательно заливать ключ для Google Play App Signing и артефакт, подписанный этим ключом, перед этим. Больше подробностей здесь.
The latest Android App Bundle updates including the additional languages API
Google представили обновления Android App Bundle и его работе в Google Play:
👉Дополнительное API по установке языков, которое позволяет показывать пользователю диалог с выбором языков для установки, а также получить список всех установленных языков. API доступно в Play Core Library 1.4.0.
👉Поддержка Google Play Instant в App Bundle, теперь можно загружать Android App Bundle, который содержит модули для Google Play Instant
👉Удаление dymanic feature модулей, встроенных в приложение, при установке приложения. Это позволит удалять модули, для которых выставлено
onDemand="false"
.👉Теперь необязательно заливать ключ для Google Play App Signing и артефакт, подписанный этим ключом, перед этим. Больше подробностей здесь.
Android Developers Blog
The latest Android App Bundle updates including the additional languages API
Posted by Wojtek Kaliciński, Developer Advocate, Android Last year, we launched Android App Bundles and Google Play's Dynamic Delivery...
#AndroidKTX #Drawing #Kotlin
Android Canvas APIs with Kotlin and KTX
Библиотека Android KTX значительно упрощает разработку приложений на Kotlin, предоставляя Kotlin расширения для API из Android SDK.
Одно из таких удобных расширений - расширения для Canvas API.
Давайте посмотрим на результаты работы с новым API.
Без Android KTX:
С Android KTX
Плюсы от использования Android KTX - более читабельный код и невозможность избежать ошибки с вызовами
Android Canvas APIs with Kotlin and KTX
Библиотека Android KTX значительно упрощает разработку приложений на Kotlin, предоставляя Kotlin расширения для API из Android SDK.
Одно из таких удобных расширений - расширения для Canvas API.
Давайте посмотрим на результаты работы с новым API.
Без Android KTX:
val translateCheckpoint = canvas.save()
canvas.translate(200f, 300f)
canvas.drawCircle(...)
val rotateCheckpoint = canvas.save()
canvas.rotate(45f)
canvas.drawRect(...)
canvas.restoreToCount(rotateCheckpoint)
canvas.restoreToCount(translateCheckpoint)
С Android KTX
canvas.withTranslate(200f, 300f) {
drawCircle(...)
withRotate(45f) {
drawRect(...)
}
}
Плюсы от использования Android KTX - более читабельный код и невозможность избежать ошибки с вызовами
save
/restore()
.#Debug #Native
Debugging Native Crashes in Android Apps
По статистике на декабрь 2018 года 100 самых популярных приложений были установлены 54 миллиарда раз из 85 из них содержат нативный код.
Хотите сделать конкурента таким приложением или статью часть их команды? Без знания C/C++ уже не обойтись с ростом навыков, но любому разработчику будет полезно знать как дебажить такой код.
В статье вы найдете руководство с чего начать поиск проблемы, когда ваше приложение падает на уровне нативного кода.
Debugging Native Crashes in Android Apps
По статистике на декабрь 2018 года 100 самых популярных приложений были установлены 54 миллиарда раз из 85 из них содержат нативный код.
Хотите сделать конкурента таким приложением или статью часть их команды? Без знания C/C++ уже не обойтись с ростом навыков, но любому разработчику будет полезно знать как дебажить такой код.
В статье вы найдете руководство с чего начать поиск проблемы, когда ваше приложение падает на уровне нативного кода.
Medium
Debugging Native Crashes in Android Apps
A Simple End-to-End Example with ProGuard
#StrcitMode #Performance
StrictModeCompat Library
Я реализовал библиотеку StrictModeCompat для удобной работы с StrictMode на всех версиях Android. Она позволяет безопасно вызывать любой метод аналогично тому, как это сделано в AndroidX. В статье ниже вы найдете описание проблемы и как подключить библиотеку к вашему проекту.
StrictModeCompat Library
Я реализовал библиотеку StrictModeCompat для удобной работы с StrictMode на всех версиях Android. Она позволяет безопасно вызывать любой метод аналогично тому, как это сделано в AndroidX. В статье ниже вы найдете описание проблемы и как подключить библиотеку к вашему проекту.
Medium
StrictModeCompat Library
Init StrcitMode safely on any Android version
#Material #Design #BottomSheet
Hands-on with Material Components for Android: Bottom Sheet
Третья статья из серии о компонентах Material Design и как их использовать в Android. В текущей рассматривается Bottom Sheet:
👉 Виды Bottom Sheet
👉 Базисы использования
👉 BottomSheetBehavior
👉 Состояния Bottom Sheet и как его сохранить
👉 Оповещение об изменение состояния
👉 Кастомизация
Hands-on with Material Components for Android: Bottom Sheet
Третья статья из серии о компонентах Material Design и как их использовать в Android. В текущей рассматривается Bottom Sheet:
👉 Виды Bottom Sheet
👉 Базисы использования
👉 BottomSheetBehavior
👉 Состояния Bottom Sheet и как его сохранить
👉 Оповещение об изменение состояния
👉 Кастомизация
Medium
Hands-on with Material Components for Android: Bottom Sheets
Part 3 of a series covering practical usage of Material Components for Android
#Rx #Library #RxJava
Rxify: Retry with Exponential Backoff in RxJava
Библиотека для всех любителей RxJava, которая позволяет повторять выполнение Observable, при появление ошибке с экспоненциальным таймаутом повторения.
Rxify Github Repo
Rxify: Retry with Exponential Backoff in RxJava
Библиотека для всех любителей RxJava, которая позволяет повторять выполнение Observable, при появление ошибке с экспоненциальным таймаутом повторения.
Rxify Github Repo
Medium
Rxify: Exponential Backoff on retry
Whenever we think of retrying there are quite a few options available to us. Create a custom solution with recursion perhaps or maybe an…
#Vector #Drawable #
Alex Lockwood - Vector workflows | Øredev 2018
Запись доклада о векторной графики в Android: устройство, ограничения, крутые фичи и пр.
Alex Lockwood - Vector workflows | Øredev 2018
Запись доклада о векторной графики в Android: устройство, ограничения, крутые фичи и пр.
Vimeo
Alex Lockwood - Vector workflows | Øredev 2018
Vector assets are lightweight and sharp on every screen size, but working with them can be complicated. Android doesn’t directly support SVG, potentially leading…
#Marbel #Emulator
Android Emulator : Project Marble Improvements
Project Marble шагает по инструментарию разработчиков. Настала очередь рассказа изменений в эмуляторе. Разработчики жаловались на то, что Android эмулятор потребляет много системных ресурсов. Googleры решили уменьшить потребление CPU ресурсов. Результаты этой работы можно посмотреть в Android Emulator 28.1, который доступен в Canary канале.
Что именно было сделано:
1️⃣ Теперь устройства в эмуляторе по умолчанию работают от батареи (а не от зарядки). Это связано с тем, что большая часть сервисов оптимизирована для экономного расхода заряда батареи. Эти оптимизации работают только если устройство не заряжается.
2️⃣ Возможность поставить эмулятор на паузу. Это позволяет уменьшить расход ресурсов, когда вы не используете эмулятор, например во время правок кода. Используйте
3️⃣ Снижение затрат на отрисовку. Теперь отрисовка стала эффективнее (график приведен ниже) и повышена частота кадров
4️⃣ Оптимизация IO операций на macOS. Это позволило здорово сократить нагрузку на CPU c ~10% до ~3%
5️⃣ Headless Build (запуск эмулятора без UI). Это функция пригодится тем кто использует эмуляторы на CI или вам не нужно тестировать UI. Она позволяет сократить потребление RAM на 100 Mb
Android Emulator : Project Marble Improvements
Project Marble шагает по инструментарию разработчиков. Настала очередь рассказа изменений в эмуляторе. Разработчики жаловались на то, что Android эмулятор потребляет много системных ресурсов. Googleры решили уменьшить потребление CPU ресурсов. Результаты этой работы можно посмотреть в Android Emulator 28.1, который доступен в Canary канале.
Что именно было сделано:
1️⃣ Теперь устройства в эмуляторе по умолчанию работают от батареи (а не от зарядки). Это связано с тем, что большая часть сервисов оптимизирована для экономного расхода заряда батареи. Эти оптимизации работают только если устройство не заряжается.
2️⃣ Возможность поставить эмулятор на паузу. Это позволяет уменьшить расход ресурсов, когда вы не используете эмулятор, например во время правок кода. Используйте
adb emu avd pause
/resume
для теста.3️⃣ Снижение затрат на отрисовку. Теперь отрисовка стала эффективнее (график приведен ниже) и повышена частота кадров
4️⃣ Оптимизация IO операций на macOS. Это позволило здорово сократить нагрузку на CPU c ~10% до ~3%
5️⃣ Headless Build (запуск эмулятора без UI). Это функция пригодится тем кто использует эмуляторы на CI или вам не нужно тестировать UI. Она позволяет сократить потребление RAM на 100 Mb