Андроид кто разработчик: Как появился Android — The Village

Содержание

Как появился Android — The Village

На прошлой неделе корпорацией Google занялась российская ФАС. Она начала антимонопольное расследование по жалобе компании «Яндекс». Причина —— Google запрещает предустанавливать приложения и сервисы конкурентов в устройствах, работающих на базе ее мобильной операционной системы Android. Цена вопроса довольно велика. В прошлом году в мире было продано миллиард устройств на Android. В России доля смартфонов на Android превышает 80 %.
The Village узнал, как появилась операционная система и почему стала такой популярной.

Смартфон для гиков

Будущий создатель Android Энди Рубин вырос в Чаппакуа, штат Нью-Йорк.
В какой-то момент его отец из психолога переквалифицировался в продавца электроники, и комната Энди наполнилась новейшими гаджетами. Ещё в школе он сходил с ума от компьютеров, а после колледжа пошёл работать в Carl Zeiss, где занимался разработкой роботизированного оборудования. Потом Рубин переехал в Швейцарию и мог бы на всю жизнь остаться там, если бы не каникулы на Каймановых островах в 1989 году. Ранним солнечным утром он прогуливался по пляжу и увидел спящего в шезлонге человека. Им оказался разработчик Apple Билл Касвелл (девушка выгнала его из бунгало после ссоры). Рубин разговорился с ним и предложил пожить в своём коттедже. Вскоре Касвелл предложил ему вернуться в США и присоединиться к Apple (в то время она как раз выпустила свой знаменитый Macintosh). В корпорации Рубин занимался разработкой модели компьютера Quadra.

В 1990 году Apple выделила разработку вычислительных устройств в отдельную компанию под названием General Magic, куда Рубин попал два года спустя. Вместе с другими разработчиками он соорудил некое подобие чердака с кроватями над рабочим оупенспейсом и стал проводить в офисе всё своё время, разрабатывая операционную систему для мобильников Magic Cap. Но идея опередила своё время: телекоммуникационные компании не готовы были её принять, и фирма закрылась.

Потом вместе с другими ветеранами Apple Рубин разрабатывал WebTV — некий прообраз будущих Smart TV. В 1997 году их компанию купила Microsoft. Однажды с друзьями программистами во время встречи, затянувшейся до поздней ночи, они решили сделать небольшой моноблок, который стоил бы десять долларов и позволял отсканировать любой объект и тут же найти информацию о нём в интернете. «Такая цифровая губка для привлечения людей на веб-сайты», — объяснял Рубин. Друзья учредили в Пало-Альто компанию Danger, названную в честь робота из старого телешоу Lost in Space, который всё время повторял это слово. К новому девайсу они добавили радиоприёмник и трансмиттер, а потом стали рассказывать инвесторам про свой смартфон с выходом в интернет под названием Sidekick. Начинающий венчурный капиталист Грег Галанос поверил в идею и вложил в проект деньги.

В начале 2002 года Рубин рассказывал о разработке своего Sidekick студентам Стэнфорда. Основатели Google Ларри Пейдж и Сергей Брин по какой-то причине присутствовали на этой лекции. После неё Пейдж осмотрел девайс, увидел, что поиск Google предустановлен там по умолчанию, и сказал: «Круто».

Рождение Android

Весной того же года Пейдж и Брин уже ходили со смартфонами Sidekick, которые могли выходить в интернет везде, где есть связь. Гаджет с маленькой выдвижной клавиатурой стал популярен среди гиков Силиконовой долины. К тому времени из разработчика Рубин стал руководителем проекта. «Пришлось переключить мозги», — признавался он. Уже тогда он придумал бизнес-модель, позволяющую помирить производителей девайсов и программного обеспечения. Но продажи гаджетов всё равно были невелики. Через три года Danger сменила директора, и Рубин ушёл из компании. Он снова поехал на Кайманы в поисках новых идей и вернулся с проектом мобильной платформы, открытой для всех разработчиков. Для неё он нанял нескольких программистов, а также решил использовать купленный когда-то домен Android.com.

Когда на разработку Рубин потратил все свои сбережения, он позвонил другу Стиву Перлману и сказал: «Я разорён, мне срочно нужны деньги». Тот снял со своего счёта 10 тысяч долларов, приехал в офис Рубина и высыпал ему на стол гору стодолларовых купюр. В общей сложности Перлман одолжил Рубину 100 тысяч долларов, что помогло завершить создание Android. В 2005 году предприниматель стал вести переговоры с разными инвесторами, в частности послал письмо и Ларри Пейджу. В августе того года Google купила Android. Сумма сделки не разглашалась, Рубин и другие разработчики перешли работать в корпорацию.

В середине 2000-х рынок смартфонов развивался бешеными темпами: на рынок вышли BlackBerry и LG, Apple представила свой первый iPhone. Ходили слухи, что свой гаджет готовит и Google. Но вместо этого компания в ноябре 2007 года объявила о создании Open Handset Alliance, консорциума мобильных разработчиков, поддерживающих открытое ПО. В тот же день она представила операционную систему Android, которую, в отличие от iOS, мог бы использовать любой производитель девайсов. Первым её внедрила компания HTC. Но хитом продаж её смартфон не стал: в те годы все следили за новинками от Apple, устройства на Android воспринимались лишь как дешёвая замена творениям Стива Джобса.

Захват рынка

К 2009 году у команды Рубина не было по-настоящему большого хита продаж. Тогда в Google обратился замдиректора Motorola Джа Санджай, который предложил вместе удивить мир. Через год на рынок вышел Droid, который работал быстрее моделей Apple и имел больше дополнительных функций. Новый гаджет сделал Motorola снова прибыльной и потеснил на рынке iPhone. Вскоре на рынок вышел Nexus от HTC и другие гаджеты, которые пользователи приняли с большим энтузиазмом. Каждый день они активировали 300 устройств на Android, в то время как у iPhone, iPad, и iPod было в общей сложности по 275 тысяч активаций. И с тех пор доля Android росла (спад наблюдался лишь в четвёртом квартале прошлого года).

В отличие от Apple, которая сама делала устройства, разрабатывала операционную систему, контролировала производителей приложений, не позволяя конкурентам продавать свою продукцию в App Store, Google заявляла об открытости и свободе. Она бесплатно предоставляла Android производителям гаджетов (хотя для доступа в магазин приложений нужно было предоставить корпорации смартфон для тестирования). Разработчики не предоставляли свои приложения для предварительного одобрения — компания удаляла их только по жалобам пользователей. При этом Рубин вставлял во все гаджеты поиск Google по умолчанию.

У Android постоянно появлялись обновления, которые носили названия сладостей: Cupcake, Donut, Eclair, Gingerbread, Ice Cream Sandwich, KitKat и другие. Они пришлись по вкусу разработчикам, и в 2013 году было активировано более миллиарда устройств на Android, пользователи которых скачали более 25 миллиардов приложений.

Уход основателя

К тому времени Энди Рубин перестал руководить проектом. Его место занял Санджай Пичаи, а сам Рубин перешёл в подразделение, разрабатывающее его любимых роботов. Но прошлой осенью он уволился, чтобы запустить инкубатор для стартапов в области конструирования гаджетов. «Мне нравится заниматься вещами, которые интересуют большое количество людей», — говорил Рубин. Его Android изменил мир мобильных устройств — возможно, и новое дело станет таким же удачным.

Тем временем созданная им операционная система развивается дальше. Недавно стало известно о том, что Google собирается предложить пользователям Android инструменты для работы. Даже те компании, у кого нет почты или календаря Google, смогут пользоваться сервисами компании со своего смартфона. При этом они будут совместимы с тем же Google.Docs. О заинтересованности в этом проекте уже заявили Samsung, HTC, Motorola, Adobe, Sony, Cisco и BlackBerry. Велика вероятность, что скоро Android станет привычным инструментом не только для общения по телефону, но и для работы.

   

Источники: The New York Times, The Guardian, Googleblog, Wired, The Verge, РБК

Обложка: Joi Ito

подробное описание и обзор — CheckROI


CheckROI



  • Профессии
    • Профессии в аналитике
      Профессии в дизайне
      Профессии в маркетинге
      Профессии в менеджменте
      Профессии в программировании
      Все

      Профессии

      Игровой аналитик – подробный обзор профессии

      Профессии

      Кто такой продуктовый аналитик

      Профессии

      Кто такой UX-аналитик

      Профессии

      Профессия Data-маркетолог: чем занимается специалист по дата-маркетингу, сколько…

      Профессии в дизайне

      Всё о профессии рендер-артист (визуализатор)

      Профессии в дизайне

      Профессия «Ретушер»: подробное описание и обзор

      Профессии в дизайне

      Профессия «Свадебный фотограф»: подробное описание и обзор

      Профессии в дизайне

      Профессия «создатель электронной музыки»: подробное описание и обзор

      Профессии в маркетинге

      Кто такой мессенджер-маркетолог

      Профессии в маркетинге

      Профессия «видеомаркетолог»: подробное описание и обзор

      Профессии в маркетинге

      Профессия «Спортивный маркетолог»: подробное описание и обзор

      Профессии в маркетинге

      Кто такой спортивный журналист

      Профессии в менеджменте

      Профессия «спортивный менеджер»: подробное описание и обзор

      Профессии в менеджменте

      Профессия «руководитель образовательных проектов»: подробное описание и обзор

      Профессии в менеджменте

      Профессия «Руководитель интернет-магазина»: подробное описание и обзор

      Профессии в менеджменте

      Мастер презентации и публичных выступлений: подробное описание и…

      Профессии в программировании

      Разработчик голосовых ассистентов – обзор профессии с большими…

      Профессии в программировании

      Кто такой программист Ruby

      Профессии в программировании

      Профессия «Инженер-программист»: подробное описание и обзор

      Профессии в программировании

      Кто такой BI-архитектор/BI-разработчик

      Профессии

      Всё о профессии рендер-артист (визуализатор)

      Профессии

      Разработчик голосовых ассистентов – обзор профессии с большими…

      Профессии

      Игровой аналитик – подробный обзор профессии

      Профессии

      Кто такой продуктовый аналитик

  • Онлайн-курсы
    • Курсы для бизнеса
      Курсы по аналитике
      Курсы по дизайну
      Курсы по маркетингу
      Курсы по программированию
      Все

      Курсы для бизнеса

      Топ-7 курсов на тему «как открыть и развить…

      Курсы для бизнеса

      Топ-10 курсов по управлению командами

      Курсы для бизнеса

      Топ-12 курсы по управлению на Agile: Scrum, Kanban,…

      Курсы для бизнеса

      Топ-12 курсов для финансистов

      Курсы по аналитике

      ТОП-5 курсов для маркетологов-аналитиков

      Курсы по дизайну

      ТОП-8 курсов Tilda: создание сайтов с нуля

      Курсы по дизайну

      Топ-12 курсов для 3D-дизайнеров

      Курсы по дизайну

      Топ-10 курсов кройки и шитья для дизайнеров одежды

      Курсы по дизайну

      Топ-12 курсов по ландшафтному дизайну

      Курсы по маркетингу

      Топ-11 курсов по сквозной аналитике

      Курсы по маркетингу

      Топ-9 курсов по контент-менеджменту

      Курсы по маркетингу

      Топ-6 курсов для директоров по маркетингу

      Курсы по маркетингу

      Топ-7 курсов по созданию спортивного контента

      Курсы по программированию

      Топ-7 курсов для VR & AR-разработчиков

      Курсы по программированию

      Топ-3 курса по компьютерному зрению (Computer Vision)

      Курсы по программированию

      Топ-5 курсов по Power BI

      Курсы по программированию

      Топ-10 курсов по тестированию мобильных приложений

      Онлайн-курсы

      ТОП-5 курсов для маркетологов-аналитиков

      Онлайн-курсы

      Топ-7 курсов на тему «как открыть и развить…

      Онлайн-курсы

      Скидки в Skillbox в августе!

      Онлайн-курсы

      Топ-11 курсов по сквозной аналитике

  • Маркетплейс курсов
  • Рубрики
    • Интернет-маркетинг
      • Контекстная реклама (PPC)
      • Таргетированная реклама
      • SMM
      • SEO
      • Email-маркетинг
      • Контент-маркетинг
      • Копирайтинг
      • Мобильный маркетинг
      • PR
      • Видеомаркетинг
      • Веб аналитика
    • Дизайн
      • Веб-дизайн
      • UX/UI
      • Дизайн мобильных приложений
      • Графический дизайн
      • Бренд дизайн
      • 3D-графика
      • 3D-анимация
      • Motion-дизайн
      • Дизайн интерьеров
      • Sound-дизайн
      • Фотография
    • Программирование
      • Веб-разработка
      • Разработка игр
      • Разработка мобильных приложений
      • Java-разработка
      • Разработка на C
      • Разработка на PHP
      • Python-разработка
      • Разработка на GO
      • Разработка VR&AR
      • Кибербезопасность
    • Аналитика
      • Data Science
      • Веб аналитика
    • Бизнес и управление
      • Управление продуктом
      • Менеджмент проектов
      • Управления командами
      • Управление персоналом
      • Бизнес-аналитика
      • Продажи
    • Фриланс
    • Финансы
    • Soft Skills
    • Базовые понятия
    • 500 полезных инструментов
  • Распродажи курсов
    • -50% на всё в Skillbox
    • -35% на курсы Нетологии
    • -50% от Skillfactory

Темы дня




Скидки в Skillbox в августе!
В Skillfactory скидка -40% до конца августа!
До 31 июля в Нетологии -35% на всё!
Топовые курсы по дизайну интерьера: программы обучения для начинающих
ТОП-10 курсов для JAVA-разработчиков
Обучение графическому дизайну: полный обзор проверенных курсов
Обзор самых топовых курсов по веб-дизайну для новичков и профессионалов
12 лучших курсов по таргетированной рекламе (таргетингу)
Как сделать красивый шрифт в Инстаграме
Размеры в Инстаграм в 2020: фото, видео, текст, сторис
Хештеги для Инстаграма в 2020 году: подробное руководство + самые популярные
Пост-знакомство в Инстаграм
Отписки в Инстаграм в 2020: автоматически отписываемся от невзаимных подписчиков
CheckROI Иван БуявецОснователь блога

  • Профессии
    • Профессии в аналитике
      Профессии в дизайне
      Профессии в маркетинге
      Профессии в менеджменте
      Профессии в программировании
      Все

      Профессии

      Игровой аналитик – подробный обзор профессии

      Профессии

      Кто такой продуктовый аналитик

      Профессии

      Кто такой UX-аналитик

      Профессии

      Профессия Data-маркетолог: чем занимается специалист по дата-маркетингу, сколько…

      Профессии в дизайне

      Всё о профессии рендер-артист (визуализатор)

      Профессии в дизайне

      Профессия «Ретушер»: подробное описание и обзор

      Профессии в дизайне

      Профессия «Свадебный фотограф»: подробное описание и обзор

      Профессии в дизайне

      Профессия «создатель электронной музыки»: подробное описание и обзор

      Профессии в маркетинге

      Кто такой мессенджер-маркетолог

      Профессии в маркетинге

      Профессия «видеомаркетолог»: подробное описание и обзор

      Профессии в маркетинге

      Профессия «Спортивный маркетолог»: подробное описание и обзор

      Профессии в маркетинге

      Кто такой спортивный журналист

      Профессии в менеджменте

      Профессия «спортивный менеджер»: подробное описание и обзор

      Профессии в менеджменте

      Профессия «руководитель образовательных проектов»: подробное описание и обзор

      Профессии в менеджменте

      Профессия «Руководитель интернет-магазина»: подробное описание и обзор

      Профессии в менеджменте

      Мастер презентации и публичных выступлений: подробное описание и…

      Профессии в программировании

      Разработчик голосовых ассистентов – обзор профессии с большими…

      Профессии в программировании

      Кто такой программист Ruby

      Профессии в программировании

      Профессия «Инженер-программист»: подробное описание и обзор

      Профессии в программировании

      Кто такой BI-архитектор/BI-разработчик

      Профессии

      Всё о профессии рендер-артист (визуализатор)

      Профессии

      Разработчик голосовых ассистентов – обзор профессии с большими…

      Профессии

      Игровой аналитик – подробный обзор профессии

      Профессии

      Кто такой продуктовый аналитик

  • Онлайн-курсы
    • Курсы для бизнеса
      Курсы по аналитике
      Курсы по дизайну
      Курсы по маркетингу
      Курсы по программированию
      Все

      Курсы для бизнеса

      Топ-7 курсов на тему «как открыть и развить…

      Курсы для бизнеса

      Топ-10 курсов по управлению командами

      Курсы для бизнеса

      Топ-12 курсы по управлению на Agile: Scrum, Kanban,…

      Курсы для бизнеса

      Топ-12 курсов для финансистов

      Курсы по аналитике

      ТОП-5 курсов для маркетологов-аналитиков

      Курсы по дизайну

      ТОП-8 курсов Tilda: создание сайтов с нуля

      Курсы по дизайну

      Топ-12 курсов для 3D-дизайнеров

      Курсы по дизайну

      Топ-10 курсов кройки и шитья для дизайнеров одежды

      Курсы по дизайну

      Топ-12 курсов по ландшафтному дизайну

      Курсы по маркетингу

      Топ-11 курсов по сквозной аналитике

      Курсы по маркетингу

      Топ-9 курсов по контент-менеджменту

      Курсы по маркетингу

      Топ-6 курсов для директоров по маркетингу

      Курсы по маркетингу

      Топ-7 курсов по созданию спортивного контента

      Курсы по программированию

      Топ-7 курсов для VR & AR-разработчиков

      Курсы по программированию

      Топ-3 курса по компьютерному зрению (Computer Vision)

      Курсы по программированию

      Топ-5 курсов по Power BI

      Курсы по программированию

      Топ-10 курсов по тестированию мобильных приложений

      Онлайн-курсы

      ТОП-5 курсов для маркетологов-аналитиков

      Онлайн-курсы

      Топ-7 курсов на тему «как открыть и развить…

      Онлайн-курсы

      Скидки в Skillbox в августе!

      Онлайн-курсы

      Топ-11 курсов по сквозной аналитике

  • Маркетплейс курсов
  • Рубрики
    • Интернет-маркетинг
      • Контекстная реклама (PPC)
      • Таргетированная реклама
      • SMM
      • SEO
      • Email-маркетинг
      • Контент-маркетинг
      • Копирайтинг
      • Мобильный маркетинг
      • PR
      • Видеомаркетинг
      • Веб аналитика
    • Дизайн
      • Веб-дизайн
      • UX/UI
      • Дизайн мобильных приложений
      • Графический дизайн
      • Бренд дизайн
      • 3D-графика
      • 3D-анимация
      • Motion-дизайн
      • Дизайн интерьеров
      • Sound-дизайн
      • Фотография
    • Программирование
      • Веб-разработка
      • Разработка игр
      • Разработка мобильных приложений
      • Java-разработка
      • Разработка на C
      • Разработка на PHP
      • Python-разработка
      • Разработка на GO
      • Разработка VR&AR
      • Кибербезопасность
    • Аналитика
      • Data Science
      • Веб аналитика
    • Бизнес и управление
      • Управление продуктом
      • Менеджмент проектов
      • Управления командами
      • Управление персоналом
      • Бизнес-аналитика
      • Продажи

Как работает Android, часть 1 / Блог компании Ростелеком-Солар / Хабр

В этой серии статей я расскажу о внутреннем устройстве Android  —  о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.

Статьи серии:


Немного фактов

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

Android  —  свободный и открытый проект. Большинство исходного кода (который можно найти на https://source.android.com) распространяется под свободной лицензией Apache 2.0.

Компания Android Inc. была основана в 2003 году и в 2005 году куплена Google. Публичная бета Android вышла в 2007 году, а первая стабильная версия  —  в 2008, с тех пор мажорные релизы выходят примерно раз в год. Последняя на момент написания стабильная версия Android  —  7.1.2 Nougat.

Android is Linux

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

Среди исходной команды разработчиков Android был Robert Love, один из самых известных разработчиков ядра Linux, да и сейчас компания Google остаётся одним из самых активных контрибьюторов в ядро, поэтому неудивительно, что Android построен на основе Linux.

Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но  —  за несколькими исключениями  —  вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии  — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.

Другая причина того, что в Android не используется софт от GNU  —  известная политика «no GPL in userspace»:

We are sometimes asked why Apache Software License 2.0 is the preferred license for Android. For userspace (that is, non-kernel) software, we do in fact prefer ASL 2.0 (and similar licenses like BSD, MIT, etc.) over other licenses such as LGPL.

Android is about freedom and choice. The purpose of Android is promote openness in the mobile world, and we don’t believe it’s possible to predict or dictate all the uses to which people will want to put our software. So, while we encourage everyone to make devices that are open and modifiable, we don’t believe it is our place to force them to do so. Using LGPL libraries would often force them to do just that.

Само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть большого и важного фреймворка Binder, о котором я расскажу ниже), wakelocks (управление спящим режимом) и low memory killer. Исходно они представляли собой патчи к ядру, но их код был довольно быстро добавлен назад в upstream-ядро. Тем не менее, вы не найдёте их в «обычном линуксе»: большинство других дистрибутивов отключают эти компоненты при сборке.

В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем  —  она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.

В Android есть оболочка командной строки (shell) и множество стандартных для Unix-подобных систем команд/программ. Во встраиваемых системах для этого обычно используется пакет Busybox, реализующий функциональность многих команд в одном исполняемом файле; в Android используется его аналог под названием Toybox. Как и в «обычных» дистрибутивах Linux (и в отличие от встраиваемых систем), основным способом взаимодействия с системой является графический интерфейс, а не командная строка. Тем не менее, «добраться» до командной строки очень просто  —  достаточно запустить приложение-эмулятор терминала. По умолчанию он обычно не установлен, но его легко, например, скачать из Play Store (Terminal Emulator for Android, Material Terminal, Termux). Во многих «продвинутых» дистрибутивах Android  —  таких, как LineageOS (бывший CyanogenMod)  —  эмулятор терминала предустановлен.

Второй вариант  —  подключиться к Android-устройству с компьютера через Android Debug Bridge (adb). Это очень похоже на подключение через SSH:

[email protected]$ adb shell
android$ uname
Linux

Из других знакомых компонентов в Android используются библиотека FreeType (для отображения текста), графические API OpenGL ES, EGL и Vulkan, а также легковесная СУБД SQLite.

Кроме того, раньше для реализации WebView использовался браузерный движок WebKit, но начиная с версии 7.0 вместо этого используется установленное приложение Chrome (или другое; список приложений, которым разрешено выступать в качестве WebView provider, конфигурируется на этапе компиляции системы). Внутри себя Chrome тоже использует основанный на WebKit движок Blink, но в отличие от системной библиотеки, Chrome обновляется через Play Store  —  таким образом, все приложения, использующие WebView, автоматически получают последние улучшения и исправления уязвимостей.

It’s all about apps

Как легко заметить, использование Android принципиально отличается от использования «обычного Linux» —  вам не нужно открывать и закрывать приложения, вы просто переключаетесь между ними, как будто все приложения запущены всегда. Действительно, одна из уникальных особенностей Android — в том, что приложения не контролируют напрямую процесс, в котором они запущены. Давайте поговорим об этом подробнее.

Основная единица в Unix-подобных системах  —  процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения  —  это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы  —  другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).

Поскольку Android тоже Unix-подобен, всё это верно и для него, но в то время как низкоуровневые части  —  на уровне Unix  —  оперируют понятием процесса, на более высоком уровне  —  уровне Android Framework  —  основной единицей является приложение. Приложение  —  не чёрный ящик: оно состоит из отдельных компонентов, хорошо известных остальной системе.

У приложений Android нет функции main(), нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.

In Android, however, we explicitly decided we were not going to have a main() function, because we needed to give the platform more control over how an app runs. In particular, we wanted to build a system where the user never needed to think about starting and stopping apps, but rather the system took care of this for them… so the system had to have some more information about what is going on inside of each app, and be able to launch apps in various well-defined ways whenever it is needed even if it currently isn’t running.

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

Этот механизм  —  Binder.

Binder

Binder  —  это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия.

Разработка Binder началась в Be Inc. (для BeOS), затем он был портирован на Linux и открыт. Основной разработчик Binder, Dianne Hackborn, была и остаётся одним из основных разработчиков Android. За время разработки Android Binder был полностью переписан.

Binder работает не поверх System V IPC (которое даже не поддерживается в bionic), а использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl) на «виртуальном устройстве» /dev/binder. Со стороны userspace низкоуровневая работа с Binder, в том числе взаимодействие с /dev/binder и marshalling/unmarshalling данных, реализована в библиотеке libbinder.

Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.

Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по .aidl-файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.

Для Java-кода в процессе-клиенте прокси-объект выглядит как обычный Java-объект, который реализует наш интерфейс, и этот код может просто вызывать его методы. При этом сгенерированная реализация прокси-объекта автоматически сериализует переданные аргументы, общается с процессом-сервисом через libbinder, десериализует переданный назад результат вызова и возвращает его из Java-метода.

Stub работает наоборот: он принимает входящие вызовы через libbinder, десериализует аргументы, вызывает абстрактную реализацию метода, сериализует возвращаемое значение и передаёт его процессу-клиенту. Соответственно, для реализации сервиса программисту достаточно реализовать абстрактные методы в унаследованном от Stub классе.

Такая реализация Binder на уровне Java позволяет большинству кода использовать прокси-объект, вообще не задумываясь о том, что его функциональность реализована в другом процессе. Для обеспечения полной прозрачности Binder поддерживает вложенные и рекурсивные межпроцессные вызовы. Более того, использование Binder со стороны клиента выглядит совершенно одинаково, независимо от того, расположена ли реализация используемого сервиса в том же или в отдельном процессе.

Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.

Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов  —  например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.

Подробнее про Binder можно узнать по этим ссылкам:

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

Ресурсы, о которых должен знать каждый Android-разработчик / Хабр

Сегодня я хочу поделиться с вами моим вольным переводом статьи, написанной Сергеем Повзнером (Sergey Povzner). Сергей ведёт блог bongizmo.com и занимается разработкой туристических гидов под общим названием Citybot.

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

Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.

Книги

Может показаться, что изучать новую платформу по книгам в наши дни — способ весьма устаревший, и, возможно, вы правы. Но вы всё равно должны это делать — посмотрите статью Джефа Этвуда (Jeff Atwood) Программисты не читают книг — но вы должны.

Я рекомендую вот эти две книги:

  • The Busy Coder’s Guide to Android Development, написанная Марком Мерфи. Глубокий охват (более 2000 страниц) и регулярные обновления делают эту книгу особенной. Безусловно, это лучшая модель для книги, рассказывающей о такой активно развивающейся теме, как Android SDK. У подписчиков есть возможность задавать вопросы Марку в открытые часы. Примеры из книги доступны на гитхабе. Маст Рид!
  • Smashing UI от Юхани Лейтемаки (Juhani Lehtimaki). Отличная книга для любого Android-разработчика, который заботится о хорошем UI-дизайне.

developer.android.com

Перед тем, как начать писать своё первое приложение тщательно изучите Android Design. Особенно эти статьи:
Обязательно загляните в секцию загрузок — там можно найти шаблоны и исходники для различных иконок и виджетов.

Ну, что? Готовы писать код? Извините, продолжаем читать:

Stackoverflow

Инженеры Google, а также опытные программисты регулярно отвечают на интересные вопросы. Вот топ лучших Android-специалистов по версии Stackoverflow. Я подписан на RSS-ленты многих людей, вот только некоторые из них: CommonsWare (Марк Мерфи), Dianne Hackborn, Romain Guy, Reto Meier, Trevor Johns, Roman Nurik, Adam Powell.

Блоги

Во многих блогах можно подчерпнуть очень полезную и актуальную информацию:

  • Android Dev Weekly. Автор — Джиюри Грелл (Gyuri Grell). Отличный еженедельник с новостями из мира Android. Очень рекомендую.
  • Официальный блог Android-разработчиков. Стоит покопаться в старых постах — многие представляют интерес, например: Как избежать утечек памяти, Анализ памяти Android-приложений
  • Ромен Ги (Romain Guy). Отличный блог ключевого инженера Android-платформы. Как только освоитесь с разработкой, обязательно прочтите Android Performance Case Study. На примере одного twitter-клиента автор разбирает различные аспекты анализа производительности приложения. Оффтоп: кроме того, Ромен еще и отличный фотограф.
  • Создатель фреймворка анимации в Android, Чет Хаас (Chet Haase), ведёт блог Codependent
  • The CommonsBlog Марка Мерфи (Mark Murphy)
  • Блог Android-разработчика Кирилла Мотьер (Cyril Mottier). Фантастический блог с очень глубокими статьями. Среди последних: Советы по использованию ListView #5: увеличиваем область нажатия, Твиты об Android-разработке, Утопия второй версии API гугл-карт, О правильном подходе к запуску приложения, Pull-to-refresh: антипаттерн.
  • Украшаем Android (Styling Android) вместе с Марком Эллисоном (Mark Allison).
  • Мысли кодера (Coding Thoughts), которые ведёт Даниэль Лью (Daniel Lew) — заметки одного из разработчиков приложения Expedia Hotels & Flights

Google+

Несмотря на то, что Google+ не стал социальной сетью, для нас это ценный источник информации по Android. Вот несколько людей, на кого можно обратить внимание: Tor Norbye (ADT), Dianne Hackborn, Romain Guy, Chris Banes, Roman Nurik, Nick Butcher, Adam Powell, Rich Hyndman, Cyril Mottier, Paul Burke, Jeff Gilfelt.

Обязательно закруглите Джейка Вортона (Jake Wharton). Джейк подарил нам ActionBarSherlock, ViewPageIndicator, NineOldAndroid и много других опенсорсных библиотек для Android.

Также, вы можете присоединиться к этим сообществам в том же Google+:

Open Source: проекты

Читать чужой код — полезное занятие. Особенно, если речь идет про:

  • Приложение Google I/O. Если хотите что-либо скопипастить, лучшего места не найти.
  • Photup от Криса Бэйнса (Chris Banes)
  • Android-прототипы: глубокое погружение в Location от Рето Майер (Reto Meier). В приложение демонстрируется использование определения местоположения, фрагментов и бекап-менеджера. Используйте аккуратно — код не обновлялся некоторое время.

Ну, и конечно, бесконечный источник: исходный код Android.

Open Source: библиотеки

Вот несколько самых полезных библиотек:

  • ActionBarSherlock от Джейка Вортона (Jake Wharton). Библиотека, которая позволяет использовать родной action bar на четверках и кастомный на двойках, используя единые API и тему.
  • ViewPagerIndicator от Джейка Вортона (Jake Wharton). Библиотечные виджеты совместимы с ViewPager из Android Support Library и с ActionBarSherlock. Используются с целью улучшения навигации.
  • NineOldAndroids от Джейка Вортона (Jake Wharton). Позволяет использовать Animation API из Honeycomb на самых ранних версиях Android.
  • Universal-Image-Loader от Сергея Тарасевича (nostra). Мощный и гибкий инструмент для асинхронной загрузки изображений, кэширования и вывода их на экран.
  • UrlImageViewHelper от Коушика Датты (Koushik Dutta). Автоматом подставляет в ImageView изображение загруженное по указанной ссылке. Умеет сохранять и кэшировать.
  • Android-BitmapCache от Криса Бэйнса (Chris Banes). Специальный кэш для работы с Bitmap-объектами.
  • DiskLruCache от Джейка Вортона (Jake Wharton). Java-реализация LRU кэша на диске ориентированная на совместимость с Android.

Если вам всё ещё мало, поищите на гитхабе. Также, DevAppsDirect — отличная коллекция опенсорсных вьюшек, виджетов и библиотек.

Лекции с Google I/O

Получить билет на Google I/O стало практически невозможно. Но все выступления доступны онлайн (обычно даже со слайдами). Вот ссылки на сессии разных лет: 2012, 2011, 2010, 2009.

Вот некоторые из моих любимых лекций:

Пожалуйста, остановитесь! Вы меня пугаете

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

Несколько советов, о том, как эффективно всё это усвоить:

  • Во-первых, прочтите книги. Упоминал ли я, что вы должны читать книги? Это заложит правильную основу в знаниях Android-платформы.
  • Подпишитесь на блоги и RSS-ленты ответов со stackoverflow.
  • Создайте Android-дев-круг на Google+

Звёзды Android

Талантливые разработчики далают большой вклад в процветание экосистемы разработки под Android. Среди них я бы особо отметил двух. Эти парни сыграли огромную роль в том, чтобы сделать жизнь обычного Android-разработчика легче. Я говорю о Марке Мерфи (Mark Murphy) и Джейке Вортоне (Jake Wharton).

Марк и Джейк заработали пожизненное безлимитное пиво за самый большой и полезный вклад в Android open source. Если вы когда-нибудь их повстречаете, обязательно купите им что-нибудь выпить на их выбор. [поправочка по комментариям из поста-оригинала: пиво для Марка лучше отдайте Крису Бэйну, а лучшей наградой для Марка будет ваша подписка на его книгу.]

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

Конец, наконец

Вот и всё, друзья. Теперь у вас есть всё, чтобы делать крутейшие приложеньки! Хорошо, не совсем: вам всё ещё нужен крутой дизайнер, но это тема для отдельного поста. Но что можно сказать теперь точно — вы готовы написать своё первое приложение под Android.

Счастливого кодинга!

PS: Я не переводчик, и русский — далеко не самая моя сильная сторона. Я просто хочу, чтобы эта отличная статья была на Хабре. Поэтому пишите, пожалуйста, замечания обо всех ошибках (орфографических, грамматических и стилистических) в личку. Я постараюсь всё быстро поправить.

Как выбрать язык программирования для создания Андроид — приложения / Хабр

Привет, Хабр! представляю вашему вниманию перевод статьи «Top Programming Languages for Android App Development» автора Mohit Maheshwari.

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

Выбор языка программирования

В настоящее время Java является самым популярным языком программирования для мобильной разработки на Android. Хотя Google активно продвигает Kotlin как язык, который должен будет заменить Java. Также приложения под Android пишут и на других языках.

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

Ниже кратко описаны языки программирования, которые используются для разработки Android:

Java является официальным языком для разработки Android и поддерживается Android Studio.

Kotlin является официальным и самым последним введенным языком Android; он похож на Java, но во многих отношениях немного легче.

Также Android Studio поддерживает C++ с использованием Java NDK, что может быть удобно для игр.

C# несколько удобнее для начинающих в отличие от C или C++. Он поддерживается некоторыми очень удобными инструментами, например Unity и Xamarin, которые отлично подходят для разработки игр и кросс-платформенных приложений.

BASIC невероятно приятен в использовании и является идеальным началом для обучения кодированию.

Corona — еще один кроссплатформенный инструмент, использующий язык Lua (скриптовый язык программирования, по идеологии и реализации ближе всего к JavaScript) для реализации логики приложений, он значительно упрощает процесс сборки приложений и позволяет вызывать собственные библиотеки.

PhoneGap (HTML, CSS, JavaScript) — если Вы знаете, как создавать интерактивные веб-страницы, то можете использовать эти знания с PhoneGap для создания простого кросс-платформенного приложения.

Ознакомимся подробнее с инструментами и языками

Android Studio

Лучший способ разработать приложение для Android — это пойти и установить Android Studio. Android Studio — это интегрированная среда разработки (IDE) для работы с платформой Android.

Android Studio, основанная на программном обеспечении IntelliJ IDEA от компании JetBrains, — официальное средство разработки Android приложений. 17 мая 2017, на ежегодной конференции Google I/O, Google анонсировал поддержку языка Kotlin, используемого в Android Studio, как официального языка программирования для платформы Android в добавление к Java и С++.

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

Java

Для любого разработчика мобильных приложений на Android, первым и наиболее предпочтительным языком программирования пока остается Java, так он поддерживается компанией Google и большинство приложений в Google Play построены именно на нем.

Сама Java была разработана компанией Sun Microsystems (в последующем приобретённой компанией Oracle) еще в 1995 году, и она до сих пор используется для широкого спектра программных приложений. Код Java выполняется виртуальной машиной, которая работает на устройствах Android и интерпретирует код.

Для новичков Java может показаться немного сложным. Это становится препятствием, с которым сталкиваются люди, которые планируют попасть в разработку приложений для Android.

Но, если Вы новичок, и с нетерпением хотите сделать игру, или просто начать учиться ради обучения, то лучше начать с чего-то проще, но вернуться к Java, как только вы получили немного больше опыта.

Kotlin

Kotlin недавно появился в качестве «другого» официального языка для разработки Android. Как и Java, Kotlin работает на виртуальной машине Java. Он полностью совместим с Java и не вызывает никаких препятствий или увеличения размера файлов.

Основное отличие заключается в том, что Kotlin требует меньше «шаблонного» кода, т.е. более простая для чтения система. Он также устраняет такие ошибки, как исключение нулевого указателя, и даже освобождает Вас от необходимости заканчивать каждую строку точкой с запятой. Это отличный язык программирования, если вы только учитесь разрабатывать приложения для Android.

Kotlin является более легкой отправной точкой для начинающих, и тот факт, что можно использовать Android Studio, является большим плюсом.

C / C++

Что действительно не стоит выбирать новичку для разработки приложения для Android так это C / C++. Android Studio поддерживает C / C++ с помощью Android Native Development Kit. Это значит, что написанный код будет работать не на виртуальной машине Java, а на самом устройстве и даст больше контроля над такими вещами, как память. Например для 3D-игр, это позволит выжать дополнительную производительность с устройства.

С#

C# — это более простая, чисто объектно-ориентированная версия разработки C и C+ от Microsoft. Основная цель Microsoft заключалась в том, чтобы объединить мощь C++ и простоту Visual Basic. Этот язык для разработки Android-приложений часто приходится по вкусу многим разработчикам, особенно сочетание C# и Unity.

Unity

Unity — межплатформенная среда разработки компьютерных игр. Unity позволяет создавать приложения, работающие под более чем 20 различными операционными системами, включающими персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и другие. Выпуск Unity состоялся в 2005 году и с того времени идёт постоянное развитие.

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

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

Кроме того, разработка таким образом обеспечивает очень практичный способ изучения объектно-ориентированного кодирования, потому что объекты в этом случае фактически являются объектами большую часть времени.

C# также можно использовать с Xamarin через Visual Studio. Это похоже на традиционную разработку Android с преимуществом кросс-платформенности, которая имеет кодовую базу для Android и iOS.

BASIC

То, что мы узнали о C#, было попыткой соединить силу C с легкостью Visual BASIC. Это потому, что BASIC (Beginners All-Purpose Symbolic Instruction Code) невероятно приятен в использовании и является абсолютно идеальной отправной точкой для обучения кодированию.
К сожалению, он официально не поддерживается Android Studio, и его нельзя использовать в Unity. Но есть менее известный вариант для разработки приложений для Android в BASIC под названием B4A (BASIC 4 Android), который позволяет создавать приложения для Android с помощью BASIC.

Corona

Corona предлагает еще один простой вариант для разработки приложений для Android. Вы будете кодировать в LUA, который уже намного проще, чем Java. Он поддерживает все собственные библиотеки, что позволяет публиковать данные на нескольких платформах.

Corona подходит для тех, кто хочет создать что-то относительно простое и не так озабочен развитием своих навыков кодирования или становлением профессионалом. Если вы хотите использовать такие функции, как покупка в приложении, то вам нужно будет заплатить. То же самое касается использования собственных API для Android.

PhoneGap

Наконец, последний простой вариант, который вы можете выбрать для разработки Android-приложений, — это PhoneGap.

PhoneGap работает на Apache Cordova и позволяет создавать приложения, использующие код, который вы обычно используете для создания веб-сайта: HTML, CSS и JavaScript.

Пришло время, чтобы сделать собственный выбор!

Разрабатывать приложения под Android — словно быть (демонетизированным) ютубером / Хабр

Как известно, некоторые авторы на YouTube крайне недовольны условиями, которые предлагает эта платформа. Аналогичное сражение сейчас ведут разработчики Android-приложений на платформе Google Play. Попытаюсь за 20 минут объяснить, что не так с Android.

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

Раньше основные релизы Android приносили новые функции, которые радовали и разработчиков, и пользователей. Но с какого-то момента я уже начал бояться анонсов новых версий, и до сих пор ищу в себе силы (хех), чтобы посмотреть на список изменений и рекомендации для разработчиков к последнему релизу. И новые версии — это не единственная причина для нервотрёпки: изменения в политике Google Play Store тоже всегда забавно читать.


Для начала немного контекста: до Android я экспериментировал с Windows Mobile 6.x и перешёл на Android после выхода версии 4.2: помню, что вскоре после этого анонсировали 4.4, и она стояла на моём первом Android-телефоне до конца его жизни. Android стал первой и пока единственной мобильной ОС, где я серьёзно вложился в разработку приложений.

Я начал возиться с разработкой приложений незадолго до выхода 6.0 (Marshmallow), так что я не старожил и не могу сказать, что наблюдал эволюцию Android с самого начала, и, конечно, не наблюдал весь процесс с точки зрения разработчика. Тем не менее, перед моими глазами прошло десятилетие изменений — даже во время экспериментов с Windows Mobile я обращал внимание, что происходило в лагере Android, хотя на эти телефоны у меня ещё не хватало денег (всё уходило на «карманные компьютеры» под Windows Mobile). Я отлично понимаю, насколько неудобен был для пользователей и разработчиков Android 4.x и раньше: я и сам мог попробовать эти версии, и мои приложения должны были их поддерживать.

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

Новые версии Android включают новые API. Раньше в старые API из предыдущих версий не вносилось практически никаких изменений. То есть старые приложения продолжали нормально работать.

В последние два-три года новые версии Android начали удалять и изменять старые API. Например, если приложение хочет оставаться активными в фоновом режиме, то оно теперь должно отображать постоянное уведомление. Идея хорошо звучит в теории, но в итоге у вас постоянно несколько уведомлений, по одному для каждого фонового приложения. Например, у меня на телефоне постоянно висит два уведомления: одно для диктофона, второе для эквалайзера. Одно из моих собственных приложений тоже должно постоянно показывать уведомление в Android 8/Oreo и более новых версиях для надёжного фонового сканирования Wi-Fi, чтобы установить появление пользователя в определённых местах.

В будущей версии Android 10/Q возможности приложений ещё больше ограничат. Google убирает доступ к буферу обмена, убивая целую категорию приложений для управления буфером обмена (история скопированных фрагментов, синхронизация с другими телефонами, компьютерами и т. д.). В настоящее время все приложения могут получить доступ к буферу без специальных разрешений. Можно было решить проблему, добавив запрос на разрешение, а не полностью удаляя API. Приложения больше не могут включать и выключать Wi-Fi, что не позволяет, например, автоматически отключать Wi-Fi во время поездки на автомобиле. Google думает полностью запретить приложениям доступ к произвольным файлам во «внешнем хранилище» (SD-карты и область внутренней памяти на вашем телефоне, где лежат скриншоты и фотографии, MP3, образы для эмуляции и т. д.).

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

Это значительные изменения. Нормальные приложения могут перестать работать. Разработчикам придётся их обновить, чтобы реализовать менее удобные обходные пути, внедрить объяснительные сообщения и так далее. Это требует времени, усилий, денег и т. д., которые можно было потратить на исправление других проблем или разработку новых функций. Небольшим командам или инди-разработчикам, особенно которые занимаются этим в свободное время, может быть очень трудно догнать последние «тенденции» Google. Например, из-за изменения работы фоновых сервисов я в течение лета провёл большую часть своего свободного времени, перепроектируя архитектуру одного из приложений, что в свою очередь привело к появлению новых ошибок, которые пришлось диагностировать, исправлять и т. д., чтобы упомянутое приложение показывало уведомление и корректно работало в последних версиях Android.

Даже без выпуска новых версий Android компания Google может отправить в утиль старые API: например, установить новые правила Play Store, запретив приложения с определёнными разрешениями. Недавно Google запретила разрешения на доступ к SMS и журналу вызовов: соответственно, все такие приложения изгнаны из каталога.

Такие приложения по-прежнему можно установить напрямую из APK или альтернативных каталогов, но не Play Store. На практике получается, что из многих приложений в Play Store вырезают ключевую функциональность. Например, диктофон больше не может указать номер телефона в аудиозаписи, а приложения автоматизации больше не могут использовать SMS-сообщения как триггер для действий. Поскольку 99% пользователей скачивают приложения из Google Play, данная функциональность теперь запрещена и доступна только очень абсолютному меньшинству пользователей, которые знают, как обойти эти ограничения.

Разработчики в Play Store всё больше чувствуют себя как создатели контента для YouTube, где изменения политики происходят внезапно и без предупреждения. На YouTube продюсеры всегда опасаются, что контент будет демонетизирован по какой-то причине: это решает полностью автоматизированная, непрозрачная система, также как и реагирование на жалобы правообладателей. В Play Store теперь тоже приходится постоянно следить, по какой новой причине внезапно могут удалить ваше приложение или заблокировать учётную запись разработчика, вместе со всеми другими аккаунтами, которые Google сочтёт причастными:
И это лишь отдельные примеры даже не самых «страшных» историй, которые через день публикуются в r/androiddev. В соответствующей «категории» десятки историй по каждой такой теме. Иногда похожие случаи попадают на Hacker News. Похоже, Google относится к бану аккаунтов и удалению приложений Play Store с тем же легкомыслием, что и модераторы онлайн-игр, которые по малейшему поводу банят игроков по подозрению в мошенничестве. Для большинства игроков онлайн-игры — просто развлечение, в отличие от разработки приложений для Android. Возникает очевидный вопрос: что делать людям, которых забанили?

Теперь я понимаю, что аналогия с YouTube ужасна. Видите ли, на YouTube обычно приходят предупреждения. Нет такого, что вы проснулись и внезапно обнаружили, что ваш аккаунт забанен. У авторов видео обычно есть возможность извлечь выгоду из драмы, обратившись к пользователям. Аудитория обычно им сочувствует, в то время как разработчики приложений имеют дело с возмущением юзеров, которые понятия не имеют или не хотят знать, почему нам приходится массово удалять функциональность или снижать производительность наших приложений. Например, разработчик популярного диктофона ACR после удаления разрешения на доступ к журналу вызовов столкнулся с плохими отзывами, злоупотреблениями и ненормативной лексикой от тысяч разгневанных пользователей — и это после обширной кампании, предупреждающей о предстоящих изменениях (как пользователь ACR, я удалил версию Play Store и установил через XDA Labs непривязанную версию, которая сохраняет старую функциональность).

Для независимых разработчиков и небольших компаний разработка под Android стала рискованнее, чем когда-либо. Сегодня я начну работать над проектом, а через шесть месяцев, когда подготовлю первую версию, изменения в политике каталога не позволят его опубликовать или серьёзно повлияют на функциональность… в дополнение к вышеупомянутому пункту об API, которые устаревают и меняют семантику, требуя постоянной поддержки кода, чтобы идти в ногу с последними версиями.

Если вы ходили по ссылкам выше, то поняли ещё кое-что: в Google фактически отсутствует поддержка пользователей живыми людьми, и если бы их боты были такими же отзывчивыми, как Google Assistant… Если это не боты, а люди, то разница не чувствуется: они выплёвывают шаблонные ответы. Широко известно, что лучший способ решения проблем с листингом на Google Play — привлечь внимание сотрудника Google в социальных сетях.

Похоже, уровень поддержки Google зависит от того, насколько громкий шум вы поднимете в социальных сетях. И это экспоненциальная корреляция, потому что большого шума недостаточно, чтобы получить умеренный уровень поддержки; нужно поднять гигантский шум. Это проблема с большинством сервисов Google, особенно если вы не используете G Suite (по-видимому, разработчики приложений не считаются «платными клиентами», когда дело доходит до поддержки). Одна из вещей, которые я хотел бы зарегулировать на государственном уровне, безусловно, это обязательство таких мега-корпораций обеспечивать фактическую поддержку пользователей.

Хотя аналогия YouTube, вероятно, была ошибочной, но здесь есть ещё одна параллель: многие считают, что в последние годы YouTube вносит изменения в бизнес-модели и алгоритмы, благоприятствуя большим, уже известным авторам и затрудняя работу более мелких. Я считаю, что мы наблюдаем аналогичную тенденцию в Google Play Store — просто имейте в виду, что популярность приложения или его «уровень» следует оценивать не по количеству загрузок или активных пользователей, а по объёму комиссионных для Google от рекламы и внутриигровых покупок.

«Android — это open source» стало шуткой ещё пять лет назад. Хотя Android Open Source Project (AOSP) по-прежнему существует, многие действительно важные для конечных пользователей и разработчиков компоненты становятся всё более закрытыми.

Приложения от Google, могут делать то, что сторонним приложениям практически недоступно, благодаря тесному взаимодействию с проприетарным бегемотом, которым является Google Play Services. Это особенно заметно в самом приложении «Google», а также в Google Assistant и лаунчере Google (Google Старт).

В сборке AOSP многое отсутствует, а у многих приложений, включая мои, будут проблемы с нормальной работой. Проекты по «дегуглификации» Android разработали свободные альтернативы для многих функций Google Play. Но сам факт, что сообществу приходится разрабатывать эти альтернативы и что они крайне необходимы для запуска большинства популярных приложений, показывают, что в настоящее время Android можно считать свободным разве что как дистрибутив Linux.

Cам по себе AOSP эффективно контролируется Google. Этот проект важен, потому что определяет общие API для различных «OEM-версий» Android, так что мы можем разрабатывать для Android, а не для «Samsung Android» или «Nokia Android». Но какие API внедрить, а какие исключить, полностью решает Google. То же самое касается общей архитектуры системы, модели безопасности и т. д. Это означает, что Google может наклонять AOSP как угодно, удалять функции и переносить в проприетарные компоненты что захочет.

Очевидно, что реализация важных функций через Google Play и привязка ОС к компонентам Google важна для удержания контроля над «OEM-сборщиками». Положительный эффект для пользователей и разработчиков заключается в том, что функции и исправления безопасности становятся доступны даже на устройствах, которые не получают обновлений от OEM или получают обновления только для своей версии Android, но не для новой. Отрицательный эффект в том, что указанные изменения в одночасье могут повлиять даже на старые версии Android. Это остаётся полностью на усмотрение Google, также как ограничения приложений в Play Store.

Кажется, Google открывает только необходимый минимум Android, сколько необходимо, чтобы ОС работала на устройствах OEM. Мы не доходим до крайней точки в основном потому, что у самых крупных OEM достаточно рычагов, чтобы предотвратить это. Чувствую, что если бы Google могла сделать Android полностью закрытой системой, то сделала бы это. Интересно, что изменится в будущей операционной системе Fuchsia.

У Google два оправдания для изменений в Android и политике Google Play: «безопасность» и «пользовательский опыт», причём последний включает «время автономной работы». Не уверен, для кого Google в последние годы разрабатывает свой «пользовательский опыт», но точно не для «опытных пользователей», таких как я. Впрочем, сначала поговорим о безопасности.

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

Усиление мер безопасности имеет смысл, потому что мы храним в наших телефонах всё более ценную информацию: от «старомодной» приватной информации до биометрических данных, таких как отпечатки пальцев, скан лица и сетчатки глаза. Конечно, Google и прочих, наверное, больше всего заботит охрана доступа к платёжным системам, ключам DRM и так далее.

Прежде чем закончить рассуждения о безопасности, давайте немного поговорим о пользовательском опыте — это ещё одно популярное оправдание для ограничений или полного удаления определённых функций. Если 1% людей используют какую-то слишком сложную (или даже «небезопасную») функцию, то её часто упрощают… а вышеупомянутый 1% остаётся с системой, которая больше не поддерживает их вариант использования. Звучит не так уж плохо? Но Google обязана повторять этот процесс достаточно часто при выпуске новых версий (чтобы сотрудники могли получать свои бонусы), каждый раз связывая руки ещё 1% пользователей, и что останется в итоге? Наверное, только функция просмотра рекламы (очевидно, рекламы Google). Вам же не нужно звонить, верно? В конце концов, собеседник может оказаться мошенником, втянуть вас в схему социальной инженерии или что-то в этом роде.…

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

На самом деле, всё сводится к выбору пользователя. Android раньше позволял немного пожертвовать безопасностью в обмен на более мощные и инновационные приложения, чем в iOS. Раньше я мог запустить 10 приложений в фоновом режиме и посадить батарею за полдня, но теперь, если я хочу это сделать, то придётся смотреть на 10 текущих уведомлений. Раньше я мог обмениваться файлами между приложениями как на десктопе, но, видимо, это тоже оскорбление для хорошей безопасности. Раньше я мог сканировать сети Wi-Fi каждую минуту, но в Android 9 даже это ограничили несколькими сканированиями в час, убивая некоторые нормальные случаи использования, включая мой дипломный проект. К счастью, в универе мы можем просто притвориться, что последняя версия Android — восьмая.

Смарт-карты, включая SIM-карты, изобрели для контейнеризации защищённой части систем. Аутентификация, аттестация — все функции безопасности должны делаться там, чтобы большая система оставалась менее безопасной и более гибкой. Но в какой-то момент в последние десятилетия несколько компаний решили, что будет лучше (может, для «пользовательского опыта»?) перенести важные операции безопасности в процессор приложений, включая целые бесконтактные платёжные системы. Были разработаны системы вроде SafetyNet. А давайте запретим запускать банковское приложение на рутованном телефоне? Представьте, что интернет-банкинг на десктопе отказался работать, потому что до него дошла информация, что я знаю пароль к учётной записи администратора…

В конце концов, ограничивая нормальные приложения в своём каталоге, Google в итоге поощряет прямую загрузку и установку APK. Это нежелательно с точки зрения безопасности, не нужно объяснять, почему.

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

Меня бы так сильно не беспокоило это движение Android в сторону широких масс (или понимание Google того, что разрешено делать широкой общественности), если бы существовала жизнеспособная альтернатива мобильной ОС. Но у нас её нет. Есть только iOS от Apple, чья привлекательность с самого начала заключалась в девизе «это просто работает»: безопасная платформа с ограниченной функциональностью, что одновременно ограничивает возможность ошибок. Не сомневаюсь, это находка для большинства пользователей. Но лично мне такая платформа не подходит. Как я уже сказал, дайте мне возможность выстрелить себе в ногу, если я так хочу: дайте мне 2 часа автономной работы, если я того пожелаю, и пусть мои собственные приложения шпионят за моим местоположением, если я им это разрешил.

Ограничения iOS были в порядке, потому что много лет у нас был Android, который позволял делать такие вещи. Так получилось, что благодаря AOSP и отсутствию конкуренции Android оказался де-факто стандартом для каждого смартфона, который не является Apple. Среди недорогих смартфонов Android фактически является единственным вариантом. Конечно, из-за этого рыночная доля Android выросла. Поскольку сейчас «все» его используют, появился соблазн скопировать модель iOS «это просто работает» и навязать безопасность людям, «склонным к членовредительству» — теперь вы не сможете себе навредить, даже если захотите.

Усилия конкурентов Android в лучшем случае смехотворны. Windows Phone / Windows Mobile потерпела неудачу отчасти из-за слабого и, возможно, слишком позднего выхода на рынок, в сочетании с сомнительным «видением» и плохими управленческими решениями со стороны Microsoft. Хотя система Microsoft на самом деле была хорошей, иначе откуда столько убеждённых фанатов WP/WM, но вышла на рынок настолько поздно (и с таким неопределённым будущим), что не смогла привлечь разработчиков, а без топовых приложений платформа не нужна людям, как бы превосходна она ни была с технической точки зрения. Очевидно, проблема ещё в том, что многие из топовых приложений выпускает Google; она выпустила эти приложения для iOS в основном по той причине, что платформа iOS появилась раньше.

Если даже большой игрок с глубокими карманами, как Microsoft, не может представить третью мобильную платформу, то что уж говорить о менее масштабных попытках, таких как Firefox OS. Тут результат вполне предсказуем. У них ещё и дополнительная проблема с поиском железа для запуска. К сожалению, на телефоне нельзя взять и поменять ОС, как на компьютере. В далёком 2015 году я уже жаловался на отсутствие стандартизации в аппаратном обеспечении смартфонов. На самом деле интересно почитать ту статью, когда Android 4.4 был последней версией, и посмотреть, как изменилось моё восприятие Android.

Также должен отметить, что успешная альтернатива Android определённо должна запускать приложения Android, возможно, через слой совместимости. В некотором смысле Android установил стандарт для приложений, как 15 лет назад IE6 диктовал веб-стандарты наихудшим способом. Кто-то сказал антимонопольный?

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

Google устраняет часть мусорных и даже немного вредоносных приложений Play Store, усиливая автоматизацию, при этом ещё сильнее закукливаясь и будучи глухой, как никогда. На автомате трудно отличить нормальное приложение от вредоносного, а пользователю не разрешают решать столь важный вопрос. Поэтому Google просто «запрещает» использование определённых функций путём устаревания API и запрета этих функций в каталоге программ, таким образом блокируя буквально все приложения, которое хотят открыть произвольные файлы в хранилище пользователя, а также диктофоны, программы автоматизации действий и т. д.

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

Как я перешёл из системного администрирования в Android-разработку / Хабр

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

С чего всё началось

В сфере системного администрирования я успешно проработал более двух лет. Изучив рынок я понял, что мне необходимо идти дальше и что-то менять. Мой интерес к технологиям рос и я остановился на программировании, а именно, на языке Java. Я начал изучение Java SE с нуля. По плану было полное погружение в Java SE , а после в Java EE. Но, на середине изучения Java SE, запустил обычный Hello World проект на Android. И, мои взгляды на будущее сильно поменялись. Весь путь от первого «погружения» в программу до предложения о работе занял 1 год.

Быть или не быть?

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

На каком языке можно разрабатывать под Android

1. Официально, Google предоставил два варианта

  • Android SDK. Официальные языки — Java и Kotlin.

    Большинство существующих проектов написаны на Java.
    Kotlin является внуком Java. Некоторые разработчики стали активно использовать его в своих проектах. (Но их не так много, по сравнении с Java)
    Android официально стал поддерживать Kotlin с 17.05.2017, возможности языка будут встроены в Android Studio 3.0.

  • Android NDK. Официальные языки — C/C++.

    Сам Google рекомендует использовать NDK в тех случаях, когда требуется максимальная производительность. (В одном из наших проектов мы использовали NDK для организации голосовой связи)

2. Так же существуют кросс-платформенные инструменты.

С чего начать изучение Android

Возможно вы обратили внимание на кросс-платформенные инструменты или на Kotlin , но спешить не стоит.

C помощью кросс-платформенных инструментов можно разрабатывать сразу и под Android и iOS.

Кросс-платформенные инструменты способны решать определённый спектр задач, но по гибкости они никогда не сравнятся с нативными решениями. Тем более, такие специалисты не сильно востребованы на рынке труда.

Что касается Kotlin, на сегодняшний день нет компаний, у которых абсолютно все Android-проекты написаны на нём. Мне кажется, Kotlin стоит изучать только после трудоустройства.

Я рекомендую начинать обучение с Java. Тем более в том случае, если у вас нет опыта в программировании.

Изучаем Java

Необходимые знания

  • Типы данных. (Примитивные и ссылочные)
  • Циклы(for/while/for each)
  • Устройство памяти в Java(Stack, Heap). Так же важно понимать, как и на каком уровне работает Garbarage collector
  • Методы — возвращаемые/не возвращаемые
  • Массивы и коллекции, а так же операции с ними (Сортировки)
  • ООП (Полиморфизм, Наследование, Инкапсуляция, Абстракция)
  • Comparator и Comparable (для сортировки объектов)
  • Threads и Runnable, для понимания, как устроена многопоточность в Java.
  • Exceptions (try/catch/finnaly) — для «отлова» ошибок
  • Generics (Обобщенные типы)

Собеседования я проходил именно с этим списком.
На мой взгляд, этого более чем достаточно.

В сети достаточно много хороших ресурсов для изучения Java и Android. Я затрону только те, по которым занимался сам.

1. JavaRush

Самым первым ресурсом для обучения стал JavaRush. Мне кажется, достаточно будет пройти бесплатный курс «Java Syntax», который состоит из 10 уровней.

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

2. Java Core от Ивана Головоча

Параллельно с JavaRush так же смотрел видео-лекции Ивана Головоча, которые на мой взгляд являются самыми лучшими по Java в рунете. Мало кто в наше время способен и хорошо программировать и хорошо объяснять. Именно эти лекции закрепляли полученные знания на JavaRush. Лекции по Javа Сore советую смотреть полностью.

Изучаем Android

Необходимые знания

  • XML — верстать интерфейсы придется именно на нем
  • Activity/Fragments — «формы» для расположения UI. Необходимо знать их отличия, жизненные циклы, манипуляции с данными (onActivityresult)
  • Intents — передача данных между Activity, открытие сторонних приложений
  • Bundle — передача данных между Fragments, сохранение состояния экрана
  • Базовые адаптеры для ViewPager, RecyclerView, Spinner
  • NavigationView — Навигационное меню «Шторка»
  • Dialog, DialogFragment— Диалоговые окна (например, с текстом и кнопками «Да», «Нет»)
  • AsyncTask — Многопоточность в Android
  • SharedPreferenses — Для сохранения настроек и небольших данных
  • Service — Выполнение длительных операций в фоновом режиме
  • SQLite — База данных. Теряет свою популярность, так же почти во всех новых проектах используют ORM. Но в старых проектах точно будете встречать
  • Работа с ресурсами: string, color, styles, dimens, animations
  • Manifest файл, permissions — Описание компонентов приложения и разрешения

Собеседования я проходил без знаний Dialog/DialogFragment и Service

1. Udacity:Android Basics
После окончания вводного курса по Android, желание программировать сильно увеличилось. В курсе максимально понятно объясняется базовая концепция разработки под Android. После этого курса я написал свое первое приложение — генератор паролей, с сохранением состояния экрана при переворотах.

2. Видео-лекции StartAndroid

Неплохим дополнением к Udacity стали бесплатные видео-лекции от ресурса StartAndroid.

Не рекомендую смотреть старые уроки (2012-2013 год), т.к. технологии ушли давно вперед. А вот с начала 2015 года — вполне годно.

Так же существуют в текстовом формате.

Чат и канал StartAndroid в Telegram

3. Блог Александра Климова

Актуально. Отдельные моменты до сих пор просматриваю в данном блоге. Каждая тема осваивается на практическом примере с подробным объяснением.

4. Devcolibri — Full Android Application

После прохождения курса от Udacity, появилась идея начать писать свое первое тестовое приложение. После недолгих поисков, нашёл хороший курс от Devcolibri, где объяснялась концепция разработки на примере написания простейшего таск-менеджера. Смотря этот курс, я параллельно начал делать свое приложение, подхватывая различные фишки из урока.

Технологии и инструменты для Android Junior

В сообществе Android-разработчиков в Telegram, появился вопрос на эту тему, мой ответ приравняли как к слишком завышенному по требованиям к Junior. (Я описал Retrofit2 в связке с RxJava, так же Dagger2, Realm и Picasso). Стоит отметить, что уровень требований к Android Junior почти во всех студиях разный. Кого-то берут на работу и с начальными знаниями Android, без технологий в принципе. Но это редкость, и я не был в числе этих счастливчиков. Чем больше вы знаете — тем выше ваши шансы на трудоустройство.

Итак, поехали:

1. Git

Это система контроля версий кода. Позволяет активно работать в команде, отслеживать изменения в коде и откатываться на предыдущие версии, что очень удобно. Советую пройти хороший курс от GeekBrains. В качестве Git-клиента, рекомендую использовать SourceTree, т.к. он полностью бесплатен и удобен, а студии очень любят экономить на ПО.

2. ButterKnife

Удобная библиотека для объявления view-элементов из XML. (И не только). Изучается очень быстро и сокращает определённое количество рутинного кода.

3. Retrofit2, RxJava, RxAndroid, OkHttp Loging InterCeptor
Retrofit2REST-клиент
RxJava модуль реактивного программирования на Java
RxAndroid модуль реактивного программирования на Android
OkHttp Loging InterCeptor модуль для логирования HTTP-запросов (часть библиотеки OkHttp)

Достаточно знать основы работы в этой связке. (Например, уметь распарсить JSON с данными)

Не стоит с самого начала копать RxJava глубоко. Значительная часть Android-разработчиков использует её исключительно в связке с Retrofit2.

Полезные статьи
4. Dagger2
Библиотека для внедрения зависимостей. Достаточно так же знать основы, а именно — как внедрять самые простые зависимости.Полезные статьи
Чат в Telegram: @dagger_2

5. Realm

База данных. По некоторым параметрам она быстрее чем SQLite. Правда, в продакшн-проектах используется до сих пор не так часто, т.к. stable-версия вышла относительно недавно. Но, на мой взгляд, будущее локального хранения данных на Android именно за Realm. Достаточно посмотреть её на абстрактном уровне — разобрать базовые транзакции.

Сравнительная характеристика ORM и баз данных

6. Picasso

Библиотека для работы с изображениями. Чаще всего, используется для загрузки изображений с сети. Максимально проста в использовании.

7. EventBus

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

Но, в реальных проектах, к сожалению, будете часто встречать.

Практика

Как правило, у кандидатов с уже имеющимися приложениями на GitHub шансы на трудоустройство выше. (Особенно, если в них применены все технологии, которые я описал).

Для повышения шансов на трудоустройство, я рекомендую написать тестовое приложение, которое закрепит полученные знания. Каким оно должно быть, и что должно делать — решать вам. Лично мне кажется, что неоспоримым преимуществом перед другими кандидатами будет приложение, которое загружает какие-то данные из сети и отображает в удобном формате для пользователя.

При этом, если у пользователя нет интернета — последние актуальные данные загружаются из базы данных. Если вы не нашли подходящую для себя API — не беда, сформируйте несколько JSON-файлов на данном ресурсе и используйте их. Смотреть будут не на полезность вашего приложения для мира, а на то, как вы его реализовали.

Мое приложение загружало из сети список менеджеров компании и показывало график выполнения плана продаж. Уже в процессе его разработки я получил предложение о работе.

Моя самая главная ошибка в процессе разработки этого приложения — я пытался всё сделать идеально. По стандартам, чтобы мой код хорошо оценили. Обладая очень абстрактными знаниями по MVP, я попытался встроить его в проект, тем самым, ещё сильнее запутав свой код.

Сделать своё первое приложение идеально не получится, как бы вы не пытались. Мне кажется, что не стоит в своем первом проекте использовать MVP, если не хотите ещё больше запутать самого себя. (В дальнейшем, уже после трудоустройства — однозначно стоит).

Во время разработки, у вас может возникнуть много вопросов. Не беда, если у вас нет знакомых Android-разработчиков. Смело задавайте свои вопросы на StackOverFlow (можно на русском языке). Также, вопросы можно задавать в каналах Telegram.

Полезные чаты каналы в Telegram

  • Start Android Ru Chat
    @startandroidchat
  • Start Android Ru Channel
    @startandroid
  • Android Developers — русскоговорящее сообщество
    @android_ru
  • Mobile Dev Jobs — вакансии и аналитика
    @mobile_jobs
  • Android Architecture — обсуждение архитектуры приложений
    @Android_Architecture
  • Android Architecture — Summary (Сводка обсуждений с чата Android Architecture)
    @Android_Architecture_Summary
  • Dagger2
    @dagger_2
  • ReactiveX — русскоговорящее сообщество (Rx)
    @reactivex
  • Moxy – MVP библиотека под Android (рекомендую читать только после трудоустройства)
    @moxy_ru
  • Android NDK (C++) — русскоговорящее сообщество
    @ndk_ru
  • Android Arsenal (библиотеки для Android)
    @androidarsenal
  • Android ResId (новости и ресурсы по Android)
    @AndrResIdFb.

Интервью с работодателем и итоги

Если говорить о вопросах на собеседованиях, то в целом, у всех студий свои взгляды на этот счёт.
В большинстве случаев спрашивают и по Java, и по Android SDK и по технологиям. Но иногда встречаются места, где просят просто показать пример своего рабочего кода и спрашивают, а почему вот здесь вы сделали именно вот так. Готовым нужно быть и к первому и ко второму.

В нашей компании, я делю техническую часть первичного интервью с кандидатами на 3 этапа:

1) Вопросы по Java Core и ООП (см. Изучаем Java)

2) Вопросы по Android SDK (см. Изучаем Android)

3) Вопросы по технологиям и инструментам (см. Технологии и инструменты)

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

В 80% случаев, интервьюеры задают одни и те же вопросы по Java.

На этом все. В следующей статье, мы разберём подробно самые популярные вопросы на собеседованиях по Android SDK и таким технологиям, как Dagger2, Retrofit2, RxJava и Realm.

Android-разработчик VS веб-разработчик: лучший способ заработать больше

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

Как пользователи android и веб-приложений, мы можем сказать, что удобство использования обоих приложений очень разнообразно. Фреймворки и инструменты для мобильных приложений и веб-разработки также очень разные. Прежде чем сделать выбор в отношении карьеры, вы должны быть знакомы со спецификациями, уровнем сложности, масштабом карьеры, уровнем универсальности, техническим анализом, заработной платой, последними тенденциями и будущим мобильной и веб-разработки.Вот некоторые из основных факторов, которые могут помочь вам сделать лучший выбор карьеры.

Mobile Development vs Web Development

Что
В чем разница?

Веб-разработчик

Веб-разработчик отвечает за кодирование, проектирование и эксплуатацию веб-приложений. Принимая во внимание требования клиентов, веб-разработчик должен сделать веб-сайт более удобным для пользователя с помощью привлекательной графики и четкой навигации. У Android и веб-разработки совершенно разные карьерные возможности.Веб-разработчик использует разные языки программирования, такие как HTML, CSS, JavaScript и т. Д. Веб-разработчик может быть веб-разработчиком внешнего интерфейса, внутренним интерфейсом и разработчиком, а также веб-разработчиком полного цикла.

Front-End Web Developer: Front-end разработчик занимается проектированием макетов веб-сайта, вставляет контент и создает навигацию.

Backend web development: backend web-разработчик занимается базой данных и программированием на стороне сервера и следит за тем, чтобы все функции веб-сайта работали нормально.Уровень сложности back-end разработчика намного больше, чем frond-end разработчика.

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

Мобильный разработчик

Мобильный разработчик делает приложения для мобильных устройств. Создание мобильного приложения — более сложная задача по сравнению с веб-приложениями.Разработка приложений для Android также зависит от операционной системы, например, операционная система iOS и операционная система Android имеют совершенно разные мобильные приложения. Есть три основных типа мобильных приложений. Некоторые из основных инструментов для разработки Android — это android sdk linux, android sdk mac, android sdk windows, android studio python и т. Д.

Собственные приложения: собственные приложения для Android созданы для определенной платформы, например iOS или Android. Эти приложения созданы с использованием языков и инструментов, поддерживаемых операционной системой.Например, iOS использует Objective-C и Xcode, а Android использует Java и Eclipse.

приложений HTML5: эти
приложения можно создавать и запускать на любой платформе, их можно делать на CSS,
HTML5 и JavaScript. Им нужно только минимальное изменение, чтобы приспособиться к любому
операционные системы.

Гибридные приложения: гибридные приложения создаются с использованием HTML, JavaScript и CSS. Говорят, что это приложения в собственном браузере.

Mobile Development vs Web Development

Уровень
сложности

Веб-разработка

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

Вы можете сказать, что веб-разработка может быть сложной или сверхлегкой, это зависит от того, в каком направлении вы движетесь. Вы можете начать с основ, таких как HTML и CSS, с создания общего дизайна или использовать шаблон, такой как WordPress или Joomla, для разработки веб-сайтов.

Front-end веб-разработка проще по сравнению с back-end разработкой. Если у вас есть опыт работы в области информатики, вам может потребоваться меньше времени для изучения любых языков программирования в веб-разработке, но если вы не знаете об этом, это может быть сложной игрой для вас. Самое лучшее в разработке приложений — это то, что вы можете начать работать с ними, имея базовые навыки, и со временем повысите уровень эффективности. Итак, на базовом уровне вы можете легко пройти, через некоторое время уровень сложности может быть увеличен.Если вы хотите выучить какие-либо веб-языки, вы можете начать работать над ним с очень небольшими вложениями.

Мобильная разработка

Мобильную разработку сложнее изучить и над ней работать, чем веб-разработку. Хотя это также зависит от того, какое мобильное приложение вы хотите создать. В отличие от веб-сайтов, мобильные приложения зависят от платформы, и для каждой платформы необходимо иметь разный набор навыков и знаний. Чтобы начать работать с iOS и Android, вам потребуются совершенно разные навыки и знания.

При разработке приложения на платформе Android разработчик Android имеет больше свободы, потому что это платформа с открытым исходным кодом, а разработчик iOS — нет. Разработка под Android немного сложнее веб-разработки. Для программирования Android используется язык Java, который требует большего количества кодирования по сравнению с программированием на iOS Swift. Изучение мобильного приложения может быть немного дорогим, потому что для изучения языка у вас должно быть то же устройство и операционная система. Например, если вы хотите научиться программировать на Swift для iOS, вам понадобится MacBook для изучения мобильного приложения.

Mobile Development vs Web Development

Карьера
Область применения

Веб-разработчик

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

Мобильный разработчик

Спрос на рынке мобильных разработчиков стремительно растет. Предприятия переходят к мобильному приложению, чтобы сделать его доступным для клиентов. Будь то разработка под Android или разработка под iOS, карьера в обеих сферах имеет хорошие возможности. Вы можете выбрать любого из них, и вы не потеряете работу. Несомненно, индустрия мобильной разработки очень обширна и быстро растет. Рынок мобильных разработчиков также заметно растет, и ожидается, что это будет самая многообещающая работа.Спрос на мобильные приложения также очень высок, потому что они позволяют пользователям постоянно использовать свой мобильный телефон. Тенденции развития приложений для Android, таких как Facebook, Instagram, LinkedIn, Twitter и Snapchat, также растут.

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

Mobile Developer Versatility

Уровень
универсальности

Веб-разработка

Веб-разработка — это очень разносторонняя область, которая позволяет вам использовать свой опыт в кодировании и программировании для различных ниш.Например, если вы знаете язык C #, то его можно использовать не только при разработке веб-сайта, но и для разработки игр. Веб-разработчики более универсальны, чем мобильные разработчики. Приложение не нужно устанавливать на устройство, как мобильные приложения. Благодаря высокой гибкости веб-разработки у вас больше шансов получить работу по своему выбору. Познакомившись с популярными языками, такими как PHP, Java, CSS, C ++ android или C #, вы можете заняться фронтенд-разработкой, бэкэнд-разработкой, разработкой сайтов электронной коммерции, разработкой социальных сетей и т. Д.Таким образом, можно сказать, что эта разработка дает больше свободы для экспериментов, а разработчик имеет больше гибкости для работы с различными онлайн-приложениями.

Мобильная разработка

При работе с мобильным
приложений, у вас может не быть такой гибкости, как у веб-разработки. Для
мобильных приложений, есть разные требования, инструменты и
технические характеристики для Android и iOS. Инструменты и навыки, необходимые для различных
операционные системы также различаются при разработке мобильных приложений.Это
означает, что если человек специализируется на языке разработки iOS Swift, то он
может создавать мобильные приложения только для устройств Apple, таких как iPhone
или Macbook. В мобильных приложениях есть
меньше универсальности, чем веб-разработка.

Технический анализ

Веб-разработка

Одни из самых популярных
Языки программирования для веб-разработки следующие.

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

Java: Java также широко используется
язык программирования для веб-разработки. Он также используется мобильными и игровыми
разработчики по всему миру. Java — объектно-ориентированное программирование
язык для создания динамических веб-сайтов.

Python: можно сказать, что Python — это универсальный язык программирования в веб-разработке.Для написания кода вам не нужен компилятор. Python легко изучить на языке программирования высокого уровня. Некоторые мобильные приложения также работают на Python. Это надежный и простой язык программирования.

PHP: Php — это серверный язык сценариев, который также может использоваться для веб-разработки и других платформ программирования. Некоторые из самых популярных веб-сайтов, такие как Facebook, WordPress, также работают на PHP. PHP — это язык программирования с открытым исходным кодом, совместимый с ОС Windows и UNIX.Этот язык может быть непосредственно встроен в HTML.

Ruby: Ruby — динамичный
язык программирования, который можно использовать для создания веб- и мобильных приложений. Это
это платформа с открытым исходным кодом, которая очень проста и понятна. если ты
хотите изучить Ruby, тогда вы должны сначала хорошо понять Ruby на
Rails.

Мобильная разработка

Одни из самых популярных
языки программирования для мобильной разработки:

Python: Python — это универсальное средство программирования
язык для мобильной разработки.Вам не нужен компилятор для выполнения
codding. Python — это простой и легкий в освоении язык программирования высокого уровня.
язык. Это надежный и простой язык программирования.

Buildfire.js: он использовал Buildfire SDK и JavaScript для мобильных приложений. Buildfire — это очень простой в освоении язык программирования, который хорошо масштабируется и может работать на существующей платформе.

Java: Java — также широко используемый язык программирования для мобильной разработки. Он также используется для разработки игр для Android по всему миру.Java — это объектно-ориентированный язык программирования для создания небольших приложений.

Swift: этот язык программирования выпущен Apple. Inc для операционных систем iOS и Linux. Этот язык программирования используется для создания приложений для iOS. Это язык с открытым исходным кодом, который может использовать кто угодно. Приложение SlideShare для iOS также выполнено на языке Swift.

Mobile Development Jobs

Заработная плата

Веб-разработка

Веб-разработка — это работа, которую чаще всего ищут в Интернете из-за ее высокого спроса на рынке труда.Веб-программирование — это разнообразная область, и вы можете получать приличный доход даже на базовом уровне. По оценкам, средняя зарплата разработчиков в 2017 году составила 74 110 долларов США.

В США годовая зарплата
интерфейсный разработчик — 76000 долларов.

В США годовая зарплата
интерфейсный разработчик — 98000 долларов.

Внутренний разработчик зарабатывает больше, чем интерфейсный разработчик из-за своего уровня сложности. Заработная плата разработчиков зависит от различных факторов, таких как размер компании и рыночный спрос.Веб-разработчики в США получают более высокие зарплаты, чем разработчики в других странах. Точно так же крупные компании предлагают своим разработчикам более высокие зарплаты по сравнению с небольшими компаниями.

Мобильная разработка

Из-за высокого спроса на мобильные технологии на рынке зарплаты мобильных разработчиков также очень высоки в зависимости от их опыта. В последние несколько лет наблюдается бум спроса на рабочие места в сфере мобильных разработчиков. Средняя годовая зарплата разработчика приложений для Android в США составляет 107 000 долларов.Диапазон зарплат для iOS, Android и других платформ также варьируется в зависимости от спроса на рынке.

  • В США самая высокая годовая зарплата разработчика приложений для iOS составляет 139 000 долларов.
  • В США самая высокая годовая зарплата разработчика приложений для Android составляет 144 000 долларов.

Что касается заработной платы мобильных разработчиков, то здесь могут быть разные факторы, такие как регион, размер компании и рыночный спрос. Очевидно, что зарплаты мобильных разработчиков в США выше, чем зарплаты разработчиков Android в Индии.Точно так же крупные компании с большей вероятностью будут предлагать своим мобильным разработчикам более высокие зарплаты, чем небольшие компании.

Последние тенденции

Мобильная разработка

Как известно, мобильные приложения прошли
постоянная эволюция, и они сильно изменились за предыдущее десятилетие. Когда это
доходит до мобильных приложений, изменение очевидное. Согласно недавним
исследования, в 2019 году пользователи мобильных устройств будут исследовать 2.5 миллиардов. Снаружи
эти 2,5 миллиарда, 2,1 миллиона пользователей — приложения для Android и 0,4 миллиона
Пользователи приложений iOS.

Одна из технологий, которая так популярна на различных мобильных телефонах, — это носимые приложения. В 2019 году использование технологий носимых приложений увеличилось на 35%. Приложения для Android, которые считают ваши километры при ходьбе на беговой дорожке, также являются примером носимых приложений. Такие мобильные приложения очень умны, и большинство людей используют их для поддержания своего здоровья во время ходьбы, еды и т. Д.

кроме
носимые приложения, есть много других технологий, таких как IoT, AI, VR.
скоро сыграет важную роль в формировании будущего для мобильных телефонов.

Веб-разработка

Когда дело доходит до веб-разработки, тенденции меняются за счет новых инноваций и идей. Искусственный интеллект и машинное обучение в тренде, и разработчики уже сходят с ума по этому поводу . У разработчиков есть множество возможностей для внедрения различных новых технологий, таких как искусственный интеллект, машинное обучение, блокчейн, который оказывает огромное влияние на мировую экономику.Предполагается, что 2019 год станет годом внедрения ИИ на рабочем месте. Помимо этого, многие другие технологии также формируют будущее Интернета, такие как бессерверные приложения, чат-боты службы поддержки клиентов, технология Blockchain и т. Д.

Некоторые
Плюсы и минусы

Веб-разработка

,

Что нового на сертификационном экзамене Google Associate Android Developer | by Achraf Amil

Я скоро заканчиваю учебу в разработке программного обеспечения и хотел бы работать Android-разработчиком в каком-нибудь крутом подрывном стартапе. Но поскольку у меня недостаточно опыта, чтобы подтвердить свои навыки разработки Android, которые я полностью изучил в Интернете, я решил сдать экзамен Google Associate Android Developer Certification (AADC).

Я читал об экзамене и подготовке к нему, но в тот день, когда я почувствовал, что готов к нему, я получил следующее, пытаясь подписаться:

AADC был закрыт на несколько месяцев для получения обновлений

Итак, сегодня (август 2018 г. ) и через 3 месяца после закрытия (май 2018 г., да) программа сертификации возвращается.Я сдал его несколько дней назад, и теперь у меня есть этот проклятый лист.

В Интернете вы найдете достаточно статей (в основном на Medium), чтобы получить представление о форме и содержании экзамена до августа 2018 г., но не найдете статьи о новой версии. Поэтому я сосредоточусь на том, что изменилось, и не буду углубляться в то, как это было, особенно на то, о чем уже писали другие ребята.

Если вы планируете сдавать экзамен в определенное заранее определенное время (для меня это была суббота в 10 часов утра), я бы посоветовал вам провести оплату, подписку и подтверждение личности по крайней мере за день до его сдачи.На самом деле, после того, как вы заплатите, вам будет предложено отсканировать либо паспорт, либо водительские права (водительские права поддерживаются не во всех странах). Как только вы это сделаете, вам придется подождать несколько часов, чтобы пройти проверку. Вы не сможете сдать экзамен, пока не подтвердите свое удостоверение личности.

TrueAbility — это платформа, которая обрабатывает подписку и проверку.

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

Теперь у вас есть только 8 часов, чтобы отправить решение (и если вы этого не сделаете, плагин сделает это за вас).Фактически, это было 24 часа назад, но я не думаю, что это каким-либо образом повлияет на количество и / или сложность того, что вас попросят реализовать. Я полагаю, что 24 часа были просто своего рода «эй, у тебя есть один день, чтобы сделать это, увидимся завтра».

Вам просто нужно взглянуть на официальную веб-страницу AADC, чтобы понять, что виджеты, загрузчики, asynctasks, SQLite… уже в прошлом. После обновления они добавили компоненты архитектуры (❤), такие как Room, LiveData или Paging library, среди необходимых навыков.Я не буду исчерпывающим, поэтому перед сдачей экзамена убедитесь, что вы знакомы со всем, что указано на официальной веб-странице AADC.

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

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

Я считаю, что если вы пройдете курсы udacity по Android (базовые и продвинутые), вы будете готовы к экзамену. Не забывайте и Google Codelabs.

Чувак, если ты не автоматизируешь, ты не сможешь масштабироваться.

Новое в выходном собеседовании заключается в том, что вам больше не нужно его планировать, потому что нет необходимости в интервьюере.Теперь вы можете пройти собеседование сразу после 8-часового экзамена, и я советую это сделать. Это не продлится более 30 минут. Убедитесь, что у вас стабильное интернет-соединение, а также приличные микрофон и веб-камера. После того, как вы начнете запись видео интервью, вы не сможете сделать паузу. Вам будет предложено 5 вопросов, по одному за раз, и у вас будет до 10 минут без перерыва, чтобы ответить на все из них. Нажав «Далее», вы не сможете вернуться к предыдущему вопросу. Им просто нужно убедиться, что вы сдаете экзамен, чтобы вопросы не были технически сложными.

Когда вы закончите выездное собеседование, вам сообщат, что рассмотрение вашей заявки займет до 45 дней (да, окончательная проверка все еще требуется вручную). Но в большинстве случаев на получение электронного письма «Поздравляем, вы прошли» требуется меньше недели. Еще одно электронное письмо с вашим сертификатом придет через несколько дней, и по причине, которую я все еще игнорирую, это письмо обычно заканчивается спамом (так было со мной и со многими другими).

Когда я прошел сертификацию и поделился ею с LinkedIn, количество просмотров на удивление увеличилось…

Не стесняйтесь задавать вопросы или делиться своим опытом в комментариях.

Приветствия и счастливое кодирование,

.

Сколько людей нужно, чтобы создать приложение │ Советы и уловки

Хотите знать, сколько людей нужно, чтобы создать успешное мобильное приложение?

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

Согласно исследованию, проведенному Marketwatch, «ожидается, что к 2023 году рынок мобильных приложений для здоровья достигнет 94,14 млрд долларов США, а среднегодовой темп роста составит 29,03%».

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

  1. Rever — картографическое приложение с функциями социальных сетей
  2. DentaMatch — приложение для Android и iOS для здравоохранения
  3. Mejorate — Медицинское приложение для Android и iOS

Мобильные приложения и их популярность

По состоянию на 4 квартал 2019 года на мобильные устройства приходилось 52,6% общего трафика веб-сайтов. Прочтите «Процент мирового трафика веб-сайтов мобильных устройств с 1 квартала 2015 года по 4 квартал 2019 года», чтобы получить дополнительную информацию об этом.

В конце третьего квартала 2019 года пользователи Android могли выбирать из 3,3 миллиона приложений в Google Play, а пользователи iOS могли загружать из 2,2 миллиона приложений в Apple App Store. Вы можете получить больше информации о популярности мобильных приложений, прочитав «Список магазинов приложений (2019 г.)».

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

Привлекайте пользователей и удерживайте их: ключ к успеху вашего мобильного приложения

Рынок мобильных приложений, безусловно, растет, но это неумолимый рынок! По состоянию на 1 квартал 2019 года 25% мобильных пользователей покинули мобильное приложение после того, как использовали его всего один раз.

Как насчет удержания пользователей? Ну там тоже тяжело! Только 32% мобильных пользователей запускают одно и то же мобильное приложение более 11 раз. Прочтите «25% пользователей бросают приложения после одного использования», чтобы получить больше информации.

Если вы планируете привлекать пользователей и удерживать их, вам необходимо предложить им приложение, обеспечивающее обещанные вами функции. Вам также необходимо предложить удобный «пользовательский интерфейс» (UI).

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

Ваш подход к разработке определяет размер вашей группы разработчиков мобильных приложений

Потребительский рынок мобильной связи насыщен, а ожидания пользователей чрезвычайно высоки. Платформы и фреймворки для мобильных разработчиков сейчас очень хорошо разработаны.

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

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

При разработке подхода к разработке необходимо учитывать следующее:

Разработка приложений «родное» и «гибридное». Фреймворки для разработки гибридных приложений, такие как React Native, могут обеспечить почти нативный «пользовательский интерфейс» (UX). Вы создаете только одно приложение и запускаете его как на Android, так и на iOS, поэтому ваши расходы на разработку и обслуживание остаются под контролем.Однако гибридные приложения по-прежнему не могут предоставить тот UX, который могут использовать собственные приложения, поскольку в нативной разработке использовались технологии, специфичные для платформы. Нативные приложения также обеспечивают более высокую производительность и безопасность, как я объяснял в разделе «Каков наилучший подход к разработке, гарантирующий успех вашего приложения?».

Разработка API и использование 3 rd сторонних API: Хотели бы вы каждый раз изобретать велосипед? Поэтому в некоторых случаях вы, вероятно, не захотите использовать лидирующие на рынке API 3 от сторонних производителей.Хотя это имеет смысл, вам также следует проявлять осторожность, прежде чем добавлять слишком много внешних зависимостей в свое приложение. Я рекомендую вам разработать свои RESTful API для ваших основных функций и учесть это при оценке количества людей, которые вам нужны в вашей команде разработчиков приложений. Нужна помощь в разработке API? Прочтите наше руководство «Как создать RESTful API для мобильного приложения?».

Обеспечение безопасности вашего приложения: вы ориентируетесь на жестко регулируемую отрасль, такую ​​как финансовые услуги или здравоохранение? Вам нужно будет уделить особое внимание защите своего приложения, поскольку в этих отраслях действуют строгие правила безопасности данных.Вам нужно достаточное количество компетентных людей, которые могут уменьшить уязвимости безопасности приложений и проанализировать ваш код, чтобы выявить любые скрытые риски безопасности. Учитывайте это при оценке того, насколько большая команда разработчиков мобильных приложений вам нужна. Хотите знать, как снизить риски безопасности приложений? Наше руководство «Как защитить свое приложение Fintech» может помочь.

Принимая во внимание все это, довольно легко понять, почему ответ на вопрос «сколько программистов нужно, чтобы создать приложение», является таким сложным.

Но это еще не все.

Формирование команды разработчиков приложений: кто вам нужен?

Если вы планируете вложить более 30 тысяч долларов и несколько месяцев своего времени в разработку проекта — лучше сделайте это правильно и получите профессиональную команду. Даже если вы решите создать продукт внутри компании, вам все равно потребуется создать внутреннюю команду (что сложнее, чем нанять существующую команду).

Итак, кто вам нужен для создания приложения?

Вот список людей, которые будут вовлечены:

Мобильный разработчик (полный рабочий день)
Backend разработчик (полный рабочий день)
Dev ops-специалист (неполный рабочий день)
Дизайнер (неполный рабочий день)
Специалист QA (неполный рабочий день)

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

И это минимум. Если вы хотите двигаться быстро и строить как для Android, так и для iOS, вам нужно будет добавить как минимум еще одного человека. Если вы хотите двигаться еще быстрее, вам следует добавить еще двух человек (плюс по одному для каждой мобильной платформы), что означает в общей сложности 9 человек.
Конечно, вы можете попытаться стать экономным и выжить всего с тремя людьми (разработчик мобильных приложений, разработчик серверной части, дизайнер). Однако этого было бы достаточно только для начала, но все же возникает вопрос: сколько часов разработчикам нужно потратить на создание приложения?

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

И это подводит нас к еще одной сложной задаче — как нанять мобильных разработчиков, которые являются надежными экспертами в своей области и готовы вложить свои силы и опыт в создание выдающегося мобильного приложения?

Но есть еще один фактор, который играет важную роль в определении того, сколько времени потребуется для завершения вашего приложения — управление командой.

Управление командой: повышение продуктивности команды разработчиков мобильных приложений

Великие разработчики обеспечивают только 20% успеха вашего мобильного приложения. 80% — это хорошее управление продуктом. А если вы никогда раньше не управляли процессом мобильной разработки самостоятельно, вам нужно будет нанять менеджера по продукту, чтобы избежать фатальной ошибки, которая приведет к полному провалу проекта.

Итак, как минимум, для любого проекта по созданию успешного мобильного приложения действительно требуется от 4 до 10 человек в команде.Например, нам пришлось выделить 6 разработчиков, одного менеджера проекта и одного менеджера по работе с клиентами, чтобы помочь Adventure Aide с запуском и развитием продукта. Это помогло превратить их проект в историю успеха. Вот что они сказали о нашей помощи:

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

Я бы порекомендовал вам начать только с одной платформы, не гибридной, а нативной, желательно iOS (хотя это зависит от вашей целевой аудитории). После успешного запуска вы можете проверить рынок, а затем начать работу над приложением для Android.

Не забывайте еще об одном — маркетинге. Для этого вам также понадобится веб-сайт. Даже если это просто, важно, чтобы у вас был собственный уголок в Интернете, чтобы продемонстрировать свои продукты и начать создавать свой бренд.Поэтому добавьте в свою команду одного фронтенд-разработчика, который займется этим.

Наем команды разработчиков мобильных приложений

Оценив, сколько людей вам понадобится, вам нужно решить, где их взять. У вас есть 3 варианта:

Аренда на дому

Нанять индивидуальных подрядчиков

Нанять команду разработчиков

Внутренний персонал
Наем внутреннего персонала — это очень сложно и рискованно. Представьте, что вы узнали, что вам нужно изменить курс или закрыть компанию после того, как ваш MVP не принят рынком.Кроме того, на набор 5–10 действительно хороших людей у ​​вас уйдет несколько месяцев. Отработка процессов, чтобы они действительно хорошо работали в команде, займет у вас еще несколько месяцев. А работа с работой и другими документами — вы знаете, какая это боль. Однако, если у вас есть 2 миллиона долларов на вашем банковском счете, вы имеете опыт создания и управления командами, а также разработки проектов, тогда это может быть приемлемым вариантом.

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

Профессиональная команда разработчиков
Наем профессиональной команды разработчиков — это круто. Это не просто группа людей, это команда, которая имеет уже отработанные и твердо установленные процессы и стандарты. Очевидно, вам нужно обязательно оценивать разные команды и выбирать лучшую.

Я регулярно прохожу этот процесс в DevTeam.Space. Я лично беседую с разными командами разработчиков вместе со своими коллегами. Мы регулярно проводим интервью с новыми командами разработчиков и принимаем в наше эксклюзивное сообщество только лучших из лучших. Рынок разработки программного обеспечения настолько велик, что количество команд огромно. Вот почему мы выбираем менее 1% команд, которые подают заявки на работу с нами или которых мы находим. Это позволяет нам иметь очень плотное сообщество лучших команд разработчиков, где каждая команда является полевым экспертом на определенном рынке или в стеке технологий.Затем мы отслеживаем их эффективность, оценивая каждую команду разработчиков от проекта к проекту. Таким образом, мы можем гарантировать, что наши клиенты будут работать только с лучшими командами разработчиков.

Как вы понимаете, самое сложное — найти лучшую команду разработчиков для создания успешного мобильного приложения. Я только что описал, как мы это делаем. Так что с этого момента вы тоже должны это делать. В этом вам поможет наше руководство «Команда разработчиков приложений-фрилансеров и команды разработчиков программного обеспечения на местах».

Еще один важный момент — это фактические процессы, которым следуют команды.Например, в DevTeamSpace мы создали собственный уникальный процесс и обучили все наши команды разработчиков следовать ему. Итак, мы можем эффективно управлять сотнями проектов. У вас тоже должны быть свои процессы, или вы должны изучить процессы команды разработчиков, которую вы нанимаете.

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

Если эта информация полезна для вас, поделитесь ею со своими коллегами и друзьями — не позволяйте им узнать на собственном опыте, как создать успешное мобильное приложение!

,

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *