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 #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 внизу или справа на детальном описании курса. Не забудьте оставить обратную связь и оценить курс

📚Ссылка на курс
💬Чат канала
Kotlin Android Extensions deprecated. Что делать? Инструкция по миграции

Возможно, вы уже слышали, что Kotlin Android Extensions — плагин для Kotlin теперь deprecated.

Безусловно, это было очень удобно, особенно если у вас проект полностью на Kotlin. Однако, мир меняется и теперь нужно искать альтернативы. Написал небольшую статью в блоге на medium по этому поводу. В статье мы кратко рассмотрим, что такое плагин Kotlin Android Extension, какие были проблемы с ним и что теперь нам, Android-разработчикам делать.
📚Читать полностью
​​#paging #flow #бесконечныйсписок
Реализуем бесконечный список на базе Android Paging Library 3.0

🚀Списки являются неотъемлемой частью любого мобильного приложения. У большинства списков нет фиксированного размера, поскольку информации слишком много для отображения сразу. Например, приложения соцсетей такие как Вконтакте, Instagram, Facebook. Вы можете бесконечно скролить вниз ленту новостей и никогда не дойдёте до конца - так как контента слишком много. Естественно, загружать сразу большой массив данных в мобильное приложение нельзя. Здесь есть множество причин: часто интернет в мобильных телефонах не такой быстрый как в WiFi, кроме того еще и платный. Очевидно, что данные нужно загружать порционно - такой паттерн называется paging (разбивка на страницы, подкачка страниц). 

К счастью, Google анонсировал библиотеку, позволяющую реализовать процесс постраничной загрузки данных в Android c минимальными трудозатратами. Такой подход улучшит пользовательский опыт при работе с приложением - так как для пользователя список будет казаться бесконечным и получение новой порции данных будет незаметно.

Ключевые особенности курса:
📌 Рассмотрим Android Paging Library 3.0
📌 На примере рассмотрим работу с Kotlin Flow
📌 Научитесь реализовывать бесконечные списки с постраничной загрузкой
📌 Готовый проект с исходным кодом доступен на GitHub

Ну а я напоминаю, что у вас есть возможность присоединиться к практическому онлайн-интенсиву, где вы прокачаетесь в Android на практике за 12 занятий.

📚Ссылка на курс
💬Чат канала
🔥Онлайн-интенсив