ru
Feedback
Android Live 🤖

Android Live 🤖

Открыть в Telegram

Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю

Больше
5 158
Подписчики
Нет данных24 часа
+17 дней
-930 день
Архив постов
​​Кроссплатформенные приложения на Kotlin #kotlin #crossplatform #compose Одним из главных преимуществ Flutter перед Kotlin Multiplatform на сегодня является возможность создавать общий UI. К счастью, JetBrains работает над этой проблемой, и не так давно был анонс Jetpack Compose, который работает на Windows. Нашёл статью, где описан пример приложения, работающего как под Windows, так и под Android. Автор использует библиотеку Decompose, созданную для улучшения работы с бизнес логикой, навигацией и UI. Уже нет сомнений, что Jetpack Compose будущее UI для Android. Интересно, насколько Jetpack Compose приживётся в создании приложений под Windows? 🤔

Вместе с тем как растет количество владельцев смартфонов, увеличивается спрос на специалистов, умеющих ими управлять и програ
Вместе с тем как растет количество владельцев смартфонов, увеличивается спрос на специалистов, умеющих ими управлять и программировать. Android-разработчик — профессия будущего. Если вы хотите ворваться в перспективную IT-сферу — приходите на Факультет Android-разработки образовательной экосистемы GeekBrains. Вместе с опытными учителями-практиками освоите современные технологии Android-разработки и научитесь делать свои приложения. Получите все нужные навыки, диплом, сертификат и поддержку при трудоустройстве. Кстати, год учебной практики в GeekBrains — это год реального рабочего опыта. Сможете претендовать на позиции не только junior, но и middle. После успешного окончания обучения на факультете GeekBrains гарантирует трудоустройство в Mail.ru Group или в одну из компаний-партнеров. Записывайтесь прямо сейчас — и получите скидку 45%https://geekbrains.ru/link/Xv8Br6

​​Ещё про MotionLayout #motionlayout #subscribers Новая рубрика, где каждый из вас может поделиться интересными статьями начинается! Вдогонку ко вчерашнему посту, рассказывающем о знакомстве с MotionLayout, @Vel_daN делится циклом своих статей, где рассказывает о более глубоком использовании этого компонента. Главным недостатком MotionLayout является то, что если мы хотим создать анимацию с его использованием, то необходимо зарегистрировать все состояния в MotionScene при помощи ConstraintSet. Если наша анимация объёмная, то это сбивает с толку, становится нечитаемым, ну и всё ещё не отображается в runtime. Решение — это использовать xml-файлы, что заметно сокращает код и делает его более читаемым. Пока есть три статьи, вот первая, вторая и третья. @Vel_daN также согласился ответить на ваши вопросы, связанные с MotionLayout и поделиться своим опытом, поэтому если у вас есть вопросы — можете задавать их в нашем чате.

​​Знакомство с MotionLayout #intro #motionlayout Думаю, что многие из вас уже знакомы с MotionLayout и теми фичами, которые он предоставляет. Если нет или вы недавно в Android-разработке, то пара статей поможет вам быстро разобраться с базовыми вещами, которые в нём есть. Для начала есть статья, которая описывает функции Motion Editor — базового инструмента для предварительного просмотра созданных при помощи MotionLayout анимаций. В ней можно почитать про основные панели — Overview, Selection, Attribute, Preview и на примере посмотреть, как их использовать в проекте. А если вы уже изучили теорию или она кажется вам слишком скучной, то есть CodeLab, где можно на практике закодидить анимацию и посмотреть, как она будет работать в реальном проекте. Тут можно изучить: • ConstraintSets; • анимации, которые работают на drag events; • изменение анимации при помощи KeyPosition; • изменение атрибутов при помощи KeyAttribute. • анимацию шапки при помощи MotionLayout.

​​Firebase Android BoM #firebase Недавно настраивал пуш-уведомления для проекта и, как обычно, полез в документацию Firebase, чтобы посмотреть необходимые зависимости. К моему удивлению, появился механизм, который называется Firebase Android BoM. Суть в том, что теперь не нужно обновлять все версии Firebase библиотек по отдельности, а достаточно обновить только одну версию — версию BoM. Главной фишкой является то, что обновлённые библиотеки будут совместимы между собой. Выглядит это так: dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:26.1.0') // Declare the dependencies for the desired Firebase products without specifying versions // For example, declare the dependencies for Firebase Authentication and Cloud Firestore implementation 'com.google.firebase:firebase-auth' implementation 'com.google.firebase:firebase-firestore' } Посмотреть, какие конкретно версии библиотек включены в конкретный BoM можно тут, а почитать детальнее можно в документации.

Пост для Android-разработчиков, которые следят за безопасностью своих приложений 🔥🔥🔥 Авторский канал «paradiSEcurity» расскажет про информационную безопасносность мобильных приложений. В кратких, но емких постах раскрываются важные темы: 🌶 как создавать безопасные приложения 🌶 как сделать реверс приложения 🌶 почему сложно организовать голосование на выборах через приложение Если интересуешься лучшими практиками защиты приложений и хочешь понимать, почему даже они не всегда выдерживают хакерские атаки, то 👉 @paradisecurity

​​Новый рубрики #android_live Хочется добавить на канал больше социальной активности и пользы для вас, мои подписчики ✌️. Поэтому, хочу анонсировать две новые рубрики на канале: 1) От подписчика. Теперь у каждого из вас есть возможность поделиться чем-то с другими. Это может быть что угодно: начиная от статьи, которая вам понравилась и может понравиться другим и заканчивая уникальным опытом работы в компании, открытия своего стартапа или проекта. А вдруг среди нас есть авторы известных библиотек, и вы хотите ответить на вопросы разработчиков, чтобы сделать своё творение ещё лучше. Всем этим можно поделиться на канале в виде простого поста или целого треда с обсуждениями. 2) Вопрос к эксперту. Также у вас есть возможность узнать ответ на наболевший вопрос у экспертов. Возможно, вы не знаете как правильно решить конфликт у себя в команде, а может у вас нет представления, куда двигаться в карьерном плане. Теперь можно получить ответы на эти и многие другие вопросы здесь – на канале. Эксперты будут подбираться мной в зависимости от специфики вопроса. Важно, чтобы этот вопрос был интересен не только вам, а также не был таким, ответ на который легко загуглить. Не стесняйтесь участвовать в этих активностях и пишите мне. А также напоминаю, что обсудить всё, что происходит на канале можно у нас в чате.

​​Как сделать компилятор Kotlin умнее #article #kotlin Компилятор Kotlin довольно умный и даёт нам подсказки о наших же ошибках. Одной из самых заметных фич в компиляторе Kotlin является smart casting. Это значит, что компилятор может выполнять приведение типов на основе проверок, выполненных разработчиком. Однако механизм smart casting не безграничен. Например, компилятор может проверить переменные только в том блоке, где эти проверки были непосредственно выполнены. Немногие разработчики знают, что можно написать контракты, которые помогут компилятору в его работе. Например, если вы создадите контракт, функция которого возвращает true, в случае если переменная не равна null, компилятор выполнит приведение типа и сделает нашу переменную non-nullable. Contract DSL выглядит так: fun foo(): Boolean { contract { // Effect } // Function body } Можно использовать следующие функции для того, чтобы описать контракт: 🔸returns(value) — описывает ситуацию, когда функция нормально возвращается с указанным значением. 🔸returnsNotNull() — описывает ситуацию, когда функция возвращает non-nullable значение. 🔸implies(booleanExpression) — указывает, что данный наблюдаемый эффект будет истинным при заданном booleanExpression 🔸callsInPlace(lambda, kind) — позволяет указать, как часто будет выполняться данная лямбда. Краткое описание параметров способно запутать, но можно обратиться к статье, чтобы получить больше информации с примерами. Надеюсь, что в будущем появится ещё больше функций для описания контрактов 🤟.

​​Немного про let #kotlin #article Во вчерашнем посте был первый совет с использованием let для проверки переменной на null. @atlantik_hak подкинул годную статью, где описываются примеры, когда не стоит использовать let для этих целей, а когда let — самое лучшее решение для проверки. Итак, когда лучше не использовать let: ⭕ для проверки на null immutable переменной. Хотя и запись a?.let { foo(a) } получается довольно изящной, она генерирует лишнюю переменную в байткоде, в отличии от аналога if not null. Врядли вы заметите огромную разницу, но если можно избежать создания лишней переменной, то почему бы этого не сделать. ⭕ если вы хотите использовать переменную только внутри let. Чаще всего мы делаем проверку именно для того, чтобы использовать её внутри блока. Например, мы хотим что-то сделать с webView: webviewSetting?.let { it.javaScriptEnabled = true it.databaseEnabled = true } вместо этого можно использовать функцию run webviewSetting?.run { javaScriptEnabled = true databaseEnabled = true } который уберёт лишние it. ⭕ если хотите передать переменную дальше по цепочке. Например, если вы хотите указать размер списка, если он не null, а дальше что-то продолжить делать с ним. Альтернативным решением будет использование also, хотя это тоже не идеальное решение. Когда же тогда использовать let? 🟢 для проверки на null mutable переменной. Тут хорошо подходит let, так как он избавляет нас от дополнительного ? при взаимодействии с переменной. private var str: String? = null fun process() { str?.let { /*Do something*/ } } 🟢 если хотите использовать переменную снаружи от let. Например, если вы хотите проициализировать другие переменные тем классом, что был у вас: var javaScriptEnabled = false var databaseEnabled = false webviewSetting?.let { javaScriptEnabled = it.javaScriptEnabled databaseEnabled = it.databaseEnabled } Это удобнее для review кода, чем функция run. 🟢 когда у вас есть проверка из цепочки `?`. Например: return string?.asIterable()?.distinct()?.sorted() генерирует больше байткода, чем: return string?.let { it.asIterable().distinct().sorted() } Спасибо подписчикам, которые дают обратную связь по постам ✌️. И уверен, что теперь вы будете использовать let аккуратнее.

​​Несколько советов по Kotlin для Android разработчиков #article #kotlin Ни для кого не секрет, что сегодня Kotlin — это официальный язык для нативной разработки под Android. Он призван уменьшить количество написанного кода и улучшить его качество. В целом, со своей задачей он справляется, однако не все разработчики используют все фичи этого языка при написании кода, делая всё «по старинке». Попалась статья, которая даёт 7 советов написания кода «Kotlinic» способом. Вот несколько из них: 🔸используйте функцию `let`, чтобы проверить поле на null. Проверка на null — это очень распространённое действие, несмотря на то, что в Kotlin есть nullable-переменные. Многие забывают, что существует хорошая альтернатива if not null выражению — функция let, в которой код превращается в a?.let { foo(a) }. 🔸используйте функции для создания списков. Очень часто мы для заполнения списков используем цикл for и забываем про средста Kotlin. Например, заполнить список значениями по умолчанию можно в одну строку: val list = IntArray(10) { 1 }.asList(). Но подобным образом можно заполнить список разными значениями: val list = List(5, {it*2}), что даст нам список от 0 до 8 с шагом 2. 🔸используйте `require` и `check` для работы с исключениями. Например, если мы хотим, чтобы наша переменная была больше нуля, то можно вызвать функцию: require(n >0) { Should be more than zero }. 🔸используйте `apply` и `with`, чтобы уменьшить повторы кода. Эти две функции полезны, если мы хотим сделать несколько действий с нашей переменной. Такое часто бывает при работе сo RecyclerView, которому нужно задать layout manager и несколько других свойств. 🔸используйте методы `partition` и `groupBy` для списков. Эти функции помогают нам сделать несколько списков из одного по заданному условию. Добавлю сюда ещё функцию groupByTo, в которой мы можем указать то, в какую структуру превратить наш список. 🔸используйте method references вместо lambda expressions для простых действий. Довольно интересный совет, который не так часто видишь в коде. Например, у нас есть список объектов Person, который мы хотим преобразовать в список имён. Мы можем использовать method references в map, чтобы сделать это более красивым способом: val names = persons.map(Person::name). Надеюсь, что вы нашли для себя полезный совет, который будете применять на практике. 🤓

🔥Узнайте больше про Android-разработку на Kotlin на бесплатных демо-уроках онлайн-курсов «Android Developer. Professional» и
🔥Узнайте больше про Android-разработку на Kotlin на бесплатных демо-уроках онлайн-курсов «Android Developer. Professional» и «Android Developer. Basic» от OTUS и Альфа-Банка: 📌«Kotlin codegeneration» (продвинутый курс): https://otus.pw/od80/ — Рассмотрим, зачем может понадобиться кодогенерация. Узнаем, что такое Annotation Processing. Изучим фреймворк для генерации кода. Погенерируем свой код и уберем бойлерплейт из нашего приложения. 📌«Unit-тестирование в Android» (базовый курс): https://otus.pw/CnMm/ — Изучим Unit-тесты. Научимся тестировать компоненты, классы и методы в Java. Рассмотрим технологию TDD. 👉🏻Регистрируйтесь сейчас — напомним в день вебинара!

​​История про memory leaks, WeakReferences и ошибки при исправлении #article Попалась любопытная статья, где рассказывается о неверном использовании механизма ссылок WeakReference. В ней описывается пример использования WeakReference как костыля для работы с утечками памяти. Автор решил изучить вопрос, и рассмотрел несколько вариантов борьбы с этой проблемой. Описываются все плюсы и минусы решений. Тут и EventBus, и LiveData, и RxJava с BehaviorRelay, да и многие другие, менее очевидные решения. Множество информации можно почерпнуть тут.

​​Результаты розыгрыша билета на Mobius 2020 #конкурс #conference Итак, самое время опубликовать результаты конкурса, который был объявлен в предыдущем посте. В конкурсе принял участие 41 человек. При помощи генератора случайных чисел был выбран победитель — @ddgradd, с чем я его поздравляю! 🎊 Видео с выбором победителя тут. Обязательно участвуйте в новых конкурсах и конечно же выигрывайте!

​​Mobius 2020 #conference Уже на следующей неделе, с 11 по 14 ноября, нас ожидает конференция для мобильных разработчиков — Mobius 2020. Расписание полностью сформировано, и для нашего удобства доклады разделены на 4 дня. Поделюсь парочкой интересны для меня докладов: В докладе Увлекательная жизнь в панели уведомлений, Кирилл Розов расскажет про работу с уведомлениями, их настройкой в разных версиях Android. Выглядит интересно, и мне кажется, что notification часто недооценивают разработчики и не используют их на 100%. Есть сразу несколько докладов, связанных с декларативными фреимворками, вот один их них: Декларативный UI сегодня — Петр Козлов и другие спикеры сравнят существующие решения для декларативного UI, в каком статусе они находятся сегодня и стоит ли использовать их в production. В докладе Offline-mode в несколько строк кода Алексей Быков поделится тем, как правильно создавать абстракцию для работы с данными и реализовать кэширование в несколько строк кода. Посмотрим, насколько подобный подход универсален для всех приложений. Есть несколько воркшопов, и вот один из них: Flutter Zero LiveShow от Александра Денисова, где в прямом эфире будет написано приложение с нуля на Flutter. Лично мне интересно посмотреть итоговый результат. 🤓 Всё расписание можно почитать тут, а купить билеты со скидкой по промокоду AndroidLive2020aupc на конференцию можно тут. Но это ещё не всё. Не могу оставить вас без шанса выиграть один билет на конференцию бесплатно. 🤗 Всё что нужно сделать — это оставить свой никнейм в Telegram в этой форме, результаты розыгрыша будут объявлены 9 ноября в 18:00.

​​Jetpack Compose for Desktop #jetpack #compose Сегодня появилась хорошая новость: команда JetBrains анонсировала выход первого релиза Jetpack Compose for Desktop — фреимворк для UI, который теперь позволяет делать UI для компьютеров! Он базируется на известном нам Jetpack Compose, который уже в более поздней стадии разработки под Android. И самое главное то, что есть возможность переиспользования этих компонентов между собой. Уже есть несколько примеров приложений, а чуть больше деталей об инструменте можно почитать тут.

⚡ Какие навыки нужны начинающему iOS-разработчику, чтобы занять уверенные позиции в профессии? 6 ноября в 20:00 Константин Са
Какие навыки нужны начинающему iOS-разработчику, чтобы занять уверенные позиции в профессии? 6 ноября в 20:00 Константин Савялов поделится карьерными инсайтами и представит программу онлайн-курса «iOS Developer. Basic». Регистрация на вебинар: https://otus.pw/hcuu/

​​Автоматическое обновление зависимостей gradle #gradle #library Обновление зависимостей gradle, особенно в большом проекте, может стать отдельной задачей. 🤦‍♂️ Разработчикам чаще всего приходится вручную проверять новые версии, что приводит к потере времени. Нет смысла не делать обновления: разработчики делают правки в библиотеках, улучшают их производительность и качество. Есть любопытное решение, которое я не встречал раньше — Releases Hub Gradle Plugin. Плагин проверяет текущие версии библиотек (например во время сборки билда на CI) и делает PR с обновлениями. Каждый PR содержит информацию об новых фичах, добавленных в обновлении, ссылки на документацию, настройки веток и т.д. Выглядит довольно интересно, но всё равно на разработчике и QA лежит задача проверки работоспособности приложения после каждого обновления, особенно когда дело касается важных библиотек. Больше почитать о плагине можно тут.

​​Уроки по Navigation Component #navigation #jetpack #poll Разработчики от Google начали делать раздел, посвящённый современным паттернам Android-разработки, где детально описывают, как применять современные подходы разработки для приложений. Недавно у них завершилась неделя по Navigation Architecture Component, где нам дали краткое, но ёмкое overview по этому компоненту. 🔸в первом эпизоде описываются базовые принципы работы navigation: как добавить её в приложение, из каких частей она состоит, как работают некоторые части API, чтобы заставить навигацию работать. В текстовом виде можно почитать тут. 🔸во втором видео говорится об использовании navgiation для показа диалогов. Это пример того, как использовать navigation вне NavHostFragment. В текстовом виде тут. 🔸в третьем эпизоде говорится о SafeArgs: это способ безопасной передачи данных между компонентами в navgiaton. В тексте тут. 🔸в четвёртом эпизоде информация о механизме Deep Links, и о том как реализовать их при помощи navigation. В тексте тут. 🔸последний эпизод — это Q&A сессия со спикерами, где они отвечают на популярные вопросы: multiple backstacks, поддержка Jetpack Compose, Up-vs-Back, saving state и другое. Текста, к сожалению, нет, но и сделать его из такого большого видео было бы проблематично. Также приложение, которое использовалось в качестве примера на протяжении всей серии. А вы используете, Navigation Component в своих проектах?

​​Жизнь в Германии #интервью #экспаты Итак, второе интервью на канале про жизнь в разных странах! Наш гость — Василий Лютиков. Он проживает в городе Остфильдерн, недалеко от Штутгарта в Германии. Он работает iOS-разработчиком в компании Mädchenflohmarkt GmbH, компания, которая позволяет избавится от лишних вещей в женском гардеробе и название которой довольно сложно произнести русскоговорящему человеку. Хотя Василий и не Android-разработчик, уверен, что сможет дать кучу информации про Германию всем нам. У каждого, как всегда, есть возможность задать свои вопросы в форме тут.

​​Бесконечный список с Paging Library и Flow #flow #jetpack Сегодня вышел релиз coroutines 1.4.0, где было много классных изменений, связанных с Flow. Мне кажется, что сегодня Flow довольно стабилен, и нет смысла не использовать его в production-проектах, тем более, когда стабильными стали StateFlow и SharedFlow. Хочу поделиться статьёй, где автор рассказывает о создании бесконечного списка с помощью объединения Flow и Paging Library. В итоге получился довольно лаконичный код, где разработчику нужно по минимуму заморачиваться с логикой получения списка.

Android Live 🤖 - Статистика и аналитика Telegram-канала @android_live