Monthly Archives: April 2013

Знакомство с андройдом как разработчика

Вступление

В связи с популярностью Андройда, захотелось мне попробовать что-то написать под него.
Знакомство состоялось.
До знакомство сложно было представить, что это ткое.
С одной стороны у меня по положительному шуму в интернете сложилось впечатление, что на Андройде классно приятно писать, что также явилось одной из причин, почему захотелось глянуть глубже.
С другой стороны, на данный момент знакомсто с Анрдойдом как пользователем закончилось, завершающая фаза освещена на странице “Not enough storage on android device” в вопросах, ответах и комментариях.

Знакомство

Приятно то, что в Android используется язык Java, и если есть опыт разработки с использованием Java, то все довольно просто.Google рекомендует использовать Eclipse, но я пробовал в IDEA, тем более есть приятный опыт разработки на Java именно в IDEA.

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

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

Страницы с элементами управления делаются с использованием класса android.app.Activity (логика) и xml-разметки (визуальное представление). Но вся связь между ними пишется вручную.
В iOS к примеру связи делаются перетаскиванием мышью, при этом генерируются новые классы с членами, что дает возможность проверять несоответствие типов во время компиляции.
Видимо в Андройд тоже можно такой подход использовать, но это не является распространенной практикой, да и было бы более громоздко писать, поскольку нет аналогов XCode для iOS, который делает большую часть работы для разработчика.

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

Для анимации нужно указывать названия переменных как строки, используется рефлексия – еще один источних ошибок.
В iOS видимо тоже используется рефлексия, но она скрыта от разработчика приложений.
Аналогичная ситуация в WPF от Microsoft (хотя это нельзя отнести к mobile development, но думаю, аналоги будут, а может и уже есть, на гаджетах от Microsoft) – для этого разработан механизм Dependency Property, в случае необходимости их создания в своей компоненте очень поможет помощь Visual Studio – опять натыкаемся на то, что среда разработки сильно помогает.

Для отображения списков данных используется класс ArrayAdapter.
Сначала было бы логично подумать, что он используется только для хранения данных. Но оказывается, что он также и связан с графическим представлением – нет четкого разделения на представления и данные. До конца не понял, как у них реализован MVC или его аналог, неочевидное разделение ответственностей. От Google-а ожидал чего-то более качественного.

При запуске приложения выводится множество ошибок самой системы Android.
Если кто привык писать так, чтобы исправлять все ошибки и предупреждения, которые заметил, то с андройдом лучше об этом забыть.

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

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

Выводы

Андройд сильно молодой и это видно.
В архитектурном плане ему еще очень далеко до технологий Apple или Microsoft.
Я не вижу, как Google приблизится к ним, не выпустив собственной среды разработки, но она сразу не появится.

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

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

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