ANDROID SCHOOL.RU - Android на практике
993 subscribers
19 photos
1 video
235 links
Делюсь опытом, пишу статьи по Android. Пошаговые инструкции с примерами, помогут разработать готовое приложение.
📌Курс по System Design https://clck.ru/3MdggN
📌Менторинг https://clck.ru/3HseCY
Download Telegram
ANDROID SCHOOL.RU - Android на практике pinned «#скидка Всем привет! Для новых участников канала, и тех, кто по каким-то причинам не успел воспользоваться предыдущей скидкой, делюсь промокодом на почти 20% скидку на практический онлайн-курс RxJava 2.0, максимально адаптированный для разработки Android-приложений.…»
​​#RecyclerView #Groupie

Как сделать сложный список с вложенным RecyclerView за 20 минут?

Вы когда-нибудь думали как сделать список контента как в приложении Google Play?

Списки являются основным способом представления различного контента в мобильных приложениях. Будь то социальная сеть, приложение для чтения книг или интернет-магазин, в большинстве таких приложений встречаются списки с разными видами ячеек, разного уровня вложенности. Очень многих такая распространённая задача как: отобразить RecyclerView в ячейке RecyclerView ставит в тупик и они начинают использовать ScrollView - что категорически запрещено (так как OutOfMemory тут обеспечен) или ViewPager.

Поэтому я написал очень подробный туториал на эту тему с примером проекта на GitHub.

Итак, задача: создать список для отображения различного вида контента, при этом каждая категория, то есть ячейка списка может содержать неограниченное количество более мелких ячеек и иметь горизонтальный скрол. Звучит сложно? Если вы думаете что это сложная задача, над которой вам нужно будет работать всю неделю, то спешу вас обрадовать, мы сделаем такой список примерно за полчаса. В конце у вас получится вот такой список как на картинке.

http://tiny.cc/nx5dnz

@android_school_ru
#android #sourcecode
Что скрывается в исходниках Android?

Спасибо всем, кто ответил в опросе, ваша обратная свзяь очень полезна при разарботке контента для блога.

Вижу, что в тройке лидеров туториалы для новичков, Rx и архитектура. Значит не зря я активно дорабатываю курс по RxJava - вам точно пригодится!
А пока я дорабатываю статью по паттернам и пилю новый туториал по Android, хочу поделиться с вами забавной пасхалкой, которую нашёл во время отладки кода.

Во время поиска коварного бага, я нашёл новый тип layout - BlinkLayout, который появился в исходном коде Android в 2011 года!
Для чего он нужен и можно ли его использовать - читайте в статье. Если вы думали, что читать исходники Android
утомительно и скучно - то вот вам доказательство, что это ещё и весело!
https://bit.ly/2VOYN2J

@android_school_ru
#di #service_locator
Чем отличается Dependency injection от Service Locator ?

Всем привет! Пока я пишу новый мини-туториал по одному из самых популярных
DI - фреймворков для Kotlin Android-приложений под названием Koin, чтобы вы не скучали, написал статью - введение, которая наглядно (надеюсь) покажет отличия между двумя популярными подходами и вообще объяснить что такое Dependency Injection и зачем оно нужно вам, если вы хотите писать гибкие и масштабируемые, а самое главное тестируемые приложения. Кстати такие вопросы любят задавать и на собеседованиях в том числе, так что думаю статья будет актуальна.

https://bit.ly/2A18wue

@android_school_ru
​​#новый_курс #alarm_manager #notifications

Всем привет! Выходные - отличная возможность научиться чему-то новому и полезному! Поэтому представляю вам новый бесплатный мини-курс по разработке Android-приложений.

Очень часто возникают задачи, в которых нужно выполнять какую-то логику по расписанию или в запланированное время.
Это могут быть сетевые запросы для обновления виджета, отправление аналитики, или уведомление пользователля. Для такого
рода задач вы можете использовать AlarmManager и именно о нём будет этот мини-курс.

Мы разработаем приложение Фитнес-календарь, который будет напоминать вам о ежедневных тренировках. В процессе выполнения проекта вы освоите работу с Android Notifications для отображения уведомлений, а также вы научитесь использовать Alarm Manager и Broadcast Receiver для запуска механизма напоминаний.

Вы освоите:

Android Notifications и Notification Channels
PendingIntent
Alarm Manager
BroadcastReceiver
Room для хранения информации в качестве локальной БД

Примерное время для выполнения: 1.5 -2 часа
В результате у вас будет полноценное приложение и понимание, как использовать перечисленные компоненты.
https://androidschool.ru/courses/fitness-android-notifications-alarm-manager/

@android_school_ru
#отладка #flipper #lynx
3 Полезных инструмента и приёма для разработчиков для отладки и тестирования приложений

Cегодня мы поговорим именно об инструментах и лучших практиках, которые облегчат вам и вашим тестировщикам жизнь при отладке и проверке мобильных приложений. Бывало так, что нужно посмотреть логи прямо в приложении, а студии не было рядом?

Или быстро посмотреть запрос/ответ или значение базы данных? Поэтому тут поделюсь отличными инструментами, которые на мой взгляд, довольно сильно улучшают производительность разработчика и всей команды в целом, при этом не требуют много времени для интеграции.
https://bit.ly/3hbrsYn

@android_school_ru
#adb #приёмы_эффективности
5 полезных команд Android Debug Bridge, которые повысят вашу эффективность

Всем привет! Помимо того, что я веду курсы по Android-разработке, недавно начал вести курс для тестировщиков мобильных приложений. Ну там рассказать как тестировать производительность приложений, проверить overdraw, runtime-permisions и кучу ещё всего для проверки именно мобильных приложений. Одной из тем была работа с adb (Android Debug Bridge).

Если вы раньше использовали эту штуку только для установки/удаления apk, то спешу поделиться с вами удобнейшим набором команд на все случаи жизни. Рекомендую ознакомиться и использовать - повысите эффективность и заметно вырастите в глазах коллег.

Из интересного:
- Быстрая проверка UI приложения через смену конфигурации экрана
- Сброс прав/разрешений приложения (очень удобно для тех, кто не хочет тратить время на поиски в настройках)
- Изменение SharedPreference (Спорим вы не знали об этом?)
- Сохранение логов в файл
- Ввод текста в EditText (а если знаете python то можно написать скрипт и не вводить одно и тоже при авторизации)

Здесь я указал самые частые кейсы, которыми пользуюсь сам, но с полным списком команд можете ознакомиться по ссылке
https://gist.github.com/Pulimet/5013acf2cd5b28e55036c82c91bd56d8

Ну а ещё, совсем скоро вас ждёт новый курс по работе с одним из компонентов Android Jetpack - WorkManager
@android_school_ru
​​#новый_курс #work_manager #rxworker

Если вы ещё не работали с мощным и гибким инструментом из Android JetPack - WorkManager - то этот бесплатный практический курс для вас! В этом курсе вы научитесь управлять фоновыми задачами, используя рекомендованный Google компонент – WorkManager. Это современный способ для управления задачами, которые должны выполняться не в UI – потоке, даже когда пользователь уже активно не взаимодействует с приложением.

Задачи, эффективно решаемые с помощью WorkManager

- Выполнение сетевых запросов с заданной периодичностью
- Очищение кэша базы данных раз в сутки
- Обновление информации для виджетов
- Последовательное выполнение фоновых задач
- Скачивание тяжёлых файлов
- Трекинг геолокации пользователя в фоне

В этом курсе вы разработаете приложение-геотрекер. Приложение получает координаты устройства и сохраняет в локальную БД Room каждые 15 минут.

Вы освоите:

- Запуск фоновых задач без работы приложения через WorkManager
- Условия запуска фоновой задачи с использованием Constraints (наличие сети, состояние батареи и т.д.)
- Виды задач OneTimeWorkRequest и PeriodicWorkRequest
- Работа с RxWorker
- Способы получения геолокации через FusedLocationProviderClient
- Room для хранения информации в качестве локальной БД
- Flipper как инструмент для отладки Android-приложений

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Не забудьте оставить обратную связь и оценить курс
https://androidschool.ru/courses/background-tasks-with-workmanager/

@android_school_ru
​​#MLKit #CameraX #LandmarkApi #Firebase #WikipediaApi

Новый курс: Распознавание образов на базе ML Kit и CameraX в Android.

Машинное обучение и нейронные сети окружают нас повсюду и только глухой не слышал о ML, Deep Learning и других баззвордах. А как дела обстоят с мобильными приложениями? Насколько сложно использовать методы ML в современных мобильных приложениях?

Не обязательно быть кандидатом наук, чтобы использовать ML при разработке собственных приложений. В этом мини-курсе предлагается разработать приложение - сканер известных достопримечательностей. Вы наводите камеру на Эйфелеву Башню и узнаёте интересные факты о ней. С помощью ML Kit SDK - это делается в несколько строк кода.

В этом курсе вы научитесь:

- Использовать ML Kit для задач распознавания изображений, в частности landmark recognition API
- Применять новый компонент CameraX - рекомендуемый Google для разработки приложений использующих камеру
- Получать данные из Wikipedia API
- Использовать Retrofit для сетевых запросов

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Не забудьте оставить обратную связь и оценить курс!

https://androidschool.ru/courses/landmark-recognition-api-ml-kit/

@android_school_ru
​​#новый_курс #unit_tests #mockito #mvp
В этом мини-курсе на @android_school_ru мы разработаем приложение для поиска и сохранения любимых фильмов, а потом напишем Unit-тесты, используя Mockito.

Unit-тесты являются залогом здорового сна для разработчика. Если ваш код покрыт тестами, то количество багов будет стремительно уменьшаться - ваши пользователи перестанут писать негативные отзывы в Play Market, а вы наконец-то займётесь разработкой новых интересных фичей вместо постоянного исправления багов. К тому же тесты являются отличной документацией - по ним можно легко понять логику. А ещё они заставляют декомпозировать ваш код на мелкие тестируемые части.

Кроме unit-тестов, мы рассмотрим такую архитектуру как MVP и перепишем приложение так,
чтобы оно соответствовало принципам такой архитектуры для дальнейшего покрытия тестами.

После прохождения мини-курса вы сможете:

- Писать собственные Unit-тесты
- Использовать Mockito для написания  unit-тестов
- Применять архитектурный паттерн MVP для разработки Android-приложений

В итоге вы научитесь писать unit-тесты на базе Mockito и разрабатывать Android-приложения в соответствии с паттерном MVP.

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Не забудьте оставить обратную связь и оценить курс!
https://androidschool.ru/courses/mockito-unit-tests-with-mvp/

@android_school_ru
​​#kotlin_coroutines #новый_курс

Мини-курс "Введение в Kotlin Coroutines"  - подойдёт для начинающих разработчиков, которые до этого не использовали Kotlin Coroutines. В нём мы разберём основы работы с корутинами. В результате вы сможете использовать Kotlin Coroutines в своих Android-приложениях для сетевых запросов, взаимодействия с UI и любых других асинхронных операций. Это всего лишь введение, призванное показать вам пример работы с корутинами, а более мощный продвинутый практический курс будет доступен осенью.

После прохождения туториала вы поймете:

- Как создать coroutines.
- Как запустить асинхронную операцию через корутины
- Обработка ошибок через coroutines.

Мы разработаем приложение - упрощенный клон Instagram. Пользователь сможет накладывать определённые фильтры на изображения. Загрузку изображений и применение фильтров мы будем реализовывать через Kotlin Coroutines.

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Не забудьте оставить обратную связь и оценить курс
https://androidschool.ru/courses/kotlin-coroutines-intro/

@android_school_ru
​​​​#android_navigation #новый_курс

Всем привет! Новый мини курс, на этот раз для новичков в Android по навигации в приложении.
Мини-курс “Навигация в Android через Navigation Architecture Component” – подойдёт для начинающих разработчиков, которые хотят разобраться в реализации переходов между экранами в Android c помощью Navigation Architecture Component - библиотеки от Google являющейся частью Android Architecture Components. В результате вы сможете использовать Navigation Architecture Component в своих Android-приложениях для переходов между экранами, а также реализовать механизм deeplinks.

После прохождения туториала вы сможете:

📌 Реализовать переходы между экранами
📌 Обрабатывать deeplinks
📌 Передавать и читать данные между экранами

Мы разработаем простое приложение для демонстрации – список для чтения. Пользователь сможет просматривать список книг для чтения и хранить список прочитанных книг, просматривать детали

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Чтобы после регистрации начать курс - нажмите кнопку Enroll внизу или справа на детальном описании курса. Не забудьте оставить обратную связь и оценить курс
https://androidschool.ru/courses/navigation-architecture-component/

После регистрации проверьте письмо в спаме, иногда туда попадают письма.
Кроме того, задать вопрос или предложить идею для курса вы можете в нашем пока маленьком чате https://t.me/android_school_talk

@android_school_ru
Спасибо всем, кто подписался и читает канал, я уверен, вы найдёте на канале, блоге и платформе AndroidSchool.ru множество полезного материла. Теперь, немного хочу познакомиться с вами и представлюсь. Меня зовут Михаил Валуйский, с 0 разработал и до сих пор работаю над приложением
"Мой Билайн"(10+ млн. инсталов) в компании Билайн в качестве лида и руководителя команды Android. До этого работал в Alibaba, Rambler и других компаниях. Кроме того, веду уроки в базовом и продвинутом курсе по Android-разработке в онлайн - школе Otus.

Проект AndroidSchool.ru и канал призваны помочь начинающим и мидл-разработчиком в получении и совершенствовании навыков, необходимых современному Android-разработчику. Здесь будут как обзоры и туториалы новых фишек, так и более фундаментальные вещи, как скажем паттерны, архитектуры и т.д.
Чтобы материалы и туториалы были максимально полезны, не поленитесь рассказать о себе, это займёт не больше 15 секунд https://forms.gle/RsfqXp6CNjqjJ6Xh9
Применяем паттерны проектирования в Android. Flyweight (Легковес).

Тема паттернов традиционно считается чем-то очень сложным, однако многие из разработчиков могут даже не подозревать, что используют их каждый день.
В этой статье я описал один из популярных паттернов, который реализован под капотом в Java, вы узнаете зачем вам применять такой паттерн проектирования как Легковес, какие есть примеры реализации в реальной жизни, узнаете о преимуществах и недостатках паттерна. И самое главное, после прочтения этой статьи вы ответите на вопрос, который очень любят задавать на собеседованиях. @android_school_ru

Узнать про паттерн Flyweight (Легковес)
🔐 Как сделать аутентификацию через отпечаток пальца или faceId? Изучаем AndroidX Biometric Library.

Возможно, вы неоднократно задавались вопросом, как реализовать вход в приложение через отпечаток пальца или faceId?

До Biometric Library, каждый реализовывал процесс входа по отпечатку пальца как мог. Какого-то стандартного способа не было, что приводило к большим неудобствам для разработчиков, учитывая высокую фрагментированность устройств на Android. К счастью, в Android 10 (API 29) была учтена обратная связь от разработчиков, и теперь появился единый интерфейс для использования биометрических датчиков (сканер отпечатка пальца и faceId) для аутентификации с помощью AndroidX Biometric Library API буквально в несколько  строчек, при этом появился стандартный диалог, который избавит вас от ненужного кода и самостоятельного создания UI.

В этой статье мы поговорим как работать с AndroidX Biometric Library API и создадим небольшое приложение, которое предлагает пользователю пройти процесс аутентификации через отпечаток пальца.

Кроме того, напомню для тех, кто недавно присоединился к нам - на платформе androidschool.ru - много полезных современных туториалов, каждый снабжён кодом и примерами.
​​#jetpack #datastore
Jetpack DataStore - новый способ хранения данных

В этом мини-курсе вы познакомитесь с Jetpack Datastore – это новый и улучшенный способ хранения данных, призванный заменить SharedPreferences. DataStore предоставляет 2 имплементации: Proto DataStore, позволяющий хранить типизированные объекты typed objects (на базе protocol buffers) и Preferences DataStore, хранящий пары ключ-значение. Данные сохраняются асинхронно, консистентно и транзакционно, избавляя от недостатков подхода на SharedPreferences.

📌Вы узнаете:
- Что такое DataStore и почему стоит его использовать.
- Как добавить DataStore в ваш проект.
- Ключевые различия между Preferences и DataStore и плюсы/минусы использования
- Как использовать Preferences DataStore.
- Как мигрировать с SharedPreferences на новые Preferences DataStore.

📌Проект:
В качестве практического примера вы разработаете приложение-список дел, которое позволяет сортировать список созданных задач по приоритету или по дедлайну. Ссылка на мини-курс

По ссылке вам доступны уроки и пошаговые примеры кода. Не забудьте оставить обратную связь и оценить курс

Канал AndroidSchool.ru
​​#новый_курс #viewmodel #livedata
Android LiveData и ViewModel

В этом курсе вы научитесь работать с компонентами, помогающими пережить жизненный цикл активити или фрагментов LiveData и ViewModel. Обычно, когда меняются данные, нужно обновить состояние и графического интерфейса, который отображал данные. Учитывая то, что Android-компоненты имеют свой жизненный цикл и могут быть недоступны на момент обновления интерфейса - до недавнего времени обработка таких ситуаций была настоящей головной болью для разработчиков.  Однако теперь с помощью LiveData это стало проще простого. И в этом курсе мы разберёмся как это сделать.

Ключевые особенности курса:
📌 Научитесь работать с компонентами, помогающими пережить жизненный цикл активити или фрагментов
📌 Сможете применять LiveData для обновления UI
📌 Освоите работу с ViewModel
📌 Научитесь работать с Android Architecture Components

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Чтобы после регистрации начать курс - нажмите кнопку Enroll внизу или справа на детальном описании курса. Не забудьте оставить обратную связь и оценить курс
https://androidschool.ru/courses/livedata-start/

Задать вопрос или предложить идею для курса вы можете в чате https://t.me/android_school_talk
Платформа AndroidSchool теперь обзавелась своим образовательным блогом на хабре! Первая статья о том, как создать сложный список за 20 минут! Сохраните себе, чтобы не забыть - точно пригодится! Комментарии и репосты приветствуются!
https://habr.com/ru/post/523768/
​​#koin #внедрениезависимости #di #servicelocator
Koin. Основы внедрения зависимостей

🚀Арсенал современного Android-разработчика стремительно обновляется и, хотя Koin уже более 2-ух лет доступен для использования, очень много туториалов используют старые и неактуальные версии. Поэтому я решил посвятить новый туториал основам работы с Koin.

В Android-разработке для DI традиционно используют Dagger 2, очень мощный фреймворк с кодогенерацией. Но есть проблема: новичкам сложно его использовать. Сами принципы DI просты и понятны, но Dagger усложняет их. С появлением Kotlin появилась возможность писать удобные вещи, которые были бы практически невозможны с использованием Java. Одной из таких вещей стал Koin, имеющий очень лаконичный API, упрощающий написание и поддержку кода. Пройдя новый курс: "Koin. Основы внедрения зависимостей" вы поймёте разницу между Dependency Injection и Service Locator, а также научитесь работать с Koin.

Ключевые особенности курса:
📌 Поймёте разницу между паттернами Dependency Injection и Service Locator
📌 Научитесь работать с Koin и применять своих проектах
📌 Готовый проект с исходным кодом доступен на GitHub

Курс бесплатный, но требуется регистрация. После регистрации вам доступны уроки и пошаговые примеры кода. Чтобы после регистрации начать курс - нажмите кнопку Enroll внизу или справа на детальном описании курса. Не забудьте оставить обратную связь и оценить курс

📚Ссылка на курс
💬Чат канала