#R8 #Optimizations
R8 Optimization Part 3: Value Assumption
Jake Wharton не снижает обороты и радует нас новой статьей из серии об оптимизациях R8 с кодом. В последней части раскрывается анализ использования переменных.
Оптимизация которые стоит применять в таких случаях довольно логичны:
👉 удаление неиспользуемых переменных
👉 удаление веток кода в которых условия постоянны
В статье вы найдете подробности того, как такой анализ выполняется новым оптимизатором кода от Google, как можно избавиться от кучи кода из AndroidX если ваш minSdk выше 14 (спойлер R8 имеет возможность задания ограничения на возвращаемые значения методов).
R8 Optimization Part 3: Value Assumption
Jake Wharton не снижает обороты и радует нас новой статьей из серии об оптимизациях R8 с кодом. В последней части раскрывается анализ использования переменных.
Оптимизация которые стоит применять в таких случаях довольно логичны:
👉 удаление неиспользуемых переменных
👉 удаление веток кода в которых условия постоянны
В статье вы найдете подробности того, как такой анализ выполняется новым оптимизатором кода от Google, как можно избавиться от кучи кода из AndroidX если ваш minSdk выше 14 (спойлер R8 имеет возможность задания ограничения на возвращаемые значения методов).
Jake Wharton
R8 Optimization: Value Assumption – Jake Wharton
#Library #Localisation #OverTheAir
Philology - библиотека облегчающая распространение строк "по воздуху", без необходимости обновления приложения в Google Play.
С помощью механизмы подмены при обращении за строкой по ключу, она позволяет написать вам свой перехватчик, которые будет брать за строку откуда вам угодно: на сервер, в БД или читать из файлика.
Если хотите воспользоваться библиотекой, то сервер вам придется писать самостоятельно 😀, так что решение неоднозначное, потому что упростило только часть на работы на клиентской стороне.
Philology - библиотека облегчающая распространение строк "по воздуху", без необходимости обновления приложения в Google Play.
С помощью механизмы подмены при обращении за строкой по ключу, она позволяет написать вам свой перехватчик, которые будет брать за строку откуда вам угодно: на сервер, в БД или читать из файлика.
Если хотите воспользоваться библиотекой, то сервер вам придется писать самостоятельно 😀, так что решение неоднозначное, потому что упростило только часть на работы на клиентской стороне.
GitHub
GitHub - JcMinarro/Philology: An easy way to dynamically replace Strings of your Android App or provide new languages Over-the…
An easy way to dynamically replace Strings of your Android App or provide new languages Over-the-air without needed to publish a new release on Google Play. - JcMinarro/Philology
#Kotlin #Update #Gradle
Вышел Kotlin 1.3.20
Вышло новое обновление Kotlin в котором реализованы:
👉 Поддержка параллельного выполнения Kotlin Gradle Task-ов на основе Gradle Worker API. Компиляция станет быстрее 🚀
Для включения параллельной сборки надо в gradle.properties добавить настройки:
1️⃣ org.gradle.parallel=true
2️⃣ kotlin.parallel.tasks.in.project=true
👉 Улучшена производительность kapt 🚀: добавлена поддержка Compile Avoidance, что позволит избежать необходимости генерации кода при некоторых изменениях кода
👉 Поддержка Kotlin Gradle DSL для сборки мультиплатформенных проектов
👉 Улучшения в inline классах: теперь можно объявить inline класс в inline классе и улучшена поддержка различных нетривиальных использований
👉 Улучшения в Kotlin/Native: Code contracts, улучшения interoperability, улучшена производительность
👉 Улучшения в IDEA плагине: проверки для корутин, возможность конвертации SAM в анонимные object
👉 Инкрементальная компиляция Kotlin/JS теперь стабильна и включена по умолчанию
👉 Ну и как же без багфикса и минорных улучшений
Хотите обновиться -> бегов в Android Studio/IDEA и проверяйте обновление плагинов
Вышел Kotlin 1.3.20
Вышло новое обновление Kotlin в котором реализованы:
👉 Поддержка параллельного выполнения Kotlin Gradle Task-ов на основе Gradle Worker API. Компиляция станет быстрее 🚀
Для включения параллельной сборки надо в gradle.properties добавить настройки:
1️⃣ org.gradle.parallel=true
2️⃣ kotlin.parallel.tasks.in.project=true
👉 Улучшена производительность kapt 🚀: добавлена поддержка Compile Avoidance, что позволит избежать необходимости генерации кода при некоторых изменениях кода
👉 Поддержка Kotlin Gradle DSL для сборки мультиплатформенных проектов
👉 Улучшения в inline классах: теперь можно объявить inline класс в inline классе и улучшена поддержка различных нетривиальных использований
👉 Улучшения в Kotlin/Native: Code contracts, улучшения interoperability, улучшена производительность
👉 Улучшения в IDEA плагине: проверки для корутин, возможность конвертации SAM в анонимные object
👉 Инкрементальная компиляция Kotlin/JS теперь стабильна и включена по умолчанию
👉 Ну и как же без багфикса и минорных улучшений
Хотите обновиться -> бегов в Android Studio/IDEA и проверяйте обновление плагинов
The JetBrains Blog
Kotlin 1.3.20 released | The Kotlin Blog
We’re happy to announce the release of Kotlin 1.3.20, a new bug fix and tooling update for Kotlin 1.3. In addition to improvements to the compiler and IDE, this version:
Allows running Gradle tasks
Allows running Gradle tasks
#JaCoCo #Tests #Update
Вышло обновление JaCoCo 0.8.3
Вышло очередно обновление JaCoCo. Обновление не содержит новых функций но было сделано:
👉 Официальная поддержка Java 11
👉 Улучшен анализ Kotlin: теперь в отчет не включается множество кода, которые генерируется для работы Kotlin кода в Java
👉 Улучшения в информации, отображаемой в HTML отчетах
👉 Исправление багов
Вышло обновление JaCoCo 0.8.3
Вышло очередно обновление JaCoCo. Обновление не содержит новых функций но было сделано:
👉 Официальная поддержка Java 11
👉 Улучшен анализ Kotlin: теперь в отчет не включается множество кода, которые генерируется для работы Kotlin кода в Java
👉 Улучшения в информации, отображаемой в HTML отчетах
👉 Исправление багов
GitHub
Release 0.8.3 · jacoco/jacoco
New Features
jacoco-maven-plugin now requires at least Maven 3.0 (GitHub #821).
JaCoCo now officially supports Java 11 (GitHub #760).
Experimental support for Java 13 class files (GitHub #835).
Br...
jacoco-maven-plugin now requires at least Maven 3.0 (GitHub #821).
JaCoCo now officially supports Java 11 (GitHub #760).
Experimental support for Java 13 class files (GitHub #835).
Br...
#Kotlin #Coroutines #LibUpdate
Вышли Coroutines 1.1.1
Вышло совсем маленькое обновление Coroutine, без изменений в кодовой базе, Релиз содержит:
👉 Обновление Kotlin до 1.3.20
👉 Обновление Gradle до 4.10
Вышли Coroutines 1.1.1
Вышло совсем маленькое обновление Coroutine, без изменений в кодовой базе, Релиз содержит:
👉 Обновление Kotlin до 1.3.20
👉 Обновление Gradle до 4.10
GitHub
kotlinx.coroutines/CHANGES.md at master · Kotlin/kotlinx.coroutines
Library support for Kotlin coroutines . Contribute to Kotlin/kotlinx.coroutines development by creating an account on GitHub.
#Activity #LaunchMode
The Android Launch Mode Animated CheatSheet
Хорошая статья с визуализацией (анимашки) того как работают Launch Mode в Activity (управление back stack Activity).
The Android Launch Mode Animated CheatSheet
Хорошая статья с визуализацией (анимашки) того как работают Launch Mode в Activity (управление back stack Activity).
Medium
The Android Launch Mode Animated CheatSheet
Before API 11, we used activities show every new page on the screen. Now with Fragments and the navigation tools in API 28, it’s totally…
This media is not supported in your browser
VIEW IN TELEGRAM
Круть как сделано!
#InstantApp
Подводные камни разработки Google Play Instant
Google Play Instant - полезный формат для быстрой работы с вашим приложением: не нужно установки, просто открываешь ссылку и получаешь счастье 😁
Для того чтобы такие приложения могли открываться быстро и работать без установки на них есть ряд ограничений, самое трудное из которых - это размер не более 4 Мб. В ход идут все средства: оптимизация размера графики, ресурсов, ProGuard/R8, "Only Java" путь и пр.
Ребята из PROFI.RU столкнулись с проблемой поддержки Google Play Instant уже существующим приложением. Ребята стали выбирать из 2 путей:
👉 взять готовое приложение и вырезать из него ненужную функциональность
👉 создать пустой проект и перенести в него функциональность, которая необходима
Какой путь выбрали разработчики из PROFI.RU? Какие задачи пришлось решить еще? Все это можете узнать в статье
Подводные камни разработки Google Play Instant
Google Play Instant - полезный формат для быстрой работы с вашим приложением: не нужно установки, просто открываешь ссылку и получаешь счастье 😁
Для того чтобы такие приложения могли открываться быстро и работать без установки на них есть ряд ограничений, самое трудное из которых - это размер не более 4 Мб. В ход идут все средства: оптимизация размера графики, ресурсов, ProGuard/R8, "Only Java" путь и пр.
Ребята из PROFI.RU столкнулись с проблемой поддержки Google Play Instant уже существующим приложением. Ребята стали выбирать из 2 путей:
👉 взять готовое приложение и вырезать из него ненужную функциональность
👉 создать пустой проект и перенести в него функциональность, которая необходима
Какой путь выбрали разработчики из PROFI.RU? Какие задачи пришлось решить еще? Все это можете узнать в статье
Хабр
Подводные камни разработки Google Play Instant
Привет, Хабр! Меня зовут Камо Сперцян, я занимаюсь Android-разработкой в PROFI.RU. Недавно я написал приложение с мгновенным запуском для наших клиентов. Если вы ещё не знакомы с технологией,...
#Kotlin #Coroutines #Mock
Mocking Coroutines
Вы уже втянули свои приложения Kotlin Coroutine? Если да то вы уже могли решить вопрос с тестированием нового асинхронного подхода, а если вы только задумались об этом то вам поможет данная статья. В ней описывается как с помощью библиотеки Mockito-Kotlin:
👉 мокируется Deferred через CompletableDeferred
👉 мокируются suspend функции с помощью onBlocking
Mocking Coroutines
Вы уже втянули свои приложения Kotlin Coroutine? Если да то вы уже могли решить вопрос с тестированием нового асинхронного подхода, а если вы только задумались об этом то вам поможет данная статья. В ней описывается как с помощью библиотеки Mockito-Kotlin:
👉 мокируется Deferred через CompletableDeferred
👉 мокируются suspend функции с помощью onBlocking
Medium
Mocking Coroutines
I did not find many tips about mocking and Coroutines. Time to fill this gap.
#Kotlin #DependencyInjection #Koin
Koin 2.0 Beta 1 is Here
Первый анонс Koin 2.0 🎉 Почему стоило сразу после 1.0 нужно было выпускать версию 2.0? Список изменений впечатляет:
👉 Пользователи библиотеки на Android жаловались на медленное получение зависимостей, в новой версии улучшили работу библиотеки под капотом и исправляют упущение
👉 Новый способ инициализации Kotlin при помощи DSL
👉 Упрощено объявление зависимостей в модулях: убраны вложенные модули, namespace-ы и пр.
Ждем стабильного релиза!
Koin 2.0 Beta 1 is Here
Первый анонс Koin 2.0 🎉 Почему стоило сразу после 1.0 нужно было выпускать версию 2.0? Список изменений впечатляет:
👉 Пользователи библиотеки на Android жаловались на медленное получение зависимостей, в новой версии улучшили работу библиотеки под капотом и исправляют упущение
👉 Новый способ инициализации Kotlin при помощи DSL
👉 Упрощено объявление зависимостей в модулях: убраны вложенные модули, namespace-ы и пр.
Ждем стабильного релиза!
#Animation #MaterialDesign #Library
Animated Tri State Checkbox
Красивый CheckBox в Material Design, который использует красивую анимацию для переключения между состояниями
Animated Tri State Checkbox
Красивый CheckBox в Material Design, который использует красивую анимацию для переключения между состояниями
GitHub
GitHub - sephiroth74/Tri-State-Checkbox: 3 State Checkbox for android in pure Material Style
3 State Checkbox for android in pure Material Style - sephiroth74/Tri-State-Checkbox
#Kotlin #Google
Kotlin is now an official language for Android development inside Google
Теперь Kotlin официальный язык для Android разработки внутри Google (раньше была только официальная поддержка Kotlin как языка разработки под Android).
Kotlin is now an official language for Android development inside Google
Теперь Kotlin официальный язык для Android разработки внутри Google (раньше была только официальная поддержка Kotlin как языка разработки под Android).
#Coroutines #Kotlin
Coroutines for Android
Статья с основными советами как использовать корутины на Android. Гайд очень простой и покажет вам только основные моменты использования.
Также нашел там одну проблему - чтобы ваши корутины работали корректно, то вам надо в CoroutineScope.coroutineContext передавать SupervisorJob, а не Job
Coroutines for Android
Статья с основными советами как использовать корутины на Android. Гайд очень простой и покажет вам только основные моменты использования.
Также нашел там одну проблему - чтобы ваши корутины работали корректно, то вам надо в CoroutineScope.coroutineContext передавать SupervisorJob, а не Job
Medium
Coroutines for Android
Coroutines are a great way to handle asynchronous programming where it also offers an immense easy way to switch between context from…
#Kotlin #Coroutines
The reason to avoid GlobalScope
Structured concurrency - замечательная концепция, которая позволяет вам ограничивать время жизни запущенных корутин. В связи с этим практически любая корутина требует CoroutineScope. Неопытный разработчик может сделать `GlobalScope.launch` чтобы не морочиться. Проблем в том, что это в корне неправильно и нарушает принципы работы, которые вкладывалось авторами корутин 😞
Корутина наследует от CoroutineScope CoroutineDispatcher и прочие элементы из CoroutineContext, а GlobalScope ничего не содержит и ваша корутина будет выполняться, блокируя поток приложения.
Также плохо что ваша корутина не имеет какой либо привязки к объекту с ограниченным временем жизни.
Как это исправить? Ответ на этот вопрос вы найдете в статье от Романа Елизарова
The reason to avoid GlobalScope
Structured concurrency - замечательная концепция, которая позволяет вам ограничивать время жизни запущенных корутин. В связи с этим практически любая корутина требует CoroutineScope. Неопытный разработчик может сделать `GlobalScope.launch` чтобы не морочиться. Проблем в том, что это в корне неправильно и нарушает принципы работы, которые вкладывалось авторами корутин 😞
Корутина наследует от CoroutineScope CoroutineDispatcher и прочие элементы из CoroutineContext, а GlobalScope ничего не содержит и ваша корутина будет выполняться, блокируя поток приложения.
Также плохо что ваша корутина не имеет какой либо привязки к объекту с ограниченным временем жизни.
Как это исправить? Ответ на этот вопрос вы найдете в статье от Романа Елизарова
Medium
The reason to avoid GlobalScope
We do not recommend using GlobalScope with Kotlin Coroutines, but why? This story gives an explanation.
"Все эти люди отличаются низкой степенью вовлеченности, не уделяют внимания функциональности своих смартфонов и, как правило, игнорируют все доступные обновления." - я думаю что это и есть те партизаны, которые сидят на Android < 7 Nougat
Forwarded from AndroidInsider.ru #новости
Мнение: Откуда берется фрагментация Android и почему на самом деле ее нет https://androidinsider.ru/?p=184494
#TextWatcher
Using TextWatchers the right way, case study: Naira TextWatcher
Статья с разбором того что приходит в TextWatcher при изменение текста в EditText
Using TextWatchers the right way, case study: Naira TextWatcher
Статья с разбором того что приходит в TextWatcher при изменение текста в EditText
Medium
Using TextWatchers the right way, case study: Naira TextWatcher
I have seen lots of android apps with not-so-good user experience when it comes to editing entered amounts and to be honest, I have…
#Kotlin #Conference
Conference for Kotliners
Этим летом 7 июня в Будапеште пройдет конференция для всех Kotliner-ов
Conference for Kotliners
Этим летом 7 июня в Будапеште пройдет конференция для всех Kotliner-ов
#Kotlin #SchoolKt
School.kt объявляет первый набор обучению Kotlin
Kotlin - это один из самых хайповых языков современности, а в Android он смог перезагрузить разработку и повысить ее эффективность. Kotlin уже стал стандартом для новых Android приложений, язык является официально поддерживаемым для Android разработке, а также совсем недавно он стал язык разработки для приложение внутри Google.
Чтобы оставаться востребованным разработчиком вам стоит начать изучать язык еще вчера!
В этом вам поможет School.kt - проект от сообщества BKUG. В рамках курса (который стартует 20 февраля) вы сможете изучить Kotlin, систематизировать свои знания и узнать как писать на каноничном Kotlin. Лекции будут вести разработчики из BKUG и Juno, которые имеют за плечами уже 3+ года опыта Kotlin, и начинали разработку на нем еще до первой версии языка.
Если же вы уже имеете большой опыт за плечами и готовы поделиться знаниями с другими - мы всегда рады менторам!
Партнеры проекта: JetBrains, Juno и SPACE!
School.kt объявляет первый набор обучению Kotlin
Kotlin - это один из самых хайповых языков современности, а в Android он смог перезагрузить разработку и повысить ее эффективность. Kotlin уже стал стандартом для новых Android приложений, язык является официально поддерживаемым для Android разработке, а также совсем недавно он стал язык разработки для приложение внутри Google.
Чтобы оставаться востребованным разработчиком вам стоит начать изучать язык еще вчера!
В этом вам поможет School.kt - проект от сообщества BKUG. В рамках курса (который стартует 20 февраля) вы сможете изучить Kotlin, систематизировать свои знания и узнать как писать на каноничном Kotlin. Лекции будут вести разработчики из BKUG и Juno, которые имеют за плечами уже 3+ года опыта Kotlin, и начинали разработку на нем еще до первой версии языка.
Если же вы уже имеете большой опыт за плечами и готовы поделиться знаниями с другими - мы всегда рады менторам!
Партнеры проекта: JetBrains, Juno и SPACE!
Forwarded from Flutter Dev Podcast — анонсы выпусков
🔥Открываем Flutter-подкаст, знакомимся и обсуждаем возможности и перспективы фреймворка.
https://soundcloud.com/flutterdevpodcast/0-pilotnyy-vypusk
Станет ли Flutter спасением для мелкого аутсорса и стартапов, какой помощи ждать от Google тем, кто всё-таки решился переехать на Flutter, какими внутренними Flutter-приложениями уже пользуются сами гуглеры, "что там по Фуксии" и перестало ли слово "кроссплатформа" быть ругательным - всё это и многое другое мы обсудим в пилотном выпуске!
У микрофона: Евгений Сатуров, Артем Зайцев, Звиад Кардава.
Спонсор выпуска - студия разработки Surf (Mobile + AI) https://surfstudio.ru/
Родмэп-2019: github.com/flutter/flutter/wiki/Roadmap
Баг-трекер: github.com/flutter/flutter/issues
Майлстоуны: github.com/flutter/flutter/milestones
Коллекция библиотек: pub.dartlang.org/flutter/packages
Подборка готовых приложений: itsallwidgets.com
Нашумевшая статья от Хакер о Фуксии(платно): xakep.ru/2019/01/09/
Официальный чат подкаста: https://news.1rj.ru/str/flutterdevpodcast
https://soundcloud.com/flutterdevpodcast/0-pilotnyy-vypusk
Станет ли Flutter спасением для мелкого аутсорса и стартапов, какой помощи ждать от Google тем, кто всё-таки решился переехать на Flutter, какими внутренними Flutter-приложениями уже пользуются сами гуглеры, "что там по Фуксии" и перестало ли слово "кроссплатформа" быть ругательным - всё это и многое другое мы обсудим в пилотном выпуске!
У микрофона: Евгений Сатуров, Артем Зайцев, Звиад Кардава.
Спонсор выпуска - студия разработки Surf (Mobile + AI) https://surfstudio.ru/
Родмэп-2019: github.com/flutter/flutter/wiki/Roadmap
Баг-трекер: github.com/flutter/flutter/issues
Майлстоуны: github.com/flutter/flutter/milestones
Коллекция библиотек: pub.dartlang.org/flutter/packages
Подборка готовых приложений: itsallwidgets.com
Нашумевшая статья от Хакер о Фуксии(платно): xakep.ru/2019/01/09/
Официальный чат подкаста: https://news.1rj.ru/str/flutterdevpodcast
#AppBundle #Optimizations
Google Santa Tracker — Moving to an Android App Bundle
Кто слышал о приложение Google Santa Tracker? Это приложение, который каждый год позволяет миллионам пользователям следить за передвижением Санты, и чтобы сделать его лучше "Корпорация Добра" обновляет его, уже в 2017 году приложение весело 60 Мб 😢 (универсальное APK), что довольно много и является проблемой чтобы быстро насладиться главным функционалом приложения - трекером.
Чтобы решить эту проблем разработчики решили воспользоваться Android App Bundle (AAB). С помощью этого формата поставки приложения можно организовать динамическую загрузку функционала, который пользователь использует редко или вовсе не используется и не загружать ресурсы графики, строки и нативные библиотеки, которые не нужны на устройстве.
В результате проведенных оптимизаций с помощью AAB удалось сократить размер загружаемого APK при начальной установки до 9.21 MB (85% сокращение).
В статье описывается:
👉 Первые шаги с AAB
👉 Dynamic Delivery
👉 Реализация Feature модулей и как это изменило UI/UX
👉 Результаты оптимизации
Google Santa Tracker — Moving to an Android App Bundle
Кто слышал о приложение Google Santa Tracker? Это приложение, который каждый год позволяет миллионам пользователям следить за передвижением Санты, и чтобы сделать его лучше "Корпорация Добра" обновляет его, уже в 2017 году приложение весело 60 Мб 😢 (универсальное APK), что довольно много и является проблемой чтобы быстро насладиться главным функционалом приложения - трекером.
Чтобы решить эту проблем разработчики решили воспользоваться Android App Bundle (AAB). С помощью этого формата поставки приложения можно организовать динамическую загрузку функционала, который пользователь использует редко или вовсе не используется и не загружать ресурсы графики, строки и нативные библиотеки, которые не нужны на устройстве.
В результате проведенных оптимизаций с помощью AAB удалось сократить размер загружаемого APK при начальной установки до 9.21 MB (85% сокращение).
В статье описывается:
👉 Первые шаги с AAB
👉 Dynamic Delivery
👉 Реализация Feature модулей и как это изменило UI/UX
👉 Результаты оптимизации
Medium
Google Santa Tracker — Moving to an Android App Bundle
This post is the first in the series which explores the improvements made to the Google Santa Tracker Android app for 2018.