#BestPractices #Release
"How to release a bug-free Android App in production?" Amit Shekhar@GetMeAnApp
Для каждого релиза стоит делать определенный набор практик: автоматизация сборки, тестивароние и пр. В статье вы найдете полезные советы, которые надо выполнять при пером релизе и следить в каждом следующем, чтобы ваше приложение было более стабильным.
На мой взгляд стоящие советы следующие:
👉🏻 Не включайте библиотеки, которые используются для отладки приложения в релизной сборке, такие как LeakCanary, Stetho и пр.
👉🏻 Добавляйте возможность включения/отключения новый функций
👉🏻 Реализуйте возможность конфигурации приложения с сервера (Remote Config)
👉🏻 Проверяйте ключ для подписи приложения
👉🏻 Проверяйте список permission, которые есть в приложение. Очень странно выглядет когда будильник будет запрашивать разрешение на дотсуп к SMS или контактам.
👉🏻 Добавляфте аналитику, чтобы понимать пользователей и знать что происходит в вашем приложение. Также на забывайте про решение для аналитики крешей (напр. Firebase Crashlytics или Instabug)
👉🏻 Используйте Proguard/R8.
👉🏻 Проверяйте поведение приложения в различных пограничных случаях
👉🏻 Проверяйте deep ссылки
👉🏻 Проверяйте обновление приложения поверх установленного старого, предварительно поработав в нем чтобы были сгенерированы данные реальной работы пользователя.
👉🏻 Обновление базы данных, настроек и пр. персистетных данных. Учтите что пользователи могу быть не на последней версии приложения, а на более ранней.
Лично от себя добавлю что стоит обратить внимание на функционал из Google Play:
👉🏻 Используйте Google Play pre-launch отчет. Он позволяет првоерить работы вашего приложения на популярных устрйоствах, поддерживаемых вашим приложением.
👉🏻 Делайте обновление постепенным с помощью Google Play staged rollout
👉🏻 Используйте Google Play app signing
👉🏻 Загружайте приложение в формате App Bundle. Это позволит вам избавиться от боли создания и управления множеством APK под различные типы устрйоств.
"How to release a bug-free Android App in production?" Amit Shekhar@GetMeAnApp
Для каждого релиза стоит делать определенный набор практик: автоматизация сборки, тестивароние и пр. В статье вы найдете полезные советы, которые надо выполнять при пером релизе и следить в каждом следующем, чтобы ваше приложение было более стабильным.
На мой взгляд стоящие советы следующие:
👉🏻 Не включайте библиотеки, которые используются для отладки приложения в релизной сборке, такие как LeakCanary, Stetho и пр.
👉🏻 Добавляйте возможность включения/отключения новый функций
👉🏻 Реализуйте возможность конфигурации приложения с сервера (Remote Config)
👉🏻 Проверяйте ключ для подписи приложения
👉🏻 Проверяйте список permission, которые есть в приложение. Очень странно выглядет когда будильник будет запрашивать разрешение на дотсуп к SMS или контактам.
👉🏻 Добавляфте аналитику, чтобы понимать пользователей и знать что происходит в вашем приложение. Также на забывайте про решение для аналитики крешей (напр. Firebase Crashlytics или Instabug)
👉🏻 Используйте Proguard/R8.
👉🏻 Проверяйте поведение приложения в различных пограничных случаях
👉🏻 Проверяйте deep ссылки
👉🏻 Проверяйте обновление приложения поверх установленного старого, предварительно поработав в нем чтобы были сгенерированы данные реальной работы пользователя.
👉🏻 Обновление базы данных, настроек и пр. персистетных данных. Учтите что пользователи могу быть не на последней версии приложения, а на более ранней.
Лично от себя добавлю что стоит обратить внимание на функционал из Google Play:
👉🏻 Используйте Google Play pre-launch отчет. Он позволяет првоерить работы вашего приложения на популярных устрйоствах, поддерживаемых вашим приложением.
👉🏻 Делайте обновление постепенным с помощью Google Play staged rollout
👉🏻 Используйте Google Play app signing
👉🏻 Загружайте приложение в формате App Bundle. Это позволит вам избавиться от боли создания и управления множеством APK под различные типы устрйоств.
Medium
How to release a bug-free Android App in production?
Recently, our team at GetMeAnApp has released an Android Application named “Best Content App”.
#Gradle #Kotlin #DSL
Upgrading your build from Gradle 4.x to 5.0
Gradle 5.0 вышел совсе недавно, но добавил много полезного и добавил няшечку - Kotlin DSL 1.0. Для тех кто планирует миграцию на новую версию Gradle предоставила гайд для обновления с различных версия 4.X.
Upgrading your build from Gradle 4.x to 5.0
Gradle 5.0 вышел совсе недавно, но добавил много полезного и добавил няшечку - Kotlin DSL 1.0. Для тех кто планирует миграцию на новую версию Gradle предоставила гайд для обновления с различных версия 4.X.
#AndroidO #TextClassification #MachineLearning
TextClassification – Part 1
TextClassification – Part 2
TextClassification – Part 3
Машинное обучение (ML) современный тренд в мире разработке и Android ему следует. Android 9.0 строился вокруг ML внутри ОС. Новый системный сервис - Text Classification, позволяет вам:
👉🏻 определять выделения (например быстро выделить весь email без необходимости выставлять зону выделения)
👉🏻 находить действия которые можно выполнять с текстом
👉🏻 писать свои собственные TextClassifier для опрееления текста и действий в нем
Подробнее обо всех возможностях и как это сделать вы найдете в статьях от Mark Allison
TextClassification – Part 1
TextClassification – Part 2
TextClassification – Part 3
Машинное обучение (ML) современный тренд в мире разработке и Android ему следует. Android 9.0 строился вокруг ML внутри ОС. Новый системный сервис - Text Classification, позволяет вам:
👉🏻 определять выделения (например быстро выделить весь email без необходимости выставлять зону выделения)
👉🏻 находить действия которые можно выполнять с текстом
👉🏻 писать свои собственные TextClassifier для опрееления текста и действий в нем
Подробнее обо всех возможностях и как это сделать вы найдете в статьях от Mark Allison
Styling Android
TextClassification – Part 1
In API 26 (Oreo) a new TextClassification system was introduced. This has been further refined in API 28 (Pie). In this short series we'll take a look at what this is, how to use it, and how we can ad
#Kotlin #Operators
"Increasing readability using operator conventions in Kotlin" Pamela Hill
Kotlin позволяет вам переопределять операторы для собственных типов и тем самым повышая читабельность кода. В статье раскрываются способы применения операторов и как их реализовать.
"Increasing readability using operator conventions in Kotlin" Pamela Hill
Kotlin позволяет вам переопределять операторы для собственных типов и тем самым повышая читабельность кода. В статье раскрываются способы применения операторов и как их реализовать.
Medium
Increasing readability using operator conventions in Kotlin
Learn how operator conventions can be used to improve the readability of your Kotlin code.
#DependencyInjection #Performance #Kotlin
Android Injection Performance Test
Мы используем Dependency Injection, но никто не думает о производительности этих решений. Dagger 2 убрал рефлексию и сделал все через кодогенерацию. Но насколько эти эффективно по производительности? Koin не использует кодогенерации вовсе.
Rafa Vázquez сделал тест сравнения популряных DI решений:
👉🏻 Koin 2.0.0-alpha2 (я удивлен почему взята альфа версия, которую толком никто не испольует)
👉🏻 Kodein 5.3.0
👉🏻 Dagger 2.16
👉🏻 Katana 1.0.1
Результаты теста следующие:
1️⃣ Dagger 2
2️⃣ Katana
3️⃣ Kodein
4️⃣ Koin 2 alpha
Koin 2.0 очевидно проиграл так как построен на рефлекии, в отличие от первой версии.
Android Injection Performance Test
Мы используем Dependency Injection, но никто не думает о производительности этих решений. Dagger 2 убрал рефлексию и сделал все через кодогенерацию. Но насколько эти эффективно по производительности? Koin не использует кодогенерации вовсе.
Rafa Vázquez сделал тест сравнения популряных DI решений:
👉🏻 Koin 2.0.0-alpha2 (я удивлен почему взята альфа версия, которую толком никто не испольует)
👉🏻 Kodein 5.3.0
👉🏻 Dagger 2.16
👉🏻 Katana 1.0.1
Результаты теста следующие:
1️⃣ Dagger 2
2️⃣ Katana
3️⃣ Kodein
4️⃣ Koin 2 alpha
Koin 2.0 очевидно проиграл так как построен на рефлекии, в отличие от первой версии.
GitHub
GitHub - Sloy/android-dependency-injection-performance: [NOT MAINTAINED] Measure the performance of several Dependency Injection…
[NOT MAINTAINED] Measure the performance of several Dependency Injection frameworks in different devices - Sloy/android-dependency-injection-performance
#Kotlin #Coroutines #Concurrency
CONCURRENT COROUTINES – CONCURRENCY IS NOT PARALLELISM
Все мы стараемся ускорить работу наших приложений. Один из эффективных способов повысить скорость выполненной работы - это выполнять задачи парареллельно и не на главном потоке приложения.
Часто в программирвоание паррарельное выполнение программ связывают с понятием concurrent.
В стастье вы найдете различие между понятием concurrency и parallelism и как это реализуют корутины в Kotlin.
CONCURRENT COROUTINES – CONCURRENCY IS NOT PARALLELISM
Все мы стараемся ускорить работу наших приложений. Один из эффективных способов повысить скорость выполненной работы - это выполнять задачи парареллельно и не на главном потоке приложения.
Часто в программирвоание паррарельное выполнение программ связывают с понятием concurrent.
В стастье вы найдете различие между понятием concurrency и parallelism и как это реализуют корутины в Kotlin.
#AndroidX #Library
https://developer.android.com/jetpack/androidx/androidx-rn#2018-dec-03
Очередное обновление библиотеки AndroidX (пока только альфа версия). В анонс попали аж 14 штук:
👉 Activity
👉 AppCompat
👉 Collection
👉 Coordinator Layout
👉 Fragment
👉 Loader
👉 Media
👉 MediaRouter
👉 RecyclerView
👉 RemoteCallback ⭐ NEW ⭐
👉 Swipe Refresh Layout
👉 Text Classifier ⭐ NEW ⭐
👉 Transition
👉 Vector Drawable
Основные изменения:
👉 AppCompatTextView теперь поддерживает атрибуты *app:drawable*Compat*, которые могут принимать VectorDrawable из AndroidX
👉 Backport коллекций Android перенес API из свежих версий SDK
👉 Новая библиотека Remote Callback, упрощающая создание и получение PendingIntent.
👉 Backport Text Classifier из Andorid O+. Сейчас частично перенес функционал Smart Linkify.
👉 VectorDrawable теперь поддерживают tint через ColorStateList из атрибутов темы
👉 Багфикс в рамках всех библиотек
Ждём стабильных релизов 🕘
https://developer.android.com/jetpack/androidx/androidx-rn#2018-dec-03
Очередное обновление библиотеки AndroidX (пока только альфа версия). В анонс попали аж 14 штук:
👉 Activity
👉 AppCompat
👉 Collection
👉 Coordinator Layout
👉 Fragment
👉 Loader
👉 Media
👉 MediaRouter
👉 RecyclerView
👉 RemoteCallback ⭐ NEW ⭐
👉 Swipe Refresh Layout
👉 Text Classifier ⭐ NEW ⭐
👉 Transition
👉 Vector Drawable
Основные изменения:
👉 AppCompatTextView теперь поддерживает атрибуты *app:drawable*Compat*, которые могут принимать VectorDrawable из AndroidX
👉 Backport коллекций Android перенес API из свежих версий SDK
👉 Новая библиотека Remote Callback, упрощающая создание и получение PendingIntent.
👉 Backport Text Classifier из Andorid O+. Сейчас частично перенес функционал Smart Linkify.
👉 VectorDrawable теперь поддерживают tint через ColorStateList из атрибутов темы
👉 Багфикс в рамках всех библиотек
Ждём стабильных релизов 🕘
#VectorDrawable #Images #AndroidX
Part 2: "Draw a Path: Rendering Android VectorDrawables"
Part 1: "Understanding Android’s vector image format: VectorDrawable"
Продолжение серии статей от Nick Butcher/Google о том как работает векторная графика в Android. Из нового поста вы узнаете:
👉 Простейший способ отрисовки path
👉 Поддержка ссылок на различные ресурсы: цвета, ColorStateList, аттрибуты темы
👉 Tinting в VectorDrawable: как работают, настраиваются и когда применять
👉 Градиенты в VectorDrawable: Linear, Radial, Sweep (Angular); tile modes
👉 Поддержка Patter-ов
👉 Как сделать тени в VectorDrawable
Приятная новость что все это уже портировано в AndroidX и полностью работает в VectorDrawableCompat, начиная с API 14
Part 2: "Draw a Path: Rendering Android VectorDrawables"
Part 1: "Understanding Android’s vector image format: VectorDrawable"
Продолжение серии статей от Nick Butcher/Google о том как работает векторная графика в Android. Из нового поста вы узнаете:
👉 Простейший способ отрисовки path
👉 Поддержка ссылок на различные ресурсы: цвета, ColorStateList, аттрибуты темы
👉 Tinting в VectorDrawable: как работают, настраиваются и когда применять
👉 Градиенты в VectorDrawable: Linear, Radial, Sweep (Angular); tile modes
👉 Поддержка Patter-ов
👉 Как сделать тени в VectorDrawable
Приятная новость что все это уже портировано в AndroidX и полностью работает в VectorDrawableCompat, начиная с API 14
Medium
Draw a Path: Rendering Android VectorDrawables
In the previous article, we looked at Android’s VectorDrawable format, going into its benefits and capabilities.
#Education
Android codelab courses are here!
Обновлены code lab по Android:
👉 Добавлены новые популярные темы
👉 Обновлены матералы до новых SDK и последней версии Android Studio
Изменения коснулись Fundamentals и Advanced курсов. Также доступны материалы для тех, кто ведёт курсы, чтобы обучать Android на оcнове материалов code lab
Android codelab courses are here!
Обновлены code lab по Android:
👉 Добавлены новые популярные темы
👉 Обновлены матералы до новых SDK и последней версии Android Studio
Изменения коснулись Fundamentals и Advanced курсов. Также доступны материалы для тех, кто ведёт курсы, чтобы обучать Android на оcнове материалов code lab
Android Developers Blog
Android codelab courses are here!
Posted by Jocelyn Becker, Senior Program Manager, Google Developer Training The Google Developers Training team recently published an ...
#D8 #Dexing #Compiler
Part 3 (final): "Avoiding Vendor- and Version-Specific VM Bugs"
Part 2: "Android's Java 9, 10, 11, and 12 Support"
Part 1: "Android's Java 8 Support"
Заключительная хардокрная статья о D8 от Jake Warton в которой он рассказывает о том как D8 отличается в dexing кода от DX и исправляет разные баги на старых версий Android и баги от корявых рук производителей устройств, которые любят переизобрести Android ОС.
О чем сможете узнать:
👉 Использование более оптимальных инструкций в D8
👉 Как D8 позволяет обходить баги, на примере OkHttp и Okio, на устрйоствах отдельных производителей
👉 Фикс бага ART ahead-of-time компилятора в Android 6.0
Вас ждет много байткода и тулинга, пристегнитесь и наберитесь терпения перед прочтением.
Part 3 (final): "Avoiding Vendor- and Version-Specific VM Bugs"
Part 2: "Android's Java 9, 10, 11, and 12 Support"
Part 1: "Android's Java 8 Support"
Заключительная хардокрная статья о D8 от Jake Warton в которой он рассказывает о том как D8 отличается в dexing кода от DX и исправляет разные баги на старых версий Android и баги от корявых рук производителей устройств, которые любят переизобрести Android ОС.
О чем сможете узнать:
👉 Использование более оптимальных инструкций в D8
👉 Как D8 позволяет обходить баги, на примере OkHttp и Okio, на устрйоствах отдельных производителей
👉 Фикс бага ART ahead-of-time компилятора в Android 6.0
Вас ждет много байткода и тулинга, пристегнитесь и наберитесь терпения перед прочтением.
#Gradle
Gradle 4.10.3 Release Notes
Вышла версия Gradle 4.10.3 в которой внесен важный багфикс и обновления. Несмотря на то что уже есть Gradle 5.X, Android разработчики пока не могу перейти на последнюю версию, поэтому рекомендую обновиться всем (особенно когда перейдете на Android Gradle Plugin 3.3).
Основные измнения:
👉 Инкрементный Java компилятор включен по умолчанию - время сборки у тех кто не использует Kotlin должно стать лучше
👉 Периодическая чистка кеша в GRADLE_USER_HOME. Фактически ваши старые зависимости и кэш сборки будет очищаться после продолжительного неиспользования.
👉 Kotlin DSL 1.0 RC6
👉 Инкрементальный билд использует меньше памяти (в среднем на 12%)
👉 Build Scan Plugin обновлен до версии 1.16
Gradle 4.10.3 Release Notes
Вышла версия Gradle 4.10.3 в которой внесен важный багфикс и обновления. Несмотря на то что уже есть Gradle 5.X, Android разработчики пока не могу перейти на последнюю версию, поэтому рекомендую обновиться всем (особенно когда перейдете на Android Gradle Plugin 3.3).
Основные измнения:
👉 Инкрементный Java компилятор включен по умолчанию - время сборки у тех кто не использует Kotlin должно стать лучше
👉 Периодическая чистка кеша в GRADLE_USER_HOME. Фактически ваши старые зависимости и кэш сборки будет очищаться после продолжительного неиспользования.
👉 Kotlin DSL 1.0 RC6
👉 Инкрементальный билд использует меньше памяти (в среднем на 12%)
👉 Build Scan Plugin обновлен до версии 1.16
#Droidcon
Droidcon San Francisco 2018 Videos
Стали доступны видео с Droidcon San Francisco 2018. Плейлист довольно большой (64 видоса). Все видео продолжительностью 30-50 минут. Буду стараться в ближайшее время делится с вами самыми интересными. Буду рад за помощь в этом. Пишите в @android_broadcast_discussions
Droidcon San Francisco 2018 Videos
Стали доступны видео с Droidcon San Francisco 2018. Плейлист довольно большой (64 видоса). Все видео продолжительностью 30-50 минут. Буду стараться в ближайшее время делится с вами самыми интересными. Буду рад за помощь в этом. Пишите в @android_broadcast_discussions
YouTube
droidcon SF 2018 - YouTube
#Hardware #Qualcomm
Qualcomm представила свой новый флагманский процессор - Snapdragon 855 (в утечках упоминлся как Snapdragon 8150). Это чип будет сердцем большинства флагманов следующего года.
Что нового:
👉 7 нанометровый тех. процесс
👉 Меньшее энергопотребление
👉 Повышенная производительность
👉 Улучшенная производитльность AI
👉 Поддержка 5G сетей
👉 Отдельный процессор для AR, позволяющий рендерить объекты в простренстве с частотой 60 кадров/секунда
👉 Возможность записи 4K HDR 60 FPS с сокращение энергопотребления на 25%
В учтеках предварительных бенчмарков новый SoC от Qualcomm не смог обогнать iPhone, но он однозначно самый быстрый на Android
Qualcomm представила свой новый флагманский процессор - Snapdragon 855 (в утечках упоминлся как Snapdragon 8150). Это чип будет сердцем большинства флагманов следующего года.
Что нового:
👉 7 нанометровый тех. процесс
👉 Меньшее энергопотребление
👉 Повышенная производительность
👉 Улучшенная производитльность AI
👉 Поддержка 5G сетей
👉 Отдельный процессор для AR, позволяющий рендерить объекты в простренстве с частотой 60 кадров/секунда
👉 Возможность записи 4K HDR 60 FPS с сокращение энергопотребления на 25%
В учтеках предварительных бенчмарков новый SoC от Qualcomm не смог обогнать iPhone, но он однозначно самый быстрый на Android
#WorkManager #AndroidX
https://developer.android.com/jetpack/docs/release-notes (смотрите обновления за 5 декабря)
Наконец-то свершилось - вышла последняя alpha WorkManager, которая будет первой бетой в случае если не будет найдено критичных багов.
Основные измнения:
👉 Поддержка RxJava2
👉 Убрана поддержка Firebase JobDispatcher
👉 Breaking API Changes
👉 Исправление багов
Теперь настал момент, когда уже можно смотреть WorkManager и готовиться для его интеграции в production проекты
https://developer.android.com/jetpack/docs/release-notes (смотрите обновления за 5 декабря)
Наконец-то свершилось - вышла последняя alpha WorkManager, которая будет первой бетой в случае если не будет найдено критичных багов.
Основные измнения:
👉 Поддержка RxJava2
👉 Убрана поддержка Firebase JobDispatcher
👉 Breaking API Changes
👉 Исправление багов
Теперь настал момент, когда уже можно смотреть WorkManager и готовиться для его интеграции в production проекты
#Room #AndroidX #Coroutines
https://developer.android.com/jetpack/docs/release-notes (смотрите обновления за 4 декабря)
Вышел Room 2.1.0-alpha3. Самое важное и приятное изменение - ⭐️ добавлена поддержка корутин ⭐️
https://developer.android.com/jetpack/docs/release-notes (смотрите обновления за 4 декабря)
Вышел Room 2.1.0-alpha3. Самое важное и приятное изменение - ⭐️ добавлена поддержка корутин ⭐️