На каком языке написан apk. Hello Kitty - Создаём первое приложение для Android

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

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

  • Java – это официальный язык разработки для Android, и он поддерживается средой разработки от Google. Выучить его может быть не так просто.
  • Kotlin – этот язык был представлен в качестве второго официально поддерживаемого языка. Во многом он похож на Java, но начать работу с ним проще.
  • C/C++ – Android Studio поддерживает C++. Этот язык еще сложнее, но он активно применяется при разработке игр.
  • C# – этот язык может понравиться начинающим. Он поддерживается средами разработки Unity и Xamarin. Они дают преимущества при разработке игр и продуктов для разных платформ.
  • BASIC – этот язык поддерживает среда разработки B4A IDE, которая является простым, но мощным инструментом.
  • Corona/LUA – среда LUA хороша для разработки кросс-платформенных продуктов. Она значительно упрощает создание приложений и предоставляет доступ к нативным библиотекам.
  • PhoneGap (HTML, CSS, JavaScript) – этот вариант подходит для тех, кто умеет создавать интерактивные веб-страницы. С PhoneGap вы сможете похожим образом создавать кросс-платформенные приложения.

Теперь разберем эти варианты подробнее.

Java

Язык программирования Java первым приходит в голову, когда речь заходит о разработке под Android. Java был выпущен компанией Sun Microsystems в 1995 году. Он используется для разного типа приложений. Если говорить об Android-приложениях, Java – это лучший выбор для тех, кто хочет уйти в разработку для Android с головой. Однако это не самый лучший язык для новичка. Вы непременно столкнетесь с трудностями. Если вы начинающий, хотите создать игру или хотите начать обучение, но еще не определились, какого именно результата вы хотите достичь, возможно, следует начать с чего-то более простого.

Kotlin

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

C/C++

Не самый лучший выбор для создания простых приложений. Вы можете работать с языком в Android Studio с помощью Android NDK, но в отличие от Java и Kotlin он не выполняется на Java Virtual Machine. Однако он работает нативно на устройстве, что может дать вам больше возможностей в работе с памятью. Вы можете добиться с его помощью лучшей производительности в случае с 3D-играми. Если это ваш выбор, готовьтесь к трудностям. Возможно, вам лучше использовать готовый игровой движок для создания игр.

C#

C# – это более простая версия C и C++, разработанная компания Microsoft. С этим языком вам не нужно заботиться о работе с памятью, как и в случае с Java. Однако C# более современный и чистый, в сравнении с Java. C# и Unity окажутся очень полезными и простыми в разработке игр. Для разработки приложений среда Unity не так хороша. C# – отличный выбор, но он ограничит ваши возможности в случае, если вы желаете стать профессиональным Android-разработчиком.

BASIC

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

Corona

Corona в связке с LUA позволит разрабатывать не только для Android, и это значительно проще, чем начинать учить Java. Вам понравится, и результат порадует, но для того, чтобы развивать свои навыки, придется учить что-нибудь еще. Как и в случае с BASIC, профессионалом не стать.

PhoneGap

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

Вариантов много. Уверены, вы сможете сделать правильный выбор.

По материалам Android Authority

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

А ещё все новые Хромбуки отныне и навсегда обзавелись поддержкой Android-приложений: их можно скачивать, устанавливать и запускать, как в родной среде. Рынок Android-программ лишь растёт. Не следует думать, что время ушло – ещё совсем не поздно начать. Всё, что нужно для старта: приготовиться, сделать глубокий вдох, подобрать подходящий язык программирования – и начать свое путешествие.

Но какой язык программирования будет лучшим именно для вас? Выбор подходящего инструмента разработки – первая задача, с которой никто не справится лучше вас. Многое зависит от опыта в программировании (либо от отсутствия опыта в конкретных средах разработки), от личного комфорта при использовании того или иного языка. К счастью, выбор приличный. В данной статье рассмотрена подборка лучших языков программирования для Android.

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

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

Стоит отметить, что из-за почтенного возраста Java ему не хватает некоторых характерных особенностей, присущих более молодым языкам. Новичкам это не столь важно, однако для более опытных программистов, переходящих на этот язык, скажем, со Swift, Java может поначалу вызывать приступы клаустрофобии.

Язык программирования Kotlin был создан специально для работы на виртуальных машинах Java. Это означает, что приложения Kotlin компилируются в код Java, что позволяет им запускаться на любых машинах с поддержкой Java-среды. А так как поддержкой Java обладает большинство машин, то использование Kotlin – сравнительно простой способ разработки кросс-платформенного ПО.

Использование Kotlin – это применение в программном продукте всех лучших сторон Java, без его недостатков. Синтаксис и другие особенности программирования на Kotlin современны, понятны, быстры. Это действительно удобная среда для разработки. Там, где Java кажется громоздким, неуклюжим и староватым языком, Kotlin выглядит комфортно, свежо и даже красиво. В какой-то степени можно считать, что Kotlin был специально создан для разработки приложений Android.

Обратная сторона медали? Kotlin – очень молодой язык. Его первые версии были выпущены в 2011 году, а официальный релиз состоялся лишь в 2016. Есть и хорошие новости: Kotlin – бесплатный и с открытым исходным кодом. Стоит ожидать, что он будет развиваться семимильными шагами. Но в любом случае должно пройти несколько лет, прежде чем этот язык зарекомендует себя по-настоящему надёжным выбором.

C# — невероятный язык программирования! Он взял от Java всё самое лучшее, оставив за бортом худшие особенности этого языка. И развивался он в том же правильном русле. Похоже, что в Microsoft некогда разглядели потенциал Java и решили разработать собственную, лучшую версию.

Долгое время серьёзным недостатком использования C# было то, что он работал лишь в системах Windows: этот язык основывается на.NET Framework. Но в 2014 году это обстоятельство изменилось: Microsoft открыла исходные коды.NET Framework. Более того, в 2016 году корпорация приобрела компанию Xamarin – разработчика Mono (проект, позволяющий программам C# работать на различных платформах).

Итогом этих славных дел стало то, что сегодня можно использовать среды Xamarin.Android и Xamarin.iOS для создания мобильных приложений в Visual Studio или Xamarin Studio. Отличный способ для начала разработки, ведь в дальнейшем можно будет использовать средства этого языка в других областях – скажем, создание сложных игр при помощи Unity и C#. Наглядные примеры приложений, созданных в Xamarin? MarketWatch – ни больше, ни меньше.

Наконец, отметим, что ещё недавно за работу в Xamarin требовалась плата. Но Microsoft сделала эту среду бесплатной!

Хотя Android не обладает нативной поддержкой Python, существуют инструменты, позволяющие писать приложения на Python, а затем конвертировать их в «родные» для Android приложения APK. Великолепный пример жизнеспособности Python в качестве действительно эффективного языка. Почитатели языка Python, желающие попробовать себя в разработке Android-приложений, обязательно оценят эту возможность – не вникая при этом в дебри Java.

Среди наиболее популярных решений для конвертации кода Python в APK – проект Kivy. И дело даже не в его природе open source, и не только в поддержке Windows, Mac, Linux и iOS вдобавок к Android. Kivy спроектирован таким образом, чтобы действительно ускоряет разработку приложений. Во всяком случае, можно использовать его в качестве инструмента для прототипирования. Сколько всего можно сделать при помощи лишь нескольких строк кода!

Впрочем, в отсутствии у Python нативной поддержки, не получится воспользоваться и преимуществами родной для Android среды. Приложения, написанные с Kivy, как правило, компилируются в более объёмные APK, медленный старт и, в целом, производительность ниже среднего. Однако каждый вновь выпущенный релиз по-настоящему лучше предыдущего, а мобильные устройства сегодняшнего дня настолько мощны, что неоптимальная производительность приложений значит не столь уж много. Пусть этот фактор не будет препятствием.

Пара примеров приложений на Android, написанных в Kivy: Kognitivo и Barly.

  1. HTML5 + CSS + JavaScript

Эта тройка языков, когда-то созданных для разработки фронт-энд приложений в веб-среде, с тех пор переросла в нечто большее. Теперь инструментов HTML5, CSS и JavaScript вполне достаточно для создания самых разных приложений и для мобильных устройств, и для классических ПК. По сути, программист создаёт веб-приложение, способное использовать всю мощь и магию оффлайн-платформ.

Для создания Android-приложений этим способом можно использовать возможности Adobe Cordova – это фреймворк с открытым исходным кодом, который также поддерживает операционные системы iOS, Windows 10 Mobile, Blackberry, Firefox, и многие другие. Однако, какой бы полезной ни была Cordova, для создания в ней сколь-нибудь приличного приложения требуется серьёзная работа. Поэтому многие программисты отдают предпочтение проекту Ionic Framework (который использует «Кордову» для развертывания на различных платформах).

Примеры приложений для Android, написанные на HTML5, JavaScript и CSS: Untappd и TripCase.

Есть и другая возможность: использование библиотеки React Native. Её можно развернуть на Android, iOS и платформе «Универсальных приложений Windows». Эту библиотеку используют специалисты Facebook, Instagram и других крупных компаний, поэтому можно положиться на её надёжность. Обучение не самое простое, но когда оно подойдёт к финалу, в ваших руках будет вся мощь, гибкость и удобство, которые только можно пожелать.

Lua – старый скриптовый язык, который изначально создавался в качестве дополнения для программ, написанных на более сложных языках: C, VB.NET и т.д. В этом языке есть некоторые особенности, которые выделяют Lua из ряда подобных ему – к примеру, начало массивов с 1 вместо 0, или отсутствие нативных классов.

Таким образом, для определённых задач Lua можно использовать в качестве основного языка программирования. Лучший тому пример – SDK Corona. При помощи Corona можно создавать мощные, богатые по функциональности приложения с возможностью развёртывания на Windows, Mac, Android, iOS, и даже Apple TV + Android TV. В Corona также встроены возможности для монетизации, плюс – это приличный по объёмам рынок, где можно отыскать полезные в работе плагины.

Чаще всего Corona используют для создания игр (среди примеров – Fun Run 2 и HoPiko), однако есть и образцы утилит, а также бизнес-приложений (My Days и Quebec Tourism).

  1. C/C++

Для создания приложений Android, Google официально предоставляет две среды разработки:

  • SDK (использует Java);
  • и NDK (использует нативные языки, наподобие C и C++).

Отметим, что для создания приложения целиком, использовать C, C++ и «голый» Java не получится. Вместо этого NDK позволяет создавать библиотеки, к функциям которых могут обращаться части Java-кода из приложения.

Как правило, нет необходимости использовать NDK. Эту среду не стоит использовать в качестве основной хотя бы потому, что придётся больше заниматься кодингом на C/C++, а не на Java. Существование NDK оправдано в тех задачах, когда требуется выжать как можно больше производительности при выполнении сложных вычислительных задач. Также NDK позволяет внедрять в приложение библиотеки C и C++.

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

Какими приложениями вы хотели бы заняться?

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

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

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

Java - основное средство для Android-разработчика

Среды разработки : Android Studio (IntelliJ IDEA) , Eclipse + плагин ADT
Подойдёт для широкого спектра задач
Java - основной язык для программистов под Android, обязательный маст-хев для новичков. Основной исходный код Android написан именно на этом языке, так что легко понять, почему большинство выбирают именно этот язык. Приложения, написанные на Java, запускаются в Android с помощью виртуальной машины ART (или Dalvik в Jelly Bean и более ранних версиях Android) - аналога виртуальной машины Java, из-за которой у Google присутствуют серьёзные судебные тяжбы с Oracle.

Google на данный момент официально поддерживает достаточно мощную среду разработки Android Studio, которая собрана на основе Intellij IDEA от JetBrains. Также не стоит забывать про очень подробную документацию от Google, в которой разбирается всё: от match_parent и wrap_content до конструкторов, констант и основных методов класса JavaHttpConnection - обязательно стоит почитать.

Кроме того, не стоит забывать о Eclipse - очень популярной среде для Java-программистов. С официальным плагином ADT от Google этот тулкит станет мощным и легковесным оружием в ваших руках. Но ребята из Маунтин-Вью ещё с лета прошлого года перестали поддерживать Eclipse, уступив место свежей Android Studio. Рекомендуется использовать на слабых ПК.

Необходимая документация:

С++ - мощный инструмент в руках мастера

Основные среды разработки : Android Studio (версия 1.3 и выше), Visual Studio 2015 , QtCreator
Подойдёт для игровых движков и ресурсоёмких приложений.
С++ - немолодой, но очень мощный язык программирования, отметивший в прошлом году своё тридцатилетие. Был изобретён в 1985 году благодаря стараниям товарища Бьёрна Страуструпа и до сих пор занимает верхние позиции самых популярных языков программирования. «Плюсы» предоставляют вам полную свободу действия, ограничивая вас лишь рамками разумного.


За всё существование Android было создано немало фреймворков и средств разработки для C++. Особенно хочется выделить широко известный Qt и IDE QtCreator, позволяющие разрабатывать кроссплатформенные приложения для Windows, Windows Phone, Windows RT, iOS, SailfishOS и Android (когда-то в этот список входил ещё и Symbian). Кроме того, вы получаете удобную библиотеку контейнеров, алгоритмов и шаблонов Tulip, впитавшую в себя всё лучшее из Java и Android. Ну и, наконец, вы получаете множество различных QT-модулей для высоко- и низкоуровневой работы с системой. Ваш покорный слуга кодит именно в связке C++ и Qt.

В прошлом году на конференции Windows: The Next Champter было уделено широкое внимание достаточно популярной среде разработки Visual Studio 2015. Одним из главных нововведений стала поддержка разработки приложений как под Windows Phone, так и под Android - Microsoft пыталась хоть как-то увеличить количество приложений для своей ОС.

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

Android разработка на C или C++ может показаться более простой чем на Java, но, несмотря на то, что язык предлагает вам полную свободу производимых действий и не ограничивает вас в ваших шагах, он имеет некоторые специфические особенности, на изучение которых уйдёт немало времени - недаром C++ сравнивают с нунчаками (превосходным оружием, которое, к сожалению требует огромного мастерства). Тем не менее разработка приложений под Android на C и C++ может оказаться занятным делом.

Необходимая документация:

Другие языки

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

Corona (LUA Script)


Подойдёт для создания игр и простых приложений
Если вам по каким-то причинам не хочется изучать Java или разбираться в построении интерфейса через XML, то вы можете выбрать для себя данное IDE. Corona - это достаточно легковесная среда разработки, код в которой необходимо писать на достаточно лёгком LUA (любители Pascal оценят по достоинству).

Данный тулкит поможет вам при написании простых 2D-игр, для коих здесь присутствуют библиотеки для 2D=объектов, звуков, сети и игрового движка. Созданные игры работают с OpenGL, что означает высокую эффективность. Отлично подходит для новичков, возможно, именно на нём вы сможете создать своё первое мобильное приложение на Android!


Необходимая документация:

Adobe PhoneGap (HTML5, JavaScript, CSS)


Подойдёт для создания нересурсоёмких приложений
Если вы уже знакомы с HTML, CSS и JavaScript, в качестве альтернативы вы можете попробовать PhoneGap. Это IDE позволит собирать полноценные приложения, разработанные на вышеупомянутых языках программирования и разметки.

На самом деле готовые приложения из PhoneGap представляют из себя простейшие WebView, оживлённые при помощи JavaScript. При помощи разнообразных API вы сможете использовать различный функционал устройства прямо как на нативных приложениях. Что интересно - приложения компилируются на сервере и затем уже доступны для использования на iOS, Android, Windows Phone, Web OS и BlackBerry OS. С такой широкой кроссплатформенностью разработка приложений может значительно ускориться.


Необходимая документация:

Fuse (JavaScript и UX)


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

Основная логика Fuse-приложений строится на JavaScript - простом и понятном языке с низким порогом вхождения. Интерфейсный же фундамент представляет UX-разметка - интуитивно понятная каждому. Ну а «плюшки» среды позволят вам применять изменения прямо во время работы приложения на вашем устройстве или эмуляторе - прямо как в Android Studio 2.0 и выше. С помощью Fuse разработка приложений для Android может оказаться несложной и приятной.

Необходимая документация:

Слова «под занавес»

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

Изучить новый язык и среду разработки - это минимум, что от тебя потребуется, если ты захочешь написать свое первое мобильное приложение. Чтобы с пониманием набросать элементарный todo list для Android или iOS, не передирая пример из книжки, уйдет не меньше пары недель. Но можно не осваивать Objective-C или Java и при этом быстро разрабатывать приложения для смартфонов, если использовать такие технологии, как PhoneGap.

Если ты внимательно изучал нововведения, которые ожидают нас в Windows 8, то, возможно, заметил, что под ней можно будет разрабатывать приложения на HTML5. Идея, на самом деле, не новая - технологии, реализующие тот же подход для мобильных платформ, развиваются семимильными шагами. Одним из таких фреймворков, позволяющим разрабатывать приложения для смартфонов с помощью связки привычных для нас HTML, JavaScript и CSS!, как раз и является PhoneGap. Написанное с его помощью приложение подойдет для всех популярных платформ: iOS, Android, Windows Phone, Blackberry, WebOS, Symbian и Bada. Тебе не нужно будет изучать особенности программирования под каждую платформу (например, Objective-C в случае с iOS), разбираться с различными API и средами разработки. Все, что потребуется для создания кросс-платформенного мобильного приложения, - это знание HTML5 и специального PhoneGap API. При этом на выходе получится не тупая HTML-страница, «обрамленная» в интерфейс приложения, нет! API фреймворка позволяет задействовать практически все возможности телефона, которые используются при разработке с помощью нативных инструментов: доступ к акселерометру, компасу, камере (запись видео и фотосъемка), списку контактов, файловой системе, системе нотификаций (стандартных уведомлений на телефоне), хранилищам и т. д. Наконец, такое приложение может безболезненно обращаться к любому кросс-доменному адресу. Ты можешь воссоздать нативные элементы управления с помощью фреймворков вроде jQuery Mobile или Sencha, и конечная программа будет выглядеть на мобильном телефоне так, как будто она написана на нативном языке (ну или почти так). Лучше всего проиллюстрировать вышесказанное на деле, то есть написать приложение, поэтому предлагаю сразу приступить к практике. Засекай время - на все про все уйдет едва ли больше получаса.

Что мы будем создавать

В качестве целевой платформы возьмем iOS - да-да, деньги лежат в AppStore, и монетизировать свои разработки пока лучше всего там:). Но сразу внесу ясность: все то же самое, без изменений, можно провернуть, скажем, для Android. Долго думал, какой пример рассмотреть, так как писать очередную тулзу для учета списка дел совершенно не хотелось. Поэтому я решил создать приложение под названием «Геонапоминалка», навигационную прогу, назначение которой можно описать одной фразой: «Сообщи мне, когда я снова тут окажусь». В AppStore есть немало утилит, которые позволяют «запомнить» место, где пользователь припарковал машину. Это почти то же самое, только чуть попроще. Ты сможешь указать на карте города точку, задать для нее определенный радиус и запрограммировать сообщение. Когда ты в следующий попадешь в пределы окружности с указанным радиусом, приложение выдаст тебе уведомление, а точка будет удалена. Будем действовать по такому плану: сначала создадим простое веб-приложение, проверим его в браузере, а затем перенесем с помощью PhoneGap на платформу iOS. Очень важно написать в прототипе и протестировать в браузере на компьютере основную часть кода, поскольку отлаживать приложение в телефоне гораздо сложнее. В качестве каркаса мы возьмем JS-фреймворк jQuery c jQuery Mobile (jquerymobile.com), а в качестве движка карт - Google Maps v3. Приложение будет состоять из двух страниц: карты и списка точек.

  • На карте устанавливается маркер твоего текущего положения. По клику на карте создается точка, к которой привязывается сообщение (вроде «машина рядом»). Точку можно удалить, кликнув на ней. Для перемещения маркера человека по карте используется геонавигационный API.
  • На странице со списком точек должна иметься дополнительная кнопка «Удалить все точки», а рядом с каждой точкой - кнопка «Удалить эту точку». Если кликнуть по элементу в списке, соответствующая точка отобразится на карте. Настройки пользователя и список точек будем сохранять в localStorage.

UI-фреймворки

jQuery Mobile - это, конечно, не единственный фреймворк для создания мобильного интерфейса. На сайте PhoneGap приведен огромный список библиотек и фреймворков, которые ты можешь использовать (phonegap.com/tools): Sencha Touch, Impact, Dojo Mobile, Zepto.js и др.

Каркас приложения

Сразу объясняю, зачем мы будем использовать jQuery Mobile. Эта JS-библиотека предоставляет нам уже готовые элементы интерфейса мобильного приложения (максимально приближенные к нативным) для самых разных платформ. Нам ведь надо, чтобы на выходе было именно мобильное приложение, а не страничка из браузера! Так что качаем последнюю версию JQuery Mobile (jquerymobile.com/download) и переносим в рабочую папку первые файлы приложения, которые нам понадобятся:

  • images/ (перенеси сюда все изображения из одноименной папки архива jq-mobile);
  • index.css;
  • index.html;
  • index.js;
  • jquery.js;
  • jquery.mobile.min.css;
  • jquery.mobile.min.js.

Нужно сделать ресурсы в основном локальными, чтобы пользователь в будущем не тратил мобильный интернет. Теперь создаем каркас страниц в файле index.html. Приведенный ниже код описывает верхнюю часть страницы с картой, надписью «Геонапоминалка» и кнопкой «Точки».

Страница с картой

Геонапоминалка

Точки

Атрибут страницы data-dom-cache=»true» необходим для того, чтобы она не выгружалась из памяти. Для кнопки «Точки» используется data-transition=»pop», чтобы страница «Список точек» открывалась с эффектом «Всплытие». Подробнее о том, как устроены страницы jQuery Mobile, можно почитать в хорошем мануале (bit.ly/vtXX3M). По аналогии создаем страницу со списком точек:

Страница со списком точек

Удалить все

Точки

Карта

Для кнопки «Карта» тоже пропишем data-transition=»pop», но добавим атрибут data-direction=»reverse», чтобы страница «Карта» открывалась с эффектом «Затухание». Те же атрибуты пропишем в шаблоне точки. Все, наш каркас готов.

Создание приложения

Теперь надо отобразить карту, для чего мы возьмем стандартный API Google Maps, который используется миллионами разных сайтов:

Var latLng = new gm.LatLng(this.options.lat, this.options.lng); this.map = new gm.Map(element, { zoom: this.options.zoom, // Выбираем начальный зум center: latLng, // Устанавливаем начальный центр mapTypeId: gm.MapTypeId.ROADMAP, // Обычная карта disableDoubleClickZoom: true, // Отключаем автозум по тапу/двойному клику disableDefaultUI: true // Отключаем все элементы интерфейса });

Здесь Gm - это переменная, ссылающаяся на объект Google Maps. Параметры инициализации я хорошо закомментировал в коде. Следующий шаг - отрисовка маркера человечка на карте:

This.person = new gm.Marker({ map: this.map, icon: new gm.MarkerImage(PERSON_SPRITE_URL, new gm.Size(48, 48)) });

В качестве PERSON_SPRITE_URL используется адрес спрайта человечка из Google-панорам. Его статический адрес - maps.gstatic.com/mapfiles/cb/mod_cb_scout/cb_scout_sprite_api_003.png . Пользователь будет добавлять точки, кликая на карте, поэтому, чтобы их отрисовывать, мы будем слушать событие click:

Gm.event.addListener(this.map, "click", function (event) { self.requestMessage(function (err, message) { // Метод, возвращающий текст, введенный пользователем if (err) return; // Метод добавляет точку в список активных и // отрисовывает ее на карте self.addPoint(event.latLng, self.options.radius, message); self.updatePointsList(); // Перерисовываем список точек }); }, false);

Я привожу бОльшую часть кода - остальное ищи на диске. Дальше нам нужно научить приложение перемещать иконку пользователя по карте. В прототипе мы задействуем Geolocation API (тот, который используется в том числе в десктопных браузерах):

If (navigator.geolocation) { // Проверяем, поддерживает ли браузер геолокацию function gpsSuccess(pos) { var lat, lng; if (pos.coords) { lat = pos.coords.latitude; lng = pos.coords.longitude; } else { lat = pos.latitude; lng = pos.longitude; } self.movePerson(new gm.LatLng(lat, lng)); // Перемещаем иконку пользователя } // Каждые три секунды запрашиваем текущее // положение пользователя window.setInterval(function () { // Запрашиваем текущее положение navigator.geolocation.getCurrentPosition(gpsSuccess, $.noop, { enableHighAccuracy: true, maximumAge: 300000 }); }, 3000); }

Метод movePerson с помощью простой процедуры getPointsInBounds() проверяет, не находится ли пользователь в какой-нибудь активной точке. Последний вопрос - где хранить список точек? В HTML5 появилась возможность использовать localStorage, так что не будем ей пренебрегать (предоставляю тебе самостоятельно разобраться с этими участками кода, которые я хорошо закомментировал). Итак, приложение, работающее в браузере, готово!

Запуск веб-приложения

Как я уже говорил, отладку в основном необходимо выполнять на компьютере. Самый подходящий браузер для тестирования веб-приложений на компьютере - это Safari или Chrome. После отладки в этих браузерах ты можешь быть уверен в том, что твое приложение не «поедет» в браузере мобильного телефона. Оба этих браузера совместимы с большинством мобильных веб-браузеров, поскольку точно так же, как и они, построены на основе движка WebKit. После устранения всех багов можно переходить к запуску мобильного веб-приложения непосредственно на телефоне. Для этого настрой свой веб-сервер (пусть даже Denwer или XAMPP), чтобы он отдавал созданную страницу, и открой ее уже в браузере мобильного телефона. Приложение должно выглядеть примерно так, как показано на рисунке. Тут важно понимать, что будущее мобильное приложение, собранное для мобильной платформы с помощью PhoneGap, будет выглядеть почти один в один, за исключением того, что на экране не будет отображаться навигационная панель браузера. Если все хорошо, можно приступать к созданию из странички полноценного iOS-приложения. Заметь, что PhoneGap и IDE для мобильной разработки мы до этого момента даже не трогали.

Подготовка

Для того чтобы собрать приложение под iOS, тебе нужен компьютер с операционной системой Mac OS 10.6+ (или виртуальная машина на Mac OS 10.6), а также среда разработки Xcode с установленным iOS SDK. Если у тебя не установлен SDK, придется скачать с сайта Apple образ диска, включающий в себя Xcode и iOS SDK (developer.apple.com/devcenter/ios/index.action). Имей в виду, что образ весит около 4 Гб. Кроме этого, тебе понадобится зарегистрироваться на сайте Apple в качестве разработчика (если ты не собираешься публиковать свое приложение в AppStore, то это требование можно обойти). С помощью этого набора можно разрабатывать приложения на нативном для iOS языке Objective-C. Но мы решили пойти обходным путем и воспользоваться PhoneGap, поэтому нам еще нужно установить пакет PhoneGap iOS. Просто скачай архив с офсайта (https://github.com/callback/phonegap/zipball/1.2.0), распакуй его и в папке iOS запусти программу установки. Когда установка завершится, в меню проектов Xcode должна появиться иконка PhoneGap. После запуска придется заполнить несколько форм, но уже очень скоро ты увидишь рабочую область IDE с твоим первым приложением. Чтобы проверить, все ли работает, нажми кнопку Run - должен запуститься эмулятор iPhone/iPad с шаблонным приложением PhoneGap. Собранная программа выдаст ошибку с сообщением о том, что index.html не найден, - это нормально. Открой папку, в которой ты сохранил первичные файлы проекта, и найди в ней подпапку www. Перетащи ее в редактор, кликни на иконке приложения в списке слева и в появившемся окне выбери «Create folder references for any added folders». Если запустить программу еще раз, то все должно заработать. Теперь можно скопировать все файлы нашего прототипа в папку www. Пора подпилить наш прототип для работы на смартфоне в обработке PhoneGap.

Перенос прототипа

В первую очередь нужно подключить phonegap-1.2.0.js в твой индексный файл. PhoneGap позволяет ограничивать список доступных для посещения хостов. Предлагаю сразу настроить такой «белый список». В меню проекта открой Supporting Files/PhoneGap.plist, найди пункт ExternalHosts и добавь в него следующие хосты, к которым будет обращаться наше приложение (это сервера Google Maps): *.gstatic.com, *.googleapis.com, maps.google.com. Если их не указать, программа выдаст предупреждение в консоли и карта не отобразится. Для инициализации веб-версии нашего приложения мы использовали событие DOMReady или хелпер jQuery: $(document).ready(). PhoneGap генерирует событие deviceready, которое говорит о том, что мобильное устройство готово. Предлагаю этим воспользоваться:

Document.addEventListener("deviceready", function () { new Notificator($("#map-canvas")); // Если у пользователя нет интернета, // сообщаем ему об этом if (navigator.network.connection.type === Connection.NONE) { navigator.notification.alert("Нет интернет-соединения", $.noop, TITLE); } }, false);
Запретим скроллинг: document.addEventListener("touchmove", function (event) { event.preventDefault(); }, false);

Затем заменим все вызовы alert и confirm на нативные, которые предоставляет нам PhoneGap:

Navigator.notification.confirm("Удалить точку?", function (button_id) { if (button_id === 1) { // Нажата кнопка OK self.removePoint(point); } }, TITLE);

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

Navigator.geolocation.watchPosition(function (position) { self.movePerson(new gm.LatLng(position.coords.latitude, position.coords.longitude)); }, function (error) { navigator.notification.alert("code: " + error.code + "\nmessage: " + error.message, $.noop, TITLE); }, { frequency: 3000 });

Этот код более изящный - он генерирует событие только тогда, когда координаты изменились. Жмем кнопку Run и убеждаемся, что только что созданное нами приложение отлично работает в симуляторе iOS-устройства! Пора приступать к запуску на реальном устройстве.

Запуск на устройстве

Подсоедини iPhone, iPod или iPad к компьютеру, на котором запущен Xcode. Программа определит новое устройство и попросит разрешения использовать его для разработки. Нет смысла ей отказывать:). Повторю еще раз: чтобы запустить написанное приложение на iOS, необходимо быть авторизированным разработчиком iOS (другими словами, быть подписанным на iOS Developer Program). Этим придется заморочиться только в случае разработки приложений для продукции Apple, с другими платформами (Android, Windows Phone) все намного проще. У тех, кто обучается в вузе, есть шанс получить доступ к программе бесплатно благодаря каким-нибудь льготам. Все остальные должны платить $99 в год для участия в программе. Apple выдает сертификат, которым ты сможешь подписывать свой код. Подписанное приложение разрешается запускать на iOS и распространять в App Store. Если ты не студент, а $99 для невинных экспериментов тебе пока жалко, то есть и другой способ - обмануть систему. Ты можешь создать самоподписанный сертификат для верификации кода и запустить мобильную программу на джейлбрейкнутом iOS-устройстве (не буду на этом останавливаться, потому что все максимально подробно расписано в этой статье: bit.ly/tD6xAf). Так или иначе, ты вскоре увидишь работающее приложение на экране своего мобильного телефона. Останавливай секундомер. Сколько времени у тебя на это ушло?

Другие платформы

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

Appcelerator Titanium (www.appcelerator.com).

Titanium умеет собирать приложения в первую очередь под Android и iPhone, но в нем также заявлена поддержка BlackBerry. Кроме самого фреймворка, проект предоставляет набор нативных виджетов и IDE. Ты можешь разрабатывать приложения на Titanium бесплатно, однако за поддержку и дополнительные модули придется заплатить (от $49 в месяц). Цена некоторых сторонних модулей доходит до $120 за год. Разработчики Appcelerator Titanium утверждают, что на основе их фреймфорка написано более 25 тысяч приложений. Исходный код проекта распространяется под лицензией Apache 2.

Corona SDK (www.anscamobile.com/corona).

Эта технология поддерживает основные платформы - iOS и Android. Фреймворк нацелен в основном на разработку игр. Еще бы, ведь разработчики заявляют о высококачественной оптимизации на OpenGL. Бесплатной версии у платформы нет, а цена довольно-таки кусачая: $199 в год за лицензию для одной платформы и $349 в год для iOS и Android. Corona предлагает свою IDE и эмуляторы устройств. Приложения под Corona пишут на языке, похожем на JavaScript.

Заключение

Мы создали простое мобильное веб-приложение и в несколько простых шагов портировали его на платформу iOS с помощью PhoneGap. Мы не написали ни строчки кода на Objective-C, но получили программу приличного качества, потратив минимум времени на перенос и изучение API PhoneGap. Если ты предпочитаешь другую платформу, например Android или Windows Mobile 7, то ты так же легко, без каких-либо изменений под эти платформы, сможешь собрать наше приложение (для каждой из них есть хороший вводный мануал и видеоурок: phonegap.com/start). Чтобы убедиться в состоятельности платформы, можно посмотреть на уже готовые приложения на PhoneGap, которые разработчики технологии собрали в специальной галерее (phonegap.com/apps). По факту PhoneGap - это идеальная платформа для создания как минимум прототипа будущего приложения. Ее главными преимуществами являются быстрота и минимум затратат, чем активно пользуются стартапы, которые во всех отношениях ограничены в ресурсах. Если приложение попрет, а внутренности на HTML+JS тебя по какой-то причине перестанут устраивать, всегда можно будет портировать приложение на нативный язык. Не могу не сказать, что PhoneGap изначально разрабатывался компанией Nitobi как открытый проект (репозиторий располагается на GitHub: github.com/phonegap). Исходники и дальше будут оставаться открытым, хотя в октябре прошлого года компанию Nitobi купил Adobe. Нужно ли говорить, какие перспективы появляются у проекта при поддержке в лице такого гиганта?