uk
Feedback
Android Live 🤖

Android Live 🤖

Відкрити в Telegram

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

Показати більше
5 158
Підписники
-224 години
+17 днів
-1030 день
Архів дописів
Кевин Калкин теперь в Телеграме! Тинькофф воссоздал персонажа нашего детства в виде телеграм-бота — Кевин болтает о жизни, шу
Кевин Калкин теперь в Телеграме! Тинькофф воссоздал персонажа нашего детства в виде телеграм-бота — Кевин болтает о жизни, шутит и даже записывает аудиосообщения. Это все часть новогоднего текстового квеста Code Alone для программистов 🧑‍💻👩‍💻 По сюжету маленький Кевин застрял один дома и обороняет свой дом от бандитов. Из связи у малыша — только Телеграм с одним единственным контактом — вашим. Кевин ежедневно присылает программистские задачки, чтобы устраивать ловушки для бандитов, используя умный дом. Зачем участвовать? 1. Во-первых, эндорфины от решения задачек. 2. Во-вторых, вернуться в атмосферу одной из главных историй нашего детства. 3. И, конечно, подарки 🎁 Тем, кто решает задачки быстрее и лучших других, прилетают призы 🎄 В общем, строго рекомендовано для программистов, которым не хватает новогоднего настроения Чтобы начать играть, просто запускайте бота: https://t.me/kevin_codealone_bot #партнёрский

​​Уменьшение размера apk-файла #android Тема уменьшения размера apk-файла очень важна для любого приложения, несмотря на то, что Интернет дешевеет, а памяти становится больше (хоть и не всегда). Есть статистика, которая говорит о том, что около 70% пользователей оценивает размер приложения перед его загрузкой. Поэтому, если совсем не задумываться об этом, то можно получить ситуацию, когда ваше приложение не будет загружено только лишь из-за этой характеристики. Давайте сделаем небольшой чек-лист, где опишем, что надо сделать, чтобы apk-файл занимал минимальное количество памяти. 1️⃣ Запускаем Analyze APK tool, которая встроена в Android Studio. Найти её можно в меню Analyze -> Analyze APK… После выбора файла, мы получим описание того, что занимает большую часть памяти. 2️⃣ Удаляем неиспользуемые библиотеки. Первое, довольно затратное по времени дело — это анализ тех библиотек, которые есть у вас в проекте, но не используются. Ещё обратите внимание на большие библиотеки из которых вы используете всего пару компонентов. Быть может, их можно вынести отдельно в ваш код и удалить лишнюю зависимость. Приятный бонус — у вас просто станет меньше зависимостей, а меньше кода = меньше багов 😀 3️⃣ Включаем Proguard и R8. У этих инструментов есть возможность удаления неиспользуемого кода в приложении, а также обфускация. И то, и другое — крутая фича, которую мы получим, если включим minifyEnabled true в build.gradle. Обязательно настройте правила и проверьте, чтобы итоговый apk корректно собирался и не падал. 4️⃣ Удаляем неиспользуемые ресурсы. Очищаем неиспользуемые строки и ресурсы при помощи Refactor -> Remove unused resources. 5️⃣ Используем vector drawable и webp. При использовании изображений отдавайте предпочтение этим форматам вместо png или jpeg. Кстати, не стоит делать копии векторных ресурсов, если они отличаются только цветом, ведь цвет легко поменять при помощи свойства tint. 6️⃣ Убираем неиспользуемые языки. Вы удивитесь, насколько много лишних строк скрывается в приложении от библиотек. Если ваше приложение переведено на один или два языка, то есть смысл оставить только их и выкинуть неиспользуемое. Сделать это можно при помощи resConfigs "en", который прописываем также в build.gradle. 7️⃣ Включаем Dynamic Feature. Если в вашем приложении есть функциональность, которая не нужна всем пользователям или же её можно загрузить позже, то есть смысл динамически подгружать её во время использования приложения. Уверен, что всегда есть, куда расти и сделать приложение меньше. Поделитесь своими рекомендациями, если их наберётся больше, то сделаем вторую часть, сделав наши приложения максимально оптимизированными.✌️

🔥 Как android-разработчику выделиться среди коллег? Приглашаем вас 16 декабря в 20.00 на день открытых дверей онлайн-курса «
🔥 Как android-разработчику выделиться среди коллег? Приглашаем вас 16 декабря в 20.00 на день открытых дверей онлайн-курса «Android Developer. Professional» от OTUS. ⚡️ Спикер расскажет вам, что нужно знать и уметь, чтобы продвигаться по карьерной лестнице, проведет обзор рынка труда и представит программу курса, а также формат обучения в OTUS. Вы сможете задать интересующие вас вопросы и познакомиться с преподавателем. 👉 Регистрируйтесь на вебинар и задайте свои вопросы эксперту в прямом эфире https://otus.pw/bt88/ #партнёрский

Друзья, ждать больше невозможно 😁 Да-да, уже сегодня вечером состоится жеребьевка в нашем Тайном Санте. О том что это, где, как и зачем, писал тут. И да, сегодня еще можно присоединиться, стать для кого-то добрым вестником Рождетсва и предновогоднего чуда ✨ P.S. Те кто уже зарегистрировался и заполнил анкеты, пожалуйста, не забудьте подтвердить электронную почту, это важно. ✌️ Ведь иначе вы не сможете участвовать в жеребьевке.

​​Как работает Crashlytics? #android Кажется, что все разработчики под Android пользовались инструментом под названием Crashlytics. Ведь это одна их самых распространённых библиотек для того, чтобы «поймать» краши, ошибки и некорректное поведение и потом их исправить. Но мало кто знает, как работает этот распространённый компонент под капотом. Автор статьи решил посмотреть, как же всё таки он устроен и детально описал, для чего каждый класс нужен. 👍🏻

Android Meetup СберМаркет Tech 9 декабря в 18:00📱 На митапе вы узнаете: — Как интегрировать Swift в React Native? Что такое
Android Meetup СберМаркет Tech 9 декабря в 18:00📱 На митапе вы узнаете: — Как интегрировать Swift в React Native? Что такое нативный компомент и как его написать с shadow view и yoga? — Как организовать структуру пайплайнов и внедрить Continuous Integration в React Native проект? — Зачем использовать JetpackCompose внутри React Native? — Как эволюционировали архитектурные подходы в мобильной разработке? Регистрация и подробности программы: https://sbermarket.timepad.ru/event/1851300/ #партнёрский

Ребята, а мы уже начали. Присоединяйтесь к первому докладу. 😉

А уже завтра 4 декабря состоится крутая онлайн-конференция — DevFest Russia 2021, которую организуют сообщества GDG из разных городов России. Планируется три потока: Web, Mobile и Cloud, а спикерами будут опытные Google Developer Experts, которые поделятся докладами на различные, актуальные темы. Конференция на русском языке. ✌🏻Обязательно присоединяйтесь на Mobile-поток, где я буду модерировать. Ссылка на трансляции тут, а сам список докладов — тут. 💪 #conference

​​Релиз Compose Multiplatform #compose Отличная новость от ребят из JetBrains — Compose Multiplatform, который позволяет писать UI на десктоп и web, готов к production коду! Или же просто зарелизился. Хорошая новость заключается в том, что по большей части он совместим с Jetpack Compose, поэтому можно делать свой код сразу на три платформы. Подробнее можно почитать тут.

​​Postman capture feature #tests Интересная статья для настройки слушателя реальных запросов с Android-устройства на Postman. Для подобных вещей часто используют Charles, но я уже использую Postman для тестирования запросов, поэтому можно не ставить себе ещё одну программу для тестирования.

​​Общение между Fragments #fragment Довольно частой задачей в приложении, которое использует Fragments является передача данных из одного фрагмента в другой. Можно встретить множество подходов для решения этой задачи, начиная от создания интерфейса для передачи, использования классов-хелперов до создания общей ViewModel. Но на самом деле, не так давно появился куда более простой и удобный способ. Если вы его ещё не используете, то настало то самое время. 1️⃣ Добавьте setFragmentResultListener() в том фрагменте, где вы хотите слушать результат. 2️⃣ Вызовите setFragmentResult("requestKey", bundleOf("bundleKey" to result)) в том фрагменте, где хотите отправить результат. И на этом всё. Главное следите за FragmentManager, и если вам не пришёл результат, то проверьте, правильно ли вы вызываете показ этого фрагмента. Чуть больше кода можно найти тут.

​​Удобный Permissions Manager #library Почти все сегодняшние приложения под Android запрашивают и обрабатывают Permissions. На мой взгляд, первая имплементация для запроса разрешений была не самая удачная. Ведь надо было прописывать onActivityResult для получения результата и полная реализация получения была громоздкой. Тогда и стали активно появляться различные обёртки библиотеки, которые заметно упрощают получение разрешений. Но на днях решил посмотреть, а насколько тяжело сейчас реализовать получение «пермишенов» и что изменилось. И к счастью, нашёлся крутой вариант, позволяющий добавить реализацию буквально в несколько строк кода. Для запроса нам надо зарегистрировать requestPermissionLauncher и вызвать: requestPermissionLauncher.launch(Manifest.permission.REQUESTED_PERMISSION) с нужным разрешением. В итоге получаем: val requestPermissionLauncher = registerForActivityResult(RequestPermission() ) { isGranted: Boolean -> if (isGranted) { // Permission is granted. } else { // Permission is denied. } } Я тут добавил немного «магии» Kotlin, причесав всё делегатами и получилось ещё удобнее, можете ознакомиться тут. Так что теперь смело можно выкинуть ещё одну либу из проекта.

​​DI.kt — фреимворк для KMM #kmm #library Тут ребята из Wrike выложили один из первых DI-фреимворков для KMM — DI.kt. Если вы не понимаете, зачем нужна ещё одна библиотека для DI (ведь есть Koin или Kodein), то ответ — отсутствие compile-time валидации, ведь текущие библиотеки представляют из себя service locators. Для имногих подобная валидация является критически важной, поэтому можно рассмотреть эту библиотеку в будущих проектах. Да, пока она alpha, поэтому стоит пользоваться ей только в своих проектах. Ссылка на то, как её использовать тут, API выглядит простым. 🤞🏻

​​Тайный Санта 🎅 #android_live Уже минул экватор ноября, а это значит – пора начинать готовиться к Новому Году! В этом году захотелось попробовать на канале новую, но широко известную тему с Тайным Сантой. Каждый из вас может поучаствовать в этой игре (где нет проигравших 🎁), условия очень просты: 1️⃣ Зарегистрироваться по ссылке на специальном ресурсе, который автоматически распределит участников 2️⃣ Быть готовым принять и отправить подарок: сумма подарка составляет ~800 рублей. В целом, это всё. Приём участников начинается сегодня и заканчивается 30 ноября, после чего будет автоматическая жеребьёвка. Подарки получать всегда приятно, да и новогоднее настроение само себя не создаст 😉 Поэтому, переходим по ссылке и участвуем вместе с нами. Вопросы можете писать в комментариях, или мне в личку.🎄

​​Релиз Kotlin 1.6.0 #kotlin Состоялся релиз Kotlin 1.6.0, в котором появилось несколько изменений: 1️⃣ exhaustive when — долгожданная фича, суть которой в подсветке новых enum и sealed при их использовании в операторе when. То есть теперь компилятор будет выдавать ошибку, если вы возвращаете тип, который не описали в when и пока что выдавать warning, если просто выполняете when в функции. С 1.7.0 там тоже будет ошибка. 2️⃣ Изменения в поддержке suspend-функций — стало ещё удобнее работать с suspend-функциями, их работа стала аналогична обычным функциям. Лучше посмотреть пример того, как эти штуки работают тут. 3️⃣ Можно попробовать новую версию менеджера памяти — больше деталей тут. Обещают заметно улучшить разработку проектов на KMM, ведь менеджер уберёт проблемы, связанные с доступом к объектам из разных потоков, и теперь не придётся управлять этими процессами вручную. Ну и ещё пару мелких изменений с билдерами, операторами и Kotlin/JS. Обо всех изменениях читайте в релизе. 😉

​​Android CI/CD: GitLab + Slack bot #cicd Интересная связка для автоматизации сбора билдов, описанная в статье. Автор решил дать возможность выбрать любую ветку для сборки, собирая её на встроенной в GitLab CI/CD. Получилось довольно круто: любой может выбрать при помощи бота Slack ветку для сборки, будь то тестировщик, который хочет посмотреть определённую фичу или разработчик, который просто делает ежедневные сборки. 🤘 Кстати, а нет ли похожего бота в Telegram? Если знаете, то поделитесь в комментариях.

​​Support Modern Emoji #design Emoji сегодня — довольно важная часть, которая используется повсеместно, будь то чаты или просто текстовые поля. Однако, не все emoji одинаково отображаются на всех устройствах. Если мы говорим про более старые гаджеты, то вместо красивой иконки мы может получить просто квадрат. А ещё, мало кто задумывается, что комбинация из 2 и более emoji может давать новую. Любопытная статья, которая рассказывает об отображении emoji в текстовых полях. На самом деле, есть целая библиотека, которая помогает отобразить emoji на старых устройствах, начиная с API 19. Она интегрирована в AppCompat 1.4, поэтому вам не нужно ничего докручивать. Но очень круто почитать, как это работает под капотом и о том, что происходит если вводить emoji в текстовые поля.

🔥 Podlodka's Hot News: Второй сезон Soft Skills Crew стартует в новом формате однонедельной конференции. Стартуют 15 ноября. Сессии проводят дважды в день: утром и вечером. В программе: крутые спикеры, сессии в лайве, ламповое общение и обмен кейсами в слаке, записи (для тех, кто не успевает на лайв). Тема недели Общение с руководством: – Поймете, как презентовать результаты работы руководителю – Узнаете, как строить продуктивный диалог в сложных кейсах – Научитесь договариваться о повышении или прибавке Подробности и билеты уже на сайте!🤘 Промокод для скидки — android_live_soft_crew_2 #партнёрский

​​Изучаем папку .idea in Android #android При создании нового проекта, автоматически создаётся папка .idea, которая часто автоматически попадает в .gitignore. Но на самом деле, некоторые компоненты из этой папки стоит оставить, а некоторые можно время от времени удалять, чтобы сэкономить место на диске. Автор статьи решил разобраться со структурой этой «магической» папки и описал, за что отвечает каждый из файлов. Например, автор рекомендует включать в .gitignore папки caches, libraries и modules, но при этом оставить в проекте codeStyles, dictionaries, fileTemplates и парочку других.

​​Paging из сети и базы данных #room #jetpack Хорошая статья, где рассказывается о реализации распространённого получения данных при помощи Paging3 из Jetpack. Идея заключается в том, что мы всегда получаем данные из базы данных, сразу же отображаем пользователю, а дальше обновляем их из сети, когда пора обновить и есть соединение. В Paging3 есть все нужные инструменты: и работа из коробки в Room, и различные типы Mediator, и поддержка состояний загрузки или ошибки.