Size: a a a

Android Broadcast

2019 March 18
Android Broadcast
Билеты на Kotlin Conf появились в продаже. Твит.
источник
2019 March 19
Android Broadcast
#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: теперь можно поменять описание для пользователей кто уже посетил страничку приложения.
источник
Android Broadcast
#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 с помощью viewModelScope extension property. Подробности использования и реализации вы можете найти в статье!

Ждем релиза новой версии библиотеки ⌛
источник
Android Broadcast
источник
2019 March 21
Android Broadcast
#Architecture #ViewModel #MVVM #ArchComponents

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 тестами
👉 упростит расширение функционала в будущем
источник
Android Broadcast
#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+)
👉 Улучшена документация. больше примеров
👉 Запуск более сложных моделей на устройстве
источник
Android Broadcast
#Gradle

Gradle 5.3 Released

Вышла новая версия Gradle. Релиз содержит следующие обновления:
👉 Feature variants (аналогично опциональным зависимостям в Maven)
👉 Обновление Kotlin DSL
👉 Gradle Module Metadata 1.0 - новый формат метаданных, которые решает проблемы Maven POM
👉 Исправление багов
источник
Android Broadcast
#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 скриптов
источник
2019 March 23
Android Broadcast
#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 модулей, встроенных в приложение, при установке приложения. Это позволит удалять модули, для которых выставлено onDemand="false".
👉Теперь необязательно заливать ключ для Google Play App Signing и артефакт, подписанный этим ключом, перед этим. Больше подробностей здесь.
источник
Android Broadcast
#AndroidKTX #Drawing #Kotlin

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().
источник
Android Broadcast
Есть ли нативный (С/С++) код в вашем Android приложении?
Окончательные результаты
27%
Да
70%
Нет
4%
Не уверен
Проголосовало: 56
источник
Android Broadcast
#Debug #Native

Debugging Native Crashes in Android Apps

По статистике на декабрь 2018 года 100 самых популярных приложений были установлены 54 миллиарда раз из 85 из них содержат нативный код.

Хотите сделать конкурента таким приложением или статью часть их команды? Без знания C/C++ уже не обойтись с ростом навыков, но любому разработчику будет полезно знать как дебажить такой код.

В статье вы найдете руководство с чего начать поиск проблемы, когда ваше приложение падает на уровне нативного кода.
источник
2019 March 24
Android Broadcast
#StrcitMode #Performance

StrictModeCompat Library

Я реализовал библиотеку StrictModeCompat для удобной работы с StrictMode на всех версиях Android. Она позволяет безопасно вызывать любой метод аналогично тому, как это сделано в AndroidX. В статье ниже вы найдете описание проблемы и как подключить библиотеку к вашему проекту.
источник
2019 March 25
Android Broadcast
#Material #Design #BottomSheet

Hands-on with Material Components for Android: Bottom Sheet

Третья статья из серии о компонентах Material Design и как их использовать в Android. В текущей рассматривается Bottom Sheet:
👉 Виды Bottom Sheet
👉 Базисы использования
👉 BottomSheetBehavior
👉 Состояния Bottom Sheet и как его сохранить
👉 Оповещение об изменение состояния
👉 Кастомизация
источник
Android Broadcast
#Rx #Library #RxJava

Rxify: Retry with Exponential Backoff in RxJava

Библиотека для всех любителей RxJava, которая позволяет повторять выполнение Observable, при появление ошибке с экспоненциальным таймаутом повторения.

Rxify Github Repo
источник
Android Broadcast
#Vector #Drawable #

Alex Lockwood - Vector workflows | Øredev 2018

Запись доклада о векторной графики в Android: устройство, ограничения, крутые фичи и пр.
источник
2019 March 28
Android Broadcast
#Marbel #Emulator

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
источник
Android Broadcast
Использование CPU эмулятором с автообновлением приложений и без
источник
Android Broadcast
OpenGL ES FPS тест на эмуляторах 28.0.23 и 28.1.10
источник
Android Broadcast
Сравнение использования CPU на macOS в эмуляторах 28.0.23 и 28.1.10
источник