#Kotlin #Extensions
KdroidExt - Use the power of Kotlin to make your code smaller and beautiful
С момент официальной поддержки Kotlin в Android появилась специальная библиотека Android KTX, которое включает в себя различные Kotlin функции, которые упрощают взаимодействие с Android SDK из Kotlin.
Добавление нового API там довольно консервативно и порой хочется добавить что-то более простое, но не вписывающееся в видение авторов библиотеки 😞
Но можно же просто решить такую проблема - запилить свою библиотеку (у меня в проекте есть 😀), но тут снова печаль - нет никакой стандартизации. KdroidExt - имеет множество расширений, позволяющих упростить работу и может стать стандартом, если мы начнем ее активнее использовать:
👉 Работу с различными *View
👉 Доступ к системным сервисам
👉 Показ toast (их кстати выпили из Android KTX к релизу 1.0)
👉 Создание Intent и запуск Activity/Service
👉 Логирование
👉 Работа с потоками/AsyncTask
👉 Изящно избавиться от
👉 Работа с ресурсами
👉 Расширения для Activity/Fragment
👉 очень много всего еще
KdroidExt - Use the power of Kotlin to make your code smaller and beautiful
С момент официальной поддержки Kotlin в Android появилась специальная библиотека Android KTX, которое включает в себя различные Kotlin функции, которые упрощают взаимодействие с Android SDK из Kotlin.
Добавление нового API там довольно консервативно и порой хочется добавить что-то более простое, но не вписывающееся в видение авторов библиотеки 😞
Но можно же просто решить такую проблема - запилить свою библиотеку (у меня в проекте есть 😀), но тут снова печаль - нет никакой стандартизации. KdroidExt - имеет множество расширений, позволяющих упростить работу и может стать стандартом, если мы начнем ее активнее использовать:
👉 Работу с различными *View
👉 Доступ к системным сервисам
👉 Показ toast (их кстати выпили из Android KTX к релизу 1.0)
👉 Создание Intent и запуск Activity/Service
👉 Логирование
👉 Работа с потоками/AsyncTask
👉 Изящно избавиться от
if(Build.Version.SDK_INT > 21)👉 Работа с ресурсами
👉 Расширения для Activity/Fragment
👉 очень много всего еще
GitHub
GitHub - nowfalsalahudeen/KdroidExt: Extensions for Kotlin Android. Use the power of Kotlin to make your code smaller and beautiful.
Extensions for Kotlin Android. Use the power of Kotlin to make your code smaller and beautiful. - GitHub - nowfalsalahudeen/KdroidExt: Extensions for Kotlin Android. Use the power of Kotlin to make...
#Google #OpenSource
Google открыла исходный код приложения Google Santa Tracker
Вчера я писал (ссылочка на пост) о оптимизации размера приложения Google Santa Tracker, теперь же вы можете сами изучить исходный код и увидеть все сами.
Google открыла исходный код приложения Google Santa Tracker
Вчера я писал (ссылочка на пост) о оптимизации размера приложения Google Santa Tracker, теперь же вы можете сами изучить исходный код и увидеть все сами.
GitHub
GitHub - google/santa-tracker-android: Ho Ho Ho
Ho Ho Ho. Contribute to google/santa-tracker-android development by creating an account on GitHub.
#GoogleIO
Google I/O 2019 пройдет 7-9 мая
Билеты будут продаваться 21-27 февраля, а потом состоится традиционная лотерея!
Чего ждете от конференции вы?
Google I/O 2019 пройдет 7-9 мая
Билеты будут продаваться 21-27 февраля, а потом состоится традиционная лотерея!
Чего ждете от конференции вы?
io.google
Google I/O 2025
Don't miss Google I/O, featuring product launches, innovations, and insights. Tune in for the live keynotes and sessions.
Forwarded from ❗️NEWS Android Dev Подкаст (Denis Nek)
https://androiddev.apptractor.ru/android-dev-podkast-85/
Подкаст #85. ML в Android
Machine Learning, а вернее запуск моделей на мобильных устройствах, тема не столько популярная, как выбор архитектуры мобильного приложения, но в ней таится очень много интересного. Интервью со Славой, бывшим разработчиком Prisma, о всех его приключениях в мобильном ML мире. В выпуске вы узнаете сколько тензоров нужно, чтобы сжечь Xiaomi и как не уйти в запой, когда инференс на одном устройстве занимает 3 секунды, а на другом с той же моделью 5 минут.
https://github.com/XiaoMi/mace - Xiaomi MACE
https://firebase.google.com/docs/ml-kit/ - Firebase ML Kit (beta)
https://tensorflow.org/lite/ - TensorFlow Lite
https://research.fb.com/downloads/caffe2/ - Caffe2 by Facebook
https://pytorch.org/ - PyTorch
https://code.fb.com/ml-applications/qnnpack/ - Optimized Mobile Deep Learning by Facebook
https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk - Qualcomm Neural Processing SDK for AI (SNPE)
https://developer.huawei.com/consumer/en/devservice/doc/2020315 - HUAWEI HiAI
https://developer.android.com/ndk/guides/neuralnetworks/ - Neural Networks API by Google
http://ai-benchmark.com/ - AI benchmarks
https://blog.prismalabs.ai/real-time-portrait-segmentation-on-smartphones-39c84f1b9e66 - Prisma about portrait segmentation
https://www.androidauthority.com/kirin-970-vs-snapdragon-845-859742/ - NPU vs DSP
А еще не забудьте послушать пилотный выпуск подкаста про Flutter https://soundcloud.com/flutterdevpodcast/0-pilotnyy-vypusk
Подкаст #85. ML в Android
Machine Learning, а вернее запуск моделей на мобильных устройствах, тема не столько популярная, как выбор архитектуры мобильного приложения, но в ней таится очень много интересного. Интервью со Славой, бывшим разработчиком Prisma, о всех его приключениях в мобильном ML мире. В выпуске вы узнаете сколько тензоров нужно, чтобы сжечь Xiaomi и как не уйти в запой, когда инференс на одном устройстве занимает 3 секунды, а на другом с той же моделью 5 минут.
https://github.com/XiaoMi/mace - Xiaomi MACE
https://firebase.google.com/docs/ml-kit/ - Firebase ML Kit (beta)
https://tensorflow.org/lite/ - TensorFlow Lite
https://research.fb.com/downloads/caffe2/ - Caffe2 by Facebook
https://pytorch.org/ - PyTorch
https://code.fb.com/ml-applications/qnnpack/ - Optimized Mobile Deep Learning by Facebook
https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk - Qualcomm Neural Processing SDK for AI (SNPE)
https://developer.huawei.com/consumer/en/devservice/doc/2020315 - HUAWEI HiAI
https://developer.android.com/ndk/guides/neuralnetworks/ - Neural Networks API by Google
http://ai-benchmark.com/ - AI benchmarks
https://blog.prismalabs.ai/real-time-portrait-segmentation-on-smartphones-39c84f1b9e66 - Prisma about portrait segmentation
https://www.androidauthority.com/kirin-970-vs-snapdragon-845-859742/ - NPU vs DSP
А еще не забудьте послушать пилотный выпуск подкаста про Flutter https://soundcloud.com/flutterdevpodcast/0-pilotnyy-vypusk
#UI #Material
Setting up a Material Components theme for Android
На Google I/O 2018 было представлено значительное обновление системы дизайна Google - Material Design 2.0. Новая библиотека
В статье подробно рассматриваются аспекты реализации нового дизайна в ваших приложениях на Android
Material Design Components Playground
Репозиторий Material Components for Android
Setting up a Material Components theme for Android
На Google I/O 2018 было представлено значительное обновление системы дизайна Google - Material Design 2.0. Новая библиотека
com.google.android.material содержит множество изменений: новые темы, виджеты, стиль и атрибуты, на основе которы происходит кастомизация.В статье подробно рассматриваются аспекты реализации нового дизайна в ваших приложениях на Android
Material Design Components Playground
Репозиторий Material Components for Android
GitHub
GitHub - material-components/material-components-android: Modular and customizable Material Design UI components for Android
Modular and customizable Material Design UI components for Android - material-components/material-components-android
#Kotlin #VarArg
Kotlin’s vararg and spread operator
Kotlin поддерживает переменное число аргументов (vararg) у функций, но в отличие от Java у него нет ограничения что vararg параметр может быть только один и должен быть расположен последним. В Kotlin у вас вполне будет валидна функция
fun sample(text:String, vararg list1: String, count: Int)
Как такое может компилироваться в валидный байт код? Какова цена разворачивания массива в vararg с помощью spread оператора (*) ? Все это вы можете узнать из статьи.
Kotlin’s vararg and spread operator
Kotlin поддерживает переменное число аргументов (vararg) у функций, но в отличие от Java у него нет ограничения что vararg параметр может быть только один и должен быть расположен последним. В Kotlin у вас вполне будет валидна функция
fun sample(text:String, vararg list1: String, count: Int)
Как такое может компилироваться в валидный байт код? Какова цена разворачивания массива в vararg с помощью spread оператора (*) ? Все это вы можете узнать из статьи.
#AndroidX #RecyclerView #Selection
A guide to recyclerview-selection
Google делает много полезных библиотек в рамках AndroidX, но не всегда они славятся простой той и гибкостью 😞. Яркий пример - RecyclerView Selection. В статье вы найдете руководство о том, как настроить выбор в RecyclerView, а самое главное - череду проблем и как их пришлось решать окольными путями (. Например, не сохраняется состояние после поворота и происходит креш 🤬
A guide to recyclerview-selection
Google делает много полезных библиотек в рамках AndroidX, но не всегда они славятся простой той и гибкостью 😞. Яркий пример - RecyclerView Selection. В статье вы найдете руководство о том, как настроить выбор в RecyclerView, а самое главное - череду проблем и как их пришлось решать окольными путями (. Например, не сохраняется состояние после поворота и происходит креш 🤬
Medium
A guide to recyclerview-selection
I tried the recyclerview-selection on a new project. This article should help if you are planning to integrate the library on your project.
👍1
Android Broadcast
#Kotlin #VarArg Kotlin’s vararg and spread operator Kotlin поддерживает переменное число аргументов (vararg) у функций, но в отличие от Java у него нет ограничения что vararg параметр может быть только один и должен быть расположен последним. В Kotlin у…
Я сделал ошибку о том что сигнатура функции
валидна в Kotlin. Нельзя использовать несколько vararg. Приношу свои извинения.
fun sample(text:String, vararg list1: String, vararg list2: Int)
валидна в Kotlin. Нельзя использовать несколько vararg. Приношу свои извинения.
#RecyclerView
Update recycler view content without refreshing the data
Знали ли вы о роли payload в
???
С помощью этих данных можно обновить элементы вашего списка без необходимости полной перерисовки. Это будет полезно когда вам надо выделить текст на элементе списка, либо свернуть/развернуть его. Как это можно реализовать найдете в статье.
Update recycler view content without refreshing the data
Знали ли вы о роли payload в
RecyclerView.Adapter.notifyItemChanged(int position, Object payload)RecyclerView.Adapter.notifyItemRangeChanged(int positionStart, int itemCount, Object payload)???
С помощью этих данных можно обновить элементы вашего списка без необходимости полной перерисовки. Это будет полезно когда вам надо выделить текст на элементе списка, либо свернуть/развернуть его. Как это можно реализовать найдете в статье.
Medium
Update recycler view content without refreshing the data.
Avoid graphic glitches modifying specific ViewHolder items without redrawing them.
#Firebase #Firestore
Cloud Firestore has Gone GA, Lower Pricing Tiers, New Locations, and more!
Обновления от команды Firebase:
🎉 Firestore вышел из Beta
💲 Новая ценовая политика... скоро. Скидки до 50% при использование серверов в отлдельных регионах
📍 Новые локации с серверами
👉 Возможность просматривать статистику использования Firestore: чтения, запись и удаление. Это поможет в оценке расходов. Работает на основе Stackdriver, благодаря чему позволяет задавать уведомления о достижении лимитов.
Cloud Firestore has Gone GA, Lower Pricing Tiers, New Locations, and more!
Обновления от команды Firebase:
🎉 Firestore вышел из Beta
💲 Новая ценовая политика... скоро. Скидки до 50% при использование серверов в отлдельных регионах
📍 Новые локации с серверами
👉 Возможность просматривать статистику использования Firestore: чтения, запись и удаление. Это поможет в оценке расходов. Работает на основе Stackdriver, благодаря чему позволяет задавать уведомления о достижении лимитов.
The Firebase Blog
Cloud Firestore has Gone GA, Lower Pricing Tiers, New Locations, and more!
Hey there, Firebase developers! Did you hear the news? Cloud Firestore — our NoSQL database in the cloud for mobile and web apps — is officially out of beta and in General Availability!
#UI #Layout #FlexBox
Google FlexboxLayout for Android
Те кто работает с Web технологиями знают о CSS Flexible Layout, довольно гибкое решение для построения UI. Ребята из Google реализовали это решение для Android FlexboxLayout.
Суть layout сводится к тому что он позволяет довольно гибко выстраивать сетку из View, переносить их на новую строку/столбец если они не вмещаются на экране, задвать веса
Поиграться с layout можно с помощью примера Flexbox Playground
Google FlexboxLayout for Android
Те кто работает с Web технологиями знают о CSS Flexible Layout, довольно гибкое решение для построения UI. Ребята из Google реализовали это решение для Android FlexboxLayout.
Суть layout сводится к тому что он позволяет довольно гибко выстраивать сетку из View, переносить их на новую строку/столбец если они не вмещаются на экране, задвать веса
Поиграться с layout можно с помощью примера Flexbox Playground
GitHub
GitHub - google/flexbox-layout: Flexbox for Android
Flexbox for Android . Contribute to google/flexbox-layout development by creating an account on GitHub.
This media is not supported in your browser
VIEW IN TELEGRAM
Пример реализации FlexbotLayoutManager для RecyclerView
#Dagger #AnnotationProcessing
Dagger 2 Reflect
Annotation Processing - бич современной Android разработки, т.к. он увеличивает время сборки значительно и полноценной поддержки инкрементальной компиляции его нет 😞. Jake Wharton разрабатывает решение, которое позволит избавиться от annotation processing для Dagger 2. Однозначное решение более медленное в работе в runtime, но вот время сборки улучшится разы и идеально подходит во время разработки.
Ждем первого релиза и скрестим пальцы 🤞 что Google поддержит эту инициативу и сделает этот проект официальной частью Google Dagger 2
Dagger 2 Reflect
Annotation Processing - бич современной Android разработки, т.к. он увеличивает время сборки значительно и полноценной поддержки инкрементальной компиляции его нет 😞. Jake Wharton разрабатывает решение, которое позволит избавиться от annotation processing для Dagger 2. Однозначное решение более медленное в работе в runtime, но вот время сборки улучшится разы и идеально подходит во время разработки.
Ждем первого релиза и скрестим пальцы 🤞 что Google поддержит эту инициативу и сделает этот проект официальной частью Google Dagger 2
GitHub
GitHub - JakeWharton/dagger-reflect: A reflection-based implementation of the Dagger dependency injection library for fast IDE…
A reflection-based implementation of the Dagger dependency injection library for fast IDE builds. - JakeWharton/dagger-reflect
#Kotlin #Architecture
Tips For Writing a Library in Kotlin
Когда вы будете писать библиотеку под Android, какой язык вы выберете: Java или Kotlin? Если конечный проект не использует Kotlin для него это может быть overhead по размеру. В свою очередь, разработка на Kotlin позволит вам использовать Multiplatform Project (MPP) и писать библиотеку, которая может использоваться на различных платформах: JVM, JS и Native!
Общие советы для написания библиотек:
👉 Делайте API компактным
👉 Делайте API абстрактным и чистым
👉 Используйте интерфейсы
👉 Модуляризация библиотеки
Для Kotlin библиотек:
👉 Добавляйте
👉 Extension функции помогают делать более гибкий API
👉 Используйте
И наконец для MPP:
👉 Используйте Property вместо Getter-ов
👉 Скрывайте Kotlin API, которая не подходит для Java проектов
👉 Скрывайте Java API, который генерируется Kotlin (например с модификатором
👉 Расширяемость
👉 Используйте Multiplatform аннотации
👉 Проблема Multiplatform SAM (Single Abstract Method) -> используйте интерфейсы вместо функций
Tips For Writing a Library in Kotlin
Когда вы будете писать библиотеку под Android, какой язык вы выберете: Java или Kotlin? Если конечный проект не использует Kotlin для него это может быть overhead по размеру. В свою очередь, разработка на Kotlin позволит вам использовать Multiplatform Project (MPP) и писать библиотеку, которая может использоваться на различных платформах: JVM, JS и Native!
Общие советы для написания библиотек:
👉 Делайте API компактным
👉 Делайте API абстрактным и чистым
👉 Используйте интерфейсы
👉 Модуляризация библиотеки
Для Kotlin библиотек:
👉 Добавляйте
companion object, даже если он пустой👉 Extension функции помогают делать более гибкий API
👉 Используйте
reified в функцияхИ наконец для MPP:
👉 Используйте Property вместо Getter-ов
👉 Скрывайте Kotlin API, которая не подходит для Java проектов
👉 Скрывайте Java API, который генерируется Kotlin (например с модификатором
internal)👉 Расширяемость
👉 Используйте Multiplatform аннотации
👉 Проблема Multiplatform SAM (Single Abstract Method) -> используйте интерфейсы вместо функций
От себя порекомендую перед тем как публиковать библиотеку покажите ее своим коллегам, ребятам из сообщества и постарайтесь максимально привлечь людей, чтобы API вашей библиотеки было изучено конечными пользователям с разными потребностями.
#AndroidAcademy #Concurrency #Coroutines #Rx
Android Academy Minsk #2: Threading
Сегодня пройдет встреча Android Academy 😎, на которой я расскажу о как делать многопоточными приложения в Android. В программе:
1️⃣ Как работает Handler/Looper механизм в Android
2️⃣ RxJava: основы подхода, в чем ее сила и как она может стать болью в вашем проекте
3️⃣ Kotlin Coroutines: основы идеи, отличие от блокирующего подхода, основы работы с корутинами, structured concurrency
4️⃣ Подводные камни многопоточной разработки
Проведите вечер понедельника с пользой и приходите в Space (Октябрьская 10Б). Мы начинаем ровно в 19:00! До встречи 👋
Участие бесплатно по предварительной регистрации. Количество билетов ограничено
Android Academy Minsk #2: Threading
Сегодня пройдет встреча Android Academy 😎, на которой я расскажу о как делать многопоточными приложения в Android. В программе:
1️⃣ Как работает Handler/Looper механизм в Android
2️⃣ RxJava: основы подхода, в чем ее сила и как она может стать болью в вашем проекте
3️⃣ Kotlin Coroutines: основы идеи, отличие от блокирующего подхода, основы работы с корутинами, structured concurrency
4️⃣ Подводные камни многопоточной разработки
Проведите вечер понедельника с пользой и приходите в Space (Октябрьская 10Б). Мы начинаем ровно в 19:00! До встречи 👋
Участие бесплатно по предварительной регистрации. Количество билетов ограничено
#Networking #LibUpdates
OkHttp 3.13 was released
Вышла новая версия библиотеки OkHttp. В обновление реализовано:
👉Минимальная поддерживая версия Android 5.0 и Java 8. Это связано с проблемой поддержки TLS 1.2 на старых версиях Android
👉TLSv1 и TLSv1.1 отключены по умолчанию
👉Обновлено Okio до версии 1.17.3. Для тех кто использует Kotlin friendly Okio - обновитесь до версии 2.2.2 и выше
👉 Различный багфикс и улучшения API
OkHttp 3.13 was released
Вышла новая версия библиотеки OkHttp. В обновление реализовано:
👉Минимальная поддерживая версия Android 5.0 и Java 8. Это связано с проблемой поддержки TLS 1.2 на старых версиях Android
👉TLSv1 и TLSv1.1 отключены по умолчанию
👉Обновлено Okio до версии 1.17.3. Для тех кто использует Kotlin friendly Okio - обновитесь до версии 2.2.2 и выше
👉 Различный багфикс и улучшения API
GitHub
okhttp/CHANGELOG.md at master · square/okhttp
Square’s meticulous HTTP client for the JVM, Android, and GraalVM. - square/okhttp
#Gradle
Gradle 5.2 Release Notes
Вышел Gradle 5.2. Релиз не содержит каких-то значимых изменений, из основного:
👉 Новый плагин Java Platform - он позволяет описывать совместимые между собой версии библиотек. Плагин аналогичен функционалу Maven BOM, но только в специфичном формате для Gradle
👉 Сборка нативных проектов при помощи Gradle. В новом релизе рекомендуют использовать новый Gradle C++ плагин
👉 Множество улучшений и багфиксов
Gradle 5.2 Release Notes
Вышел Gradle 5.2. Релиз не содержит каких-то значимых изменений, из основного:
👉 Новый плагин Java Platform - он позволяет описывать совместимые между собой версии библиотек. Плагин аналогичен функционалу Maven BOM, но только в специфичном формате для Gradle
👉 Сборка нативных проектов при помощи Gradle. В новом релизе рекомендуют использовать новый Gradle C++ плагин
👉 Множество улучшений и багфиксов
blog.gradle.org
Introducing the new C++ plugins
This post introduces some new plugins for C++ that we’ve been working on. These plugins can build C++ libraries and applications. They work on macOS, Linux, and Windows with GCC, Clang and Visual C++/Visual ...
Android Broadcast
#Networking #LibUpdates OkHttp 3.13 was released Вышла новая версия библиотеки OkHttp. В обновление реализовано: 👉Минимальная поддерживая версия Android 5.0 и Java 8. Это связано с проблемой поддержки TLS 1.2 на старых версиях Android 👉TLSv1 и TLSv1.1 отключены…
Why OkHttp 3.13 Requires Android 5+
OkHttp3 были вынуждены поднять минимальную версию Android до 5.0, чтобы обеспечивать лучшую защиту для приложений. Также решение оправдано, потому что количество пользователей на Android 4.X сейчас значительно меньше по сравнению с более новыми версиями ОС.
Для тех кто поддерживает Androiud 4.X в своих приложениях не переживайте, версия библиотеки 4.12 будет поддерживаться исправлениями багов до 2020 года
OkHttp3 были вынуждены поднять минимальную версию Android до 5.0, чтобы обеспечивать лучшую защиту для приложений. Также решение оправдано, потому что количество пользователей на Android 4.X сейчас значительно меньше по сравнению с более новыми версиями ОС.
Для тех кто поддерживает Androiud 4.X в своих приложениях не переживайте, версия библиотеки 4.12 будет поддерживаться исправлениями багов до 2020 года
Medium
OkHttp 3.13 Requires Android 5+
Today we’re releasing OkHttp 3.13
#NullSafety #ErrorProne #CodeQuality
Engineering NullAway, Uber’s Open Source Tool for Detecting NullPointerExceptions on Android
В Uber разработали расширение для ErrorPhone, который позволяет анализировать Java код во время компиляции на потенциальные NPE и в случае проблем не дает скомпилироваться коду.
Для тех кто пишет на Kotlin и не имеет Java исходников в проекте - библиотека неактуальна.
NullAway Github
Engineering NullAway, Uber’s Open Source Tool for Detecting NullPointerExceptions on Android
В Uber разработали расширение для ErrorPhone, который позволяет анализировать Java код во время компиляции на потенциальные NPE и в случае проблем не дает скомпилироваться коду.
Для тех кто пишет на Kotlin и не имеет Java исходников в проекте - библиотека неактуальна.
NullAway Github
#EffectiveJava #ErrorProne #CodeQuality
Nope'n! from Jake Wharton
Расширение для ErrorProne, которое будет полезно для авторов библиотек. Оно требует чтобы все ваши классы были явно объявлены как final, либо abstract либо помечены аннотацией @Open, в противном случае код не скомпилируется.
В результате проверки вы увидите ошибку:
Nope'n! from Jake Wharton
Расширение для ErrorProne, которое будет полезно для авторов библиотек. Оно требует чтобы все ваши классы были явно объявлены как final, либо abstract либо помечены аннотацией @Open, в противном случае код не скомпилируется.
В результате проверки вы увидите ошибку:
Bad.java:1: error: [Nopen] Classes should be explicitly marked final, abstract, or @Openclass Bad {}GitHub
GitHub - JakeWharton/nopen: An error-prone checker which requires that classes be final, abstract or annotated with @ Open.
An error-prone checker which requires that classes be final, abstract or annotated with @ Open. - JakeWharton/nopen