Всем привет! У нас отличные новости. В этом месяце в Отус стартует базовый курс "Android-разработчик", а также "Специализация Android-разработчик", которая включает в себя целый пакет курсов. В связи с этим делимся с вами полезной статьей, перевод которой приурочен к данным запускам.



2019 год – самое время, чтобы стать Android-разработчиком. Беря во внимание те инновации и тот прогресс, который сейчас происходит в сфере Android-разработки, можно сказать, что сейчас самое время стать частью этого движения. Последние достижения в Kotlin, Android Things и иных технологиях, делают Android приоритетным направлением развития для новичка, давая возможность получать актуальную информацию и двигаться вперед в определенном направлении.


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


Начните разрабатывать под Android


  1. Ознакомьтесь с основами Java на Head First Java ;
  2. Установите Android Studio;
  3. Установите Kotlin в Android Studio (можете пропустить этот шаг, если не настроены учить Kotlin в этом году);
  4. Ознакомьтесь с Android User Interface и узнайте больше о XML и компонентах View.

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


Когда вы наиграетесь с идеями, следующей целью на 2019 год поставьте создание игры, которая разовьет вас как разработчика, который создает приложения для миллиардов. А теперь перейдем ко второму уровню!


Развиваемся в качестве Android-разработчика


Следующий список нужно выполнять шаг за шагом. Он станет для вас лестницей, забираясь по которой вы сможете узнавать что-то новое, реализовывать себя и двигаться вперед.


  • Разобраться с жизненным циклом Activity, чтобы продвигать рабочее приложение;
  • Использовать динамические и гибкие конструкции пользовательского интерфейса с Fragments;
  • Научиться отлаживать свое приложение под Android. Для этого можете использовать отладчик Android Studio;
  • Разберитесь с Android activities, чтобы создавать экраны, с помощью которых пользователь сможет осуществлять навигацию по вашему приложению;
  • Получите представление о контексте в Android;
  • Изучите REST и HTTP, поскольку большинство профессиональных разработчиков хорошо разбираются в аспектах REST и HTTP;
  • Научитесь использовать многопоточность:
    • Узнайте, как направлять работу потока main;
    • Осознайте важность многопоточности;
    • Изучите предоставленные классы, которые помогут вам научиться использовать многопоточность в кратчайшие сроки;
    • Узнайте, как Android обрабатывает потоки на уровне системы и как это может повлиять на ваш выбор архитектуры вашего приложения и какие-либо ее аспекты;
    • Познакомьтесь с нюансами памяти системы и многопоточного кода;
    • Узнайте, как применять многопоточные решения к громоздким и сложным задачам.
  • Станьте экспертом в обработке изменений в конфигурации:
    • В сохранении объекта во время изменения конфигурации;
    • Самостоятельной обработке изменений.
  • Разберитесь с базами данных и SQL:
    • Облачными базами данных;
    • Offline и локальными базами данных;
    • Offline архитектурами и основными offline практиками.
  • Узнайте о контент-провайдерах:
    • Узнайте, как обмениваться данными с другими приложениями;
    • Узнайте, как получить доступ к данным из других приложений;
    • Создайте контент-провайдер, который поможет другим приложениям безопасно получать доступ к вашему приложению и изменять данные в нем;
    • Поиграйтесь с поставщиком календаря и поставщиком контактов.
  • Узнайте о лучших сторонних Android-библиотеках. [Самые полезные и широко используемые]:


    • OkHttp
    • GSON
    • Retrofit
    • Glide
    • Butter Knife
    • Crashlytics
    • Guava


Все эти шаги помогут вам сформировать твердое профессиональное понимание экосистемы Android и подготовит вас к работе по крайней мере с 10-15 различными типами бизнес-кейсов Android-приложений.


Изучите Android Performance Patterns


Если вы действительно хотите получить чрезвычайно мощный и запоминающийся опыт работы с Android, шаблоны производительности станут для вас хорошим подспорьем. Когда вы выполните следующий список действий, вы не только узнаете, как ими пользоваться, но и познакомитесь с теми, которые могли упустить. Шаблоны производительности являются невероятным инструментом в руках Android-разработчика. Итак, вам нужно будет узнать следующее, когда дело дойдет до Android Performance Patterns:


  • Асинхронные задачи бесполезны для процессов, которые выполняются вследствие длинных или потоковых вызовов. Узнайте, как использовать Handlerthread, чтобы обрабатывать эти процессы иначе;
  • Научитесь разбираться с утечками памяти;
  • Узнайте, как совместить IntentService с многопоточностью для повышения эффективности;
  • Изучите шаблоны производительности Android Service, чтобы убивать сервисы, как только их работа заканчивается;
  • Познакомьтесь со специфическими Android hashmap¬-контейнерами, чтобы балансировать производительность и память при создании приложений;
  • Узнайте, как использовать инструмент мониторинга памяти, чтобы наблюдать, как аллоцирование влияет на производительность вашего приложения;
  • Оптимизируйте приложения для работы по сети с помощью кэширования;
  • Оптимизируйте частоту сетевых запросов вашего приложения;
  • Узнайте, как бороться с утечками view;
  • Узнайте, как работает сборщик мусора;
  • Поймите, как обновление визуальных свойств вашего приложения влияет на производительность;
  • Получите глубокое понимание вертикальной синхронизации;
  • Разберитесь, как коррелируют интерфейс в Android и GPU, чтобы обнаружить сложности, с которыми вам необходимо разобраться для обеспечения гладкой работы вашего приложения;
  • Поймите, как создавать приложение, которое выдает 60 fps без потери фреймов, а также узнайте, сколько других приложений конкурируют с вашим за ресурсы системы и разработайте стратегии для их обработки;
  • Узнайте, как отслеживать производительность GPU и улучшать рендеринг вашего приложения;
  • Изучите стратегии, которые помогут меньше разряжать батарею;
  • Посоревнуйтесь с другими разработчиками, чьи приложения находятся в разделе лучших в PlayStore и попытайтесь улучшить время запуска. Посмотрим, как далеко вы сможете зайти.
  • Уменьшите размер вашего приложения.

Поднимемся на третий уровень!


Углубитесь в оптимизацию памяти с помощью Bitmap-средств


Узнайте и как использовать Glide для обработки bitmap-объектов в своем Android-приложении. Вы столкнетесь с проблемами при обработке тонн контента в приложении, которая потребует извлечения изображений, их декодирования и отображения bitmap-объектов. Если вы не научитесь делать это правильно, то ваше приложение не добьется успеха, поскольку пользователи могут решить, что оно недостаточно качественное.


Обратите внимание, что теперь вам нужно уметь обрабатывать до 48 Мб bitmap-объектов изображений с камеры, которые на сегодняшний день может выдать камера пользователя. Они с легкостью могут съесть всю доступную память.


Компоненты архитектуры Android


Одна из самых главных вещей, которой я научился как Android-разработчик, был навык внедрения инновационных практик в архитектуры и их компоненты. Как только я начал выходить за рамки MVP, MVVM, MVx’s и т.д., я понял, что вокруг этих архитектурных компонентов есть огромное пространство для инноваций.


Например, еще в 2017 году настройки BLE(Bluetooth low energy) по умолчанию не соответствовали должному уровню. Понимание того, что этот архитектурный компонент можно улучшить путем создания промежуточной сервисной библиотеки, было для меня настоящим открытием.


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


  • Data Binding
  • Lifecycles
  • LiveData
  • Navigation
  • Paging
  • Room
  • ViewModel
  • WorkManager

Станьте профессионалом в тестировании


Вы же не хотите стать одним из тех разработчиков, которые в случае обнаружения ошибки говорят «на моей машине отлично работает», правда? Итак, основываясь на знании архитектуры вашего приложения и ее оптимизации, создайте юнит-тесты (JUnit4), узнайте, как пользоваться Espresso и сосредоточьтесь на отчетах о покрытии кода, которые восхитят ведущих разработчиков и VPE. Подумайте о том, как эти отчеты могут стать полезными для других разработчиков, тестировщиков, менеджеров или других заинтересованных сторон и помочь им разобраться с критическими проблемами производительности приложения и расставить приоритеты.


Не забывайте про автоматизацию и повторное использование тестов в той мере, в которой это возможно. Такой подход откроет вам путь на руководящие позиции.


Реактивное программирование с RxJava


Само собой разумеется и наиболее вероятно, что этот аспект является самым важным в вашем резюме и вашем профессиональном портфолио. Есть множество мест, где вы можете узнать на практике, как работать с RxJava. Я порекомендую следующие источники:



Они послужат хорошей отправной точкой на пути к освоению RxJava и его аспектов. Если вы хотите узнать больше о RxJava, обязательно ознакомьтесь с ними, а также изучите:


  1. Всю глубину Observables в RxJava;
  2. Реализацию кэширования в RxJava.

Узнайте все о Dagger


Следующие шаги помогут вам стать профи в Dagger:


  1. Просмотрите документацию и разберитесь до конца с процессом внедрения зависимостей;
  2. Составьте список ограничений;
  3. Создайте проект и используйте в нем Dagger 2.

Станьте специалистом в области безопасности


Профессиональный Android-разработчик и специалист в информационной безопасности? Вау! Такое нечасто в себе может совместить один человек!


А вот несколько вещей, с которыми вы можете ознакомиться в 2019 году, чтобы стать им:


  • Узнайте, как изолировать данные и код вашего приложения от других приложений;
  • Изучите криптографические функции и реализуйте их;
  • Научитесь уменьшать риски, связанные с ошибками управления памятью;
  • Узнайте, как оптимально использовать разрешения пользователя для управления данными приложения;
  • Безопасно храните и шифруйте данные в: локальном хранилище, «налету» или в облаке;
  • Станьте профессионалом в вопросах контент-провайдеров для обеспечения безопасного доступа;
  • Убедитесь, что вы прячете данные (имеется в виду обфускация);
  • Узнайте, как можно реализовать собственные решения в области безопасности, которые не являются частью основного стека Android;
  • Проведите аудит сторонних библиотек, чтобы разбить их по уровню уязвимостей и сформировать для себя документ-исследование, которое поможет в будущем;
  • Работайте над тем, чтобы сделать BLE более безопасным.
    На этом я закончу. Надеюсь, эта статья поможет вам стать профессиональным Android-разработчиком, если вы начнете заниматься этим прямо сейчас в 2019 году!

На этом все. Ждем ваши комментарии!

Комментарии (15)


  1. Miller777
    08.08.2019 18:51

    А Butter Knife насколько сейчас актуален? Я когда спросил про него на курсах, мне сказали, что я года на два опоздал.


    1. jericho_code
      08.08.2019 19:14

      Если кодить на Kotlin, то не особо нужен (может только для байдинга ресурсов, но я бы не тянул его в проект). На Java — хз, наверное вполне можно использовать


  1. androidovshchik
    08.08.2019 20:40

    Ох, сейчас столько кроссплатформенных решений, я бы не советовал настолько масштабно знакомится с нативом для android (сугубое мнение). Заказчики на фрилансе чаще хотят получить кроссплатформенный код, плюс много заказов по ios разработке или сразу под обе платформы. Чистый натив в андроид возможен либо при хорошем бюджете, такие заказы в большинстве своем недосягаемые, либо при извращенных в хорошем смысле задачах, но профита мало с этого. Как-то так


    1. Revertis
      08.08.2019 21:35
      +1

      Проблема с кроссплатформенностью в том, что решение получится намного более жирным и неповоротливым.


      1. CrashLogger
        09.08.2019 10:08

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


      1. Matisumi
        09.08.2019 12:31
        +1

        Далеко не всех заказчиков это сильно волнует


    1. DSergeev
      09.08.2019 10:45

      А какие сейчас самые актуальные кроссплатформенные решения?
      Как на счет PWA, Xamarin?


      1. Miller777
        09.08.2019 11:29

        Flutter сейчас многие хвалят. Присматриваюсь.


      1. vics001
        11.08.2019 10:05

        Самые актуальные сейчас, как ни странно, Unity и С++.


    1. Neikist
      09.08.2019 13:30

      Ну, фриланс это далеко не вся мобильная разработка, доля натива все же выше. Мне самому например флаттер понравился когда я его трогал, но с тех пор как узнал про то что начали делать Jetpack Compose — уже не вижу для себя смысла лишаться близости к нативу и удобств котлина.


  1. Beshere
    09.08.2019 09:20

    Что-то похоже, java+android уже не стоит учить. В вакансиях всем нужен кросс, или уж котлин.


    1. CrashLogger
      09.08.2019 10:11
      +1

      Котлин — штука полезная и удобная, но существует огромная куча старого кода на Java и вам все равно придется с ним работать. К тому же большинство примеров на stackoverflow и других сайтах пока еще на Java.


      1. Neikist
        09.08.2019 13:31

        Для того чтобы прочитать код на java ее не нужно учить глубоко, поверхностного знакомства хватит.


  1. alexus_carrou
    09.08.2019 10:45

    Разобраться с жизненным циклом Activity, чтобы продвигать рабочее приложение
    непонятно какой смысл был вложен в эти слова.
    Изучите REST и HTTP, поскольку большинство профессиональных разработчиков хорошо разбираются в аспектах REST и HTTP
    сомнительно про http, давненько я не видел unsafe http client'а, а про ws не сказано ни слова.
    Изучите предоставленные классы, которые помогут вам научиться использовать многопоточность в кратчайшие сроки;
    — поможет использовать Вам многопоточность в образовательных целях. Нужно понимать, что есть есть пакет java.util.concurrent и примерно знать какие возможности он даёт, в продакшне эти вещи встречаются ну очень редко, RxJava стала частью языка, Kotlin подвёз корутины, намного важнее насколько человек знаком с этими вещами/фреймворками. А если знаком, то у него есть представление о многопоточности, как ни крути, и dead lock, live lock, poison message и concurrent modification exception не будут для него сюрпризом.
    Узнайте, как Android обрабатывает потоки на уровне системы и как это может повлиять на ваш выбор архитектуры вашего приложения и какие-либо ее аспекты;
    — как это может повлиять на выбор архитектуры, простите?
    Offline и локальными базами данных;
    — оффлайн и локальная база не являются эквивалентами по Вашему мнению?
    Узнайте о контент-провайдерах
    — ContentProvider крайне усложненная сущность, как часто Вы используете её в своих приложениях? Может быть лучше направить читателей в сторону более совместимого с жизнью FileProvider'а?
    Использование Butter Knife и Guava outdated. OkHttp без Retrofit сомнительное удовольствие (да возненавидят меня противники рефлексии).
    Изучите шаблоны производительности Android Service, чтобы убивать сервисы, как только их работа заканчивается;
    Вы либо неправильно сформировали пункт, либо не понимаете как работают в данный момент сервисы в Андроид.
    Познакомьтесь со специфическими Android hashmap¬-контейнерами, чтобы балансировать производительность и память при создании приложений;
    — если я правильно понял, речь о SparseArray и иже с ними — нужно не познакомится, а понять, что на разных объемах данных одна коллекция выигрывает по памяти и производительности у другой и грань там тонка, а если это начинающий разработчик, то и голову ему не надо этим забивать.
    Узнайте, как бороться с утечками view;
    — вью утекает как-то по особенному в сравнении с утечкой памяти (сказано выше)?
    Получите глубокое понимание вертикальной синхронизации;
    — и всё что далее… В наших руках лишь использование асинхронного UI thread'а, было бы неплохо прикрепить ссылку на www.youtube.com/watch?v=1iaHxmfZGGc для понимания
    Data Иinding
    — это конечно, сугубо моё мнение, но советовать DataBinding — ужасно.
    Navigation
    — JetPack отличный пакет, это просто шаг в будущее от гугл, но к Navigation есть вопросы, как минимум непонятна портируемость на многомодульные проекты в данный момент.
    Просмотрите документацию и разберитесь до конца с процессом внедрения зависимостей;
    — Dagger 2. Никогда, слышите, никогда не начинайте с официальной документации по Dagger 2. Есть прекрасный цикл статей от Евгения Мацюка на Хабр, который поможет Вам пройти путь от Component Dependecies до многомодульной архитектуры. И когда, Вы, уже матерые, захотите чего-то новенького вперед за оптимизациями @Binds и прочим.
    Этот комментарий ни в коем случае не осуждает автора, а является криком, родившемся после собеседований n-го кол-ва разработчиков, от джуниоров до «лидов».


    1. anegin
      09.08.2019 21:26

      Все по делу.
      А в чем databinding провинился? Без него начинает грустить mvvm