Android Live 🤖
Open in Telegram
Самые свежие новости, новинки и тренды Android от практикующего разработчика. Автор: @al_gorshkov, Чат: @android_live_chat Личный блог: @al_gorshkov_blog Рекламу не размещаю
Show more5 158
Subscribers
No data24 hours
+17 days
-930 days
Posts Archive
5 158
Constraint Layout 2.0
#разработка #статьи #конференции
Constraint Layout — один из самых популярных компонентов Jetpack. И не зря: это отличный способ построения сложной вёрстки, причём для этого можно использовать только встроенный редактор (хотя иногда удобнее пописать код).
Совсем недавно ConstraintLayout 2.0 перешёл в релизную стадию, и теперь его можно смело затягивать в проект. Давайте же поговорим, что там появилось нового в отличии от первой версии.
🔹Flow — это «виртуальный» layout, который позволяет соединять view в цепочки, которые могут переходить на следующую строку при недостатке места. Очень полезная штука, особенно когда вы не знаете, насколько широкими и разными будут компоненты у вас на экране, но вам обязательно нужно показать их все. Так как это виртуальный layout, то он не добавляет новых view в иерархию, а просто содержит в себе несколько свойств для перечисленных ссылок на view. Почитать побольше об этом компоненте можно тут
🔹Layer — это так же «виртуальный» layout, который позволяет применять какие-то трансформации для view сразу для всей группы. Например, если вы хотите применить анимацию перемещения для большого числа view, то можно просто перечислить их в отдельный layer и применить анимацию только для layer.
🔹Motion Layout — наверное, одна из самых ожидаемых фич. Он позволяет создавать фактически любые анимации довольно простым и удобным способом благодяря встроенному в Android Studio редактору.
В одном пункте об этой фиче не расскажешь, но тут очень кстати ребята из Android Academy Minsk организуют митап, который рассказывает про Motion Layout и как его применять.
Пройдёт он 3 сентября в 19:00 по МСК. На митапе мы узнаем что такое MotionLayout и какие проблемы он может решать, изучим базовые вещи для анимаций а также пошагово в конце получим готовый экран Логина/Регистрации. Ссылка на регистрацию тут, а само мероприятие онлайн и бесплатно.
А почитать чуть-чуть больше об описанных изменениях можно в этой статье.
5 158
Jetpack Compose теперь в Alpha
#разработка #опрос
Сегодня вышла Alpha версия фреимворка Jetpack Compose.
Финальную версию обещают к 2021 году, ну а пока у нас есть:
🔹анимации;
🔹поддержка Constraint Layout;
🔹жесты;
🔹совместимость с текущими проектами и View;
🔹preview в Android Studio;
🔹и другие изменения.
Обновление довольно глобальное, с нетерпением жду beta версию. 😎
Примеры приложений уже есть тут, знаменитый Sunflower и новый для меня Tivi.
Подробнее про изменения можно почитать тут.
Ждёте Jetpack Compose?
5 158
Как писать быстрые layouts
#разработка #статьи
Каким-бы функциональным и красивым не было приложение, мало кто из разработчиков хотел бы получить отзывы о том, что приложение работает медленно на устройстве пользователя.
Порой не просто сделать своё приложение «летающим» на всех устройствах, так как даже интерфейс системы работает с лагами на некоторых девайсах.
Но всё равно нужно держать в голове следующий момент: большинство устройсв сегодня имеют частоту обновления экрана в 60 fps, то есть на отрисовку одного кадра у нас есть 1/60 ≈ 16 миллисекунд. Для того, чтобы добиться этого результата у нас есть несколько инструментов и советов.
1) Используйте средства для диагностики проблем с layouts: Layout Inspector, Systrace, Android Profiler. Каждая из них достойна отдельного поста, поэтому пока только ссылки в документации.
2) Переиспользование layouts с merge.
Вынесение layout в xml и использование его при помощи include — довольно распространённая практика. Однако, многие забывают, что вместо корневого layout можно написать merge, который уберёт лишний уровень вложенности.
3) Используйте подходящий родительский layout.
Для этого пользуйтесь следующим правилом: для сложной верстки — ConstraintLayout, для вертикальных или горизонтальных последовательных элементов — LinearLayout, для расположения элементов одного над другим — FrameLayout.
4) Используйте ViewStub.
ViewStub — это хорошая альтернатива, когда вам нужно показать тяжёлый layout на экране или сделать этот показ отложенным. Он быстро рендерится и легко применяется, поэтому не забывайте про этот инструмент.
Подробнее про эти советы можно почитать тут.
5 158
Псс… Соскучились? 😝 Photo Lab объявляет о старте онлайн-хакатона PhotoHack Mobile с призовым фондом 500 000 рублей! 🔥
В этот раз перед участниками стоит задача разработать мобильное приложение, используя технологии Photo Lab. При этом речь не идёт о чём-то масштабном и грандиозном, а наоборот, нужно создать нишевый продукт, направленный на решение конкретной задачи.
Где: онлайн
Когда: 12-13 сентября 2020 года
Кого мы ждём: мобильных разработчиков, специалистов по Machine Learning и Data Science, продакт-менеджеров, UI/UX-дизайнеров, авторов креативных идей, а также студентов технических специальностей.
P.S. в команде может быть не более пяти человек 😉
Подробная информация и регистрация на сайте: https://bit.ly/3aTkxQW
Торопитесь! Заявки принимаются до 11 сентября 2020
5 158
Android Lint Framework — введение
#разработка #статьи
Android Studio даёт довольно много инструментов для того, чтобы писать качественный код. Одним из таких является Lint: IDE подсказывает вам о каких-то неточностях в вашем коде и распространённых багах, к которым можем привести этот код.
Однако самым главным преимуществом является то, что каждый сам может написать свои правила для кода. 😎 Автор этой статьи описывает шаги для написания своего lint-правила:
🔹какие зависимости подключить;
🔹от какого класса наследоваться;
🔹как прописать типы классов, на которые будет распространяться правило;
🔹как применить написанное правило.
Также есть неплохой репозиторий от Uber, где содержится целый набор lint-проверок.
5 158
Результаты конкурса «Бесконечная строка»
#конкурс
Итак, самое время подвести итог нашего конкурса.
В этот раз в конкурсе участвовало 65 решений. Довольно много было и решений, которые не удовлетворяли условиям конкурса: присутствовали и удаления return из функции, и ошибки каста Long в Int.
Такие решения не прошли отбор, так как условия чётко оговаривали правила того, что нельзя никак менять параметры функции, равно как и удалять return. 😊
В результате победили решения, которые имели 52 символа:
1) return(0..n-1).count{s[it.toInt()%s.length]=='a'}*1L — @Namolem
2) return(0..n.toInt()-1).count{s[it%s.length]=='a'}+0L — @amihusb
3) return(0..n.toInt()-1).count{s[it%s.length]=='a'}+0L — @luckycactus
Так как решения участников имеют однинаковую длину, то рандомное распределение призов выглядит следующим образом:
1) толстовка + сумка + мерч — достаются номеру 3, или @luckycactus
2) футболка + сумка + мерч — достаются номеру 2, или @amihusb
3) сумка + мерч — достаются номеру 1, или @Namolem
Ссылка на видео с рандомным распределением тут.
Спасибо команде Badoo на отличный мерч и призы.
Кроме того, отдельное спасибо @g_apollo и @KoteykaEvil за помощь в проверке заданий.
Также благодарю всех кто участвовал в конкурсе! И поздравляю победителей! 😎
Конкурс далеко не последний, поэтому вновь спрашиваю вас: какие призы вам были бы наиболее интересны при проведении подобных конкурсов? Напишите, пожалуйста, мне.
5 158
Распознавание рисунков при помощи ML Kit
#статьи #разработка
Довольно интересной областью разработки является машинное обучение. Если вы хотели попробовать эту область, но не знали как к ней подступиться, то предлагаю вам этот вариант.
Автор рассматривает Digital Ink Recognition API из ML Kit, которое распознаёт написанный вручную текст или изображение с экрана. По его словам, результаты довольно точные.
Любопытно, что приложение также может работать оффлайн, правда при этом надо скачать модель в виде 20 мегабайт.
Описание того, как сделать такое приложение и ссылка на готовое можно найти тут.
5 158
Стань Android-разработчиком
👩🏻🎓 Новичкам в разработке.
Обучение с самых азов. Если вас привлекают интернет-технологии и вы хотите начать развиваться в этом направлении, мы поможем вам освоить профессию мобильного разработчика. Вы научитесь создавать собственные проекты и начнете реальную карьеру.
👨🏻💼 Разработчикам с начальным уровнем.
Если вы уже имеете представление о программировании, но пока не хватает комплексных знаний, чтобы всерьёз заняться разработкой, на курсе вы получите фундаментальные навыки и сможете решать задачи, связанные с digital-проектами.
1️⃣ Увеличение спроса.
Через приложения люди вызывают такси, покупают еду, общаются. Телефоном пользуются всё чаще, а значит мобильные разработчики становятся ценнее.
2️⃣ Это нужно компаниям.
Крупному и среднему бизнесу нужны специалисты для реализации проектов. Наша цель — сделать из вас как раз такого профессионала.
3️⃣ Векторы развития.
Можно делать мобильные игры, можно — бизнес-приложения или полезные программы для тысяч людей.
Как проходит обучение:
Представьте, что вы снова попали в школу, только учитель работает с вами удаленно, знания даются на порядок круче, а ритм обучения не позволяет расслабиться.
🇬🇧 Английский для IT-специалистов — курс в подарок.
💲 Скидка 40% действует совсем недолго, поспеши зарегистрироваться https://clc.am/1cVklQ
5 158
Бесконечная строка
#конкурс
У вас есть строка, которая теоретически может повторяться бесконечное количество раз.
Но кроме этой строки есть и ограничитель, который заставляет эту строку остановиться на заданном числе. Ваша задача посчитать, сколько раз встречается символ
a в этой бесконечной, но ограниченной числом, строке.
Входные параметры
s — строка, которая становится бесконечной;
n — число-ограничитель до которого нужно посчитать количество символов a;
Выходные параметры
Целое число — количество символов a в этой строке.
Ограничения
1 <= s.length() <=100
1 <= n <=10^6
Пример входных данных
aba
10
Пример выходных данных
7
Объяснение
Строка aba, которая может повторяться бесконечно ограничивается числом 10 и превращается в abaabaabaa. И количество символов a в ней равно 7.
Шаблон на языке Kotlin.
Условия конкурса
1. Решения принимаются в течении 48 часов, то есть до 21 августа 2020 года, 18:00. Необходимо отправить только тело функции.
2. Отправить можно только одно решение.
3. Можно исправлять отправленное решение неограниченное количество раз. Принятым будет считаться решение, отправленное последним.
4. Победителем будет являться самое короткое тело функции func().
5. В подсчете количества символов учитывается только тело функции. Например, в примере return 0; количество символов равняется 9. Это и определяет длину решения.
6. Переименовывать функцию нельзя, как и изменять входные параметры. Убирать return также запрещается.
7. Требований к форматированию нет, важно рабочее решение. Можно убирать пробелы между переменными и писать код в одну строку, если это не нарушит работоспособность решения.
8. В случае одинаковых по длине решений, победитель будет выбран рандомно, а запись с выбором победителя будет опубликована на канале.
Обратите внимание, что решения, которые не удовлетворяют условиям конкурса не будут учитываться при проверке. Очень часто участники забывают о том, что нужно отправить только внутреннюю часть функции (тело функции), а не всю функцию, включая её заголовок, поэтому будьте внимательны при отправке итогового решения.
Также, если кто-то хочет помочь в проверке решений при помощи тестов, то пишите мне.
Решение нужно отправить в форму. Желаю всем удачи!5 158
Эти PIN-коды могут быть легко подобраны
#статьи
Наткнулся на любопытное исследование безопасности pin-кодов, которые используют пользователи для разблокировки смартфонов.
Не секрет, что сегодня система обязательно запрашивает пин-код как, альтернативный биометрии, способ разблокировки телефона.
Мне кажется, что мало кто отдаёт себе отчёт, насколько безопасным является их код для разблокировки. Сегодня я хочу поделиться с вами исследованием, где публикуются списки небезопасных pin-кодов. Можно попробовать найти в нём свой собственный. 😏
Интересно, что исследователи пришли к выводу, что 6-значные коды фактически не увеличивают безопасность, так как в этом случае пользователи стараются вводить более простые коды: даты, запоминаемые коды или шаблоны клавиатуры.
Ссылка на исследование тут.
5 158
Давненько на канале не проводилось конкурсов. Это нужно срочно исправлять😉
Как и обычно, вам нужно будет решить небольшую задачку, решение которой должно быть максимально коротким.
Кто уже давно на канале, возможно, участвовал в подобных активностях.
Старт конкурса 19 августа в 18:00. Задачку, как всегда, можно будет решить в течении 48 часов.
В этот раз за призы отвечают ребята из команды Badoo.
И вас ждёт 3 призовых места:
🥇место — толстовка + сумка + мерч;
🥈 место — футболка + сумка + мерч;
🥉 место — сумка + мерч.
Кстати, команда Badoo Tech, ведёт интересный Telegram канал, где делится своим опытом. Подписан и давно читаю: @badoo_tech
5 158
KotlinX Datetime
#разработка #библиотека
Совсем недавно разработчики из JetBrains анонсировали библиотеку для работы с датами kotlinx-datetime версии 0.1.
Это здорово, потому что до последнего момента не было возможности работать с датами напрямую из Kotlin. И если мы, как Android-разработчики, могли напрямую ссылаться на API
java.time.*, то при работе с мультиплатформой такой возможности не было.
Более детально о работе с этой библиотекой можно прочесть тут5 158
Анимация как в Google почте
#разработка #статьи
Ни для кого не секрет, что пользователей привлекают приятные анимации в приложении. Google старается делать инструменты для создания анимаций в приложении всё более доступными, а мне по-прежнему нравятся статьи, где описываются крутые примеры с тем, как создавать анимации. 🙃
В этой статье автор описывает, как сделать анимацию открытия почты приложения Google-почта. На мой взгляд, получилась приятная и ненавязчивая анимация, которую можно использовать в качестве основной при открытии экранов вашего приложения.
5 158
Используйте In-App Review API для Google Play ревью
#разработка
Мне кажется, что для многих разработчиков получение оценки приложения от пользователя (да и рейтинг приложения в целом) — довольно важная часть взаимодействия с пользователями. Но тот факт, что пользователь оставил оценку приложению — довольно сложно отследить.
Наконец-то Google даёт нам API для того, чтобы пользователь мог поставить оценку приложения прямо в нем. 👍🏻
Подробнее о том, как работает API можно почитать тут.
По сути, это API — часть Play Core Library, которая сделана для Java/Kotlin, C++ и Unity. Google подчёркивает, что важно определить, где в вашем приложении самое лучшее место для того, чтобы попросить пользователя оставить оценку.
5 158
Жизнь в Израиле
#интервью #экспаты
Итак, начнём новую рубрику на канале!
Наш первый гость — это Андрей Раньков. Он проживает в Израиле, город Кфар-Саба (15 км от Тель-Авива) вместе с женой и двумя детьми. Андрей является Mobile Lead в компании Appcard.
У каждого из вас есть возможность спросить его о жизни в Израиле, легко ли туда попасть разработчику, каков уровень жизни да и вообще всё, что вы давно хотели спросить у местного жителя, но не знали у кого.
Ссылка на форму, где можно задавать свои вопросы тут.
А если у вас есть предложения или вопросы по этому формату, или же вы проживаете в других странах и хотите поделиться опытом, то пишите мне @al_gorshkov.
5 158
Оптимизация приложения для автозаполнения
#разработка
Совсем недавно, столкнулся с интересным, и на первый взгляд, странным багом. У одного пользователя приложения при вводе параметров в EditText появлялось всплывающее сообщение с выбором логина и пароля для входа в него (в приложение).
Пришлось капнуть в сторону решения этого бага, и выяснил одну деталь, которую я раньше игнорировал.
При создании нового EditText в xml, он предлагает ввести атрибут
importantForAutofill. Чтобы убрать warning, можно просто игнорировать этот атрибут или добавить в EditText параметр tools:ignore="Autofill". В этом случае, вы уберёте warning, но сможете поймать похожий на мой баг.
Однако лучше не полениться и оптимизировать своё приложение для сервисов автозаполнения. 😊
Например, если вы не хотите, чтобы ваш EditText был доступен для заполнения, используйте в нём параметр android:importantForAutofill="no". Но, например, для ввода логина или пароля, можно поставить этот атрибут yes и добавить новый атрибут android:autofillHints="password" для паролей и android:autofillHints="emailAddress" для e-mail.
В этом случае, система будет предлагать пользователю сохранять параметры для входа вашего приложения в менеджер паролей. Иногда это работает автоматически, но чтобы улучшить качество вашего продукта, можно добавить парочку этих нехитрых параметров.
Подробнее про автозаполнение и доступны константы можно прочитать тут.5 158
Android Academy про Android 11
#конференции
Уже прошло пару месяцев с момента появления Android 11, но всё равно ещё есть доклады, которые рассказывают о новых фишках и деталях.
Ребята из Android Academy Global делают мероприятие, где будет 3 темы:
1️⃣ Jetpack Dagger Hilt, Мануэль Виво, Google
2️⃣ ActivityResultApi and AppStartUp Api, Алексей Быков, Revolut
3️⃣ Jetpack Paging 3, Дмитрий Мовчан, Revolut
Оно будет уже совсем скоро, 4 августа в 19:00 по Москве. А зарегистрироваться можно тут.
5 158
Ого, понял, что идея с рубрикой вам зашла!
Особая благодарность подписчикам, которые написали мне в личку с предложением рассказать о своём городе. Если кто-то ещё хочет, но при этом стесняется — не надо переживать, пишите мне @al_gorshkov, уверен, что остальным будет интересно прочитать о вашем опыте.😌
5 158
Друзья, нужна ваша помощь.
На канале хочу запустить новую рубрику. Суть её состоит в том, чтобы брать интервью у разработчиков, живущих в других странах и городах.
Будем разговаривать про уровень жизни в стране, культурные привычки, наличие работы, насколько легко туда переехать, нравится ли жить там, сколько стоит жизнь, ну и самое важное — какой зарплатный уровень и налоги.
Получится обширная статья про страну, направленная на жизнь разработчика. Ну а цифры буду суммировать в табличку, чтобы сделать вывод: «Где же лучше жить разработчику?»
Скажите, насколько было бы вам интересно видеть эту рубрику? Какие страны хотелось бы видеть прежде всего и в каком формате?
Лично мне это кажется интересным, ведь информации из первых рук в Интернете не так много. Пишите в комментариях или мне в личку @al_gorshkov и, конечно, голосуйте реакциями. 🤓
5 158
Firebase App Distribution
#разработка
Одним из способом доставки билда тестировщикам, является Firebase App Distribution. Это хороший и простой способ. И у него есть следующие преимущества:
• бесплатный;
• нет лимитов на размер файла приложения;
• работает и на iOS и на Android;
• можно добавлять группы тестировщиков;
• можно приглашать в тестирование по ссылке;
• добавление release notes к каждому билду;
• интеграция с Android Studio.
Для меня ключевым является последний пункт. Даже если у вас в проекте нет CI-системы, то вы легко можете выполнить одну gradle-команду, чтобы загрузить свежую версию приложения в Firebase с release notes и оповестить всех ваших тестировщиков.
Оповещением займется сам Firebase, а мы давайте посмотрим, как же получить release notes от HEAD в git до последнего тега. Пусть все коммиты с префиксом {ADD} — это наши release notes.
Для этого выполним команды:
1)
def tagNumber = "git describe --abbrev=0 --tags".execute().text.trim() — вернёт там последий тэг
2) def releaseNotes = ("git --no-pager log ${tagNumber}...HEAD --no-merges --date-order --format=%s --grep {ADD}").execute().text.trim() — вернёт нам список коммитов с префиксом {ADD}
3) new File("release_notes.txt").text = releaseNotes — сохраним всё в файл
А дальше чуть-чуть настроим Firebase:
firebaseAppDistribution {
releaseNotesFile = project.rootProject.file('release_notes.txt')
}
Укажем, что хотим взять release notes именно из этого файла, а остальные настройки лучше посмотреть тут.
Осталось только объединить описанные выше команды в одну при помощи gradle task, назовём её logs и выполним эти команды:
task getLogsAssembleAndDistributeQaRelease(type: GradleBuild) {
tasks = ['clean',
'logs',
'appDistributionUploadQaRelease']
}
В итоге наш билд улетит в Firebase, главное дождаться сборки и не выключить компьютер. 😉
Available now! Telegram Research 2025 — the year's key insights 
