Разработка под Windows Phone 7 для Android-разработчиков

Автор оригинала: Chris Bennett
  • Перевод
Разработка приложений под платформу Windows Phone 7 похожа на разработку под платформу Android больше, чем вы могли ожидать. В этой статье Крис Беннетт исследует сходства между этими двумя платформами.

Также, как и мобильные приложения для платформы Android, приложения для Windows Phone 7 написаны на управляемом языке – Java для Android и C# для Windows Phone 7 – с сопроводительными библиотеками. Многие разичия между Java и C# связанны со стилем. Два современных языка имеют общее происхождение от языков C/C++ и имеют сильное сходство друг с другом.

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

Различия между платформами


Прежде чем углубиться в конкретные инструменты и процессы портирования и/или создания приложений для Windows Phone 7, давайте начнем с терминологии и технологических различий между Windows Phone 7 и Android. Первое большое отличие состоит в том, что приложения для Windows Phone 7 создаются как управляемые .NET сборки, написанные на C#. Платформа поддерживает два типа приложений: Silverlight и XNA игры.
Большинство приложений для Windows Phone 7 создаются с использованием Silverlight, который предоставляет основанный на формах (form-based) способ взаимодействия с пользователем через стандартные элементы управления, такие как надписи, текстовые поля, списки и т.д. Аналогом в Silverlight для Android Layout и сопровождающего его Activity является Page.
Другим типом приложения, поддерживаемого Windows Phone 7, является XNA, который позволяет разработчикам создавать 2D и 3D игры. Это эквивалент Android SurfaceView и GLSurfaceView для 2D и 3D соответственно. В отличие от Android, который ориентирован на использование OpenGL для игр, игры XNA используют Direct3D, что делает проще процесс портирования игр с платформ PC и Xbox 360.

Pages и Navigation


Silverlight Pages создаются в виде XML-файлов, также как и Android Layouts. Для описания Page в XML-файле используется XAML (Extensible Application Markup Language). XAML похож на Android Layout, но он обладает более широким диапазоном возможностей. XAML позволяет разработчикам реализовывать действия, связанные с Page, в том числе анимацию, привязку данных и многое другое, что позволяет уменьшить количество необходимого кода.
Android Layout отделен (decoupled) от Activity, используемого для выполнения действий. В итоге, вы вынуждены писать код для того, чтобы связать Activity с соответствующими элементами пользовательского интерфейса (UI). C# код для конкретного Page уже привязан к элементам UI и такой необходимости просто нет. Платформа автоматически создает необходимые «привязки» для объектов и событий для Page и пользовательского интерфейса. Это предотвращает беспорядок, обычно происходящий в методе OnCreate каждой задачи, где вы создаёте привязки к UI и различные необходимые обработчики.
Другим важным различием между платформами является навигация. В Android вы переключаетесь с одной задачи на другую, создавая Intent. Аналогом в Windows Phone 7 является Navigation, который позволяет перемещаться между различными Pages. Как и в Android Intent, вы можете передать данные Page, к которому вы перемещаетесь. Page в Windows Phone 7 обладает некоторыми свойствами, похожими на ASP.net Page. Например, обычно используется QueryString для того, чтобы передать информацию следующему Page.

Преобразование Layouts в Pages


Перед погружением в код, нам нужно посмотреть на преобразование Android Layout XML в Windows Phone 7 XAML Pages. Конечно, одним из достоинств бесплатных инструментов для Windows Phone 7 является качество дизайнереских инструментов, доступных для XAML. Дизайнер XAML, включенный в Visual Studio 2010 предназначен для использования в основном разработчиками, чтобы получить основные элементы управления для Page и начать разработку. Expression Blend предназначен для создания профессионального дизайна с более продвинутым набором инструментов для совершенствования пользовательского интерфейса. Как и в случае с Android Layout, вы всегда можете прибегнуть к редактированию XAML непосредственно в текстовом редакторе, так как это обычный XML-файл.
Windows Phone 7 Page предоставляет элементы разметки и управления, сходные с Android Layout. В следующей таблице показаны аналоги для обеих платформ.

Элементы разметки
Windows Phone 7 Android
Canvas AbsoluteLayout
Grid GridView
ScrollView ScrollView
StackPanel LinearLayout
Как вы можете видеть, Windows Phone 7 предоставляет те же самые возможности для создания разметки. В следующей таблице приведен перечень основных элементов управления.

Основные элементы управления
Windows Phone 7 Android
TextBlock TextView
TextBox EditText
Button Button
CheckBox CheckBox
RadioButton RadioButton
Image ImageView
ProgressBar ProgressBar
ListBox ListView
Map MapView
WebBrowser WebView
Обратите внимание, Windows Phone 7 имеет однозначные соответствия для базовых элементов разметки и управления. Но для некоторых из специализированных элементов разметки и управления соответствия не существует. Причина этого лежит в богатых возможностях XAML, который дает возможность очень легко вставлять элементы управления друг в друга. Таким образом можно, например, добавить список (ListBox) с флажками (CheckBoxes) рядом с каждым элементом без необходимости писать какой-либо код. Это означает, что вам не нужны все эти сложные идущие в комплекте элементы управления, они могут быть созданы и изменены в пределах вашего приложения.

Хранение данных


Хранение данных – это большая часть задачи при разработке большинства мобильных приложений. В Windows Phone 7 идея заключается в использовании облачных сервисов в качестве основного средства хранения данных. На первый взгляд это может вам показаться немного странным, но если вы создаёте приложение-клиент для вашего сайта, это имеет смысл. Если вы не собираетесь идти по этому пути, то у вас есть два варианта: использовать для хранения коммерческие сервисы, такие как Windows Azure или использовать локальный интерфейс IsolatedStorage. IsolatedStorage позволяет хранить файлы для использования только вашим приложением.
В зависимости от способа хранения данных в вашем приложений, возможно, вы захотите хранить данные локально без необходимости создавать и использовать базу данных. Например, если вы создаёте RSS / Podcast приложение можно просто хранить XML из канала RSS. Если вам необходимо получить доступ к данным, просто загрузите данные и используйте LINQ (Language Integrated Query), чтобы получить конкретные данные.
В примере с RSS приложением, мы можем либо работать с исходным XML из канала RSS или мы могли бы использовать LINQ для XML, чтобы создать XDocument для хранения записей, как показано ниже:
  1. //Create XML
  2. XDocument doc = new XDocument();
  3.   doc.Add(new XElement("DataRoot",
  4.      new XElement("Record",
  5.          new XElement("value","data1")),
  6.      new XElement("Record",
  7.          new XElement("value","data2"))
  8.      ));
* This source code was highlighted with Source Code Highlighter.

XML, сгенерированный этим простым фрагментом кода, выглядит следующим образом:
  1. <DataRoot>
  2.   <Record>
  3.      <value>data1</value>
  4.   </Record>
  5.   <Record>
  6.      <value>data2</value>
  7.   </Record>
  8. </DataRoot>
* This source code was highlighted with Source Code Highlighter.

Чтобы сохранить этот XML в изолированном хранилище мы используем IsolatedStorageFile с IsolatedStorageFileStream, как показано в следующем фрагменте:
  1. //Save the XML
  2. using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
  3. {
  4.   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
  5.   {
  6.      doc.Save(file);
  7.  
  8.      file.Close();
  9.   }
  10. }
* This source code was highlighted with Source Code Highlighter.

Как вы можете видеть, очень просто реализовать хранение XML-данных в изолированном хранилище. Код для получения XML и создания LINQtoXML-запроса показан ниже:
  1. //Load the XML
  2. using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
  3. {
  4.   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
  5.   {
  6.      XDocument d = XDocument.Load(file);
  7.  
  8.      var query = from r in d.Root.Elements("Record")
  9.                         select r;
  10.  
  11.  
  12.      //Process the list of record
  13.  
  14.   }
  15. }
* This source code was highlighted with Source Code Highlighter.

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

Инструменты разработки


Как Android-разработчик вы, скорее всего, привыкли к хорошей и плохой стороне open-source разработки. Использование IDE Eclipse для Android, конечно, часть хорошей стороны. Но Android Development Toolkit (ADT) не хватает многих необходимых инструментов, таких, как надлежащие инструменты разметки. Хотя ADT, на самом деле, предоставляет подобные инструменты, но они не являются достаточно надежными, чтобы вы смогли легко создать разметку – скорее всего, вам придётся погружаться в XML.
Microsoft предоставляет надежные инструменты для разработки на протяжении уже многих лет. И платформа Windows Phone 7 не стала исключением. Microsoft, как обычно, позволяет просто и недорого сразу начать разработку. Java-разработчики могут скачать и попробовать эти инструменты, не тратя денег.
В настоящее время на create.msdn.com доступны следующие инструменты:
  • Microsoft Visual Studio 2010 Express for Phone
  • Microsoft Expression Blend for Phone
  • Microsoft XNA Game Studio for Phone
Эти три инструмента позволят вам бесплатно начать создавать приложения для Windows Phone 7.
Microsoft Visual Studio 2010 Express for Phone является основной комплексной средой разработки (IDE), используемой для создания приложений для Windows Phone 7. Она включает в себя все инструменты, которые вам нужны для создания приложений, в том числе инструмент для создания разметки Page, компилятор С #, эмулятор Windows Phone 7 и многое другое.
Microsoft Expression Blend for Phone является инструментом, ориентированным прежде всего на профессиональных дизайнеров и используется для совершенствования Pages в Silverlight-приложении. Разработчики могут использовать этот инструмент для создания страниц с нуля или улучшать Pages уже существующего приложения, не затрагивая его код.
Microsoft XNA Game Studio for Phone предоставляет набор инструментов, необходимых для создания 2D и 3D игр для платформы. Studio также включает XNA Framework, а также инструменты, необходимые для включения аудио и графики, необходимой при создании закольцованных (loop-based) игр.

Заключение


Windows Phone 7 предлагает новый подход к операционной системе для смартфонов, но она по-прежнему основана на проверенных технологиях, таких как Silverlight, WPF, C# и многие другие. Как вы могли увидеть из этой статьи различия между Android и Windows Phone 7 не так уж и велики.

UPD: Я опубликовал перевод этой статьи с целью показать, что изучить разработку под платформу Windows Phone 7 не так сложно, если уже имеется опыт разработки под Android. Здесь не говорится о том, что какая-то из этих мобильных платформ лучше или хуже.
Пожалуйста, не загоняйте мою карму в минус, чтобы я смог опубликовать другие статьи по разработке под Windows Phone 7. Если вам это не интересно, проходите мимо, не лишайте возможности узнать что-то новое тех, кому это интересно.
Поделиться публикацией

Комментарии 43

    +4
    Спасибо!
    Жду ещё статей на тему wp7dev.
      +5
      Интересно, за что мне давят карму?
      Только порадовался с утра, что мне некто добавил +1 в карму и скоро смогу выложить свою статью по ассемблеру, нет же, добрые люди увели за благодарность автору за сравнение отдельных вопросов WP7/Android карму в -4.
      Если, даже, этот пост реклама, то мне было интересно её прочитать (и лично для себя не заметил никакого рекламного тона в статье).
        +6
        основной контенгент Хабра — маководы и люниксоиды (в статистике можете посмотреть)… а у них «религиозная» непереносимость к всему что связанно с Microsoft и его продуктами…

        Не обращайте внимания) привыкните)
          +5
          Не понимаю, к чему эта религиозность. У меня на компьютере стоит Windows, на ноутбуке Ubuntu, на телефоне Android, на плеере iOS. Мне одинаково нравится работать в Visual Studio и IDEA.
          Пользуйтесь тем, что удобно.

          При этом каждая статья, касающаяся технологий Microsoft, стабильно снижает карму на 3-5 пунктов, не смотря на большое количество плюсов.
          И да, мне НРАВЯТСЯ возможности, которые Microsoft предоставляют для разработчиков.
            –6
            На самом деле у пользователей виндовс тоже потреблядское отношение и религиозная непереносимость ко всему что можно получить бесплатно. Но на это тоже со временем перестаёшь обращать внимание.

            И да, КЛБ.
              –3
              Сочетание названия блога и оценки за комментарий как бы подтверждает мысль.
              +2
              основной контенгент Хабра — маководы и люниксоиды (в статистике можете посмотреть)…

              Где можно посмотреть? Тут нету, тут тоже.
          +7
          Честно, стиль статьи очень похож на рекламу
            +7
            Там под статьёй вот такая пометка:
            "* This article was commissioned by and prepared for Microsoft Corporation."
            "* Эта статья была заказана и написана для Microsoft Corporation"

            Так что тут вы правы. Мне статья показалась полезной, поэтому я её перевёл.
              +4
              Я думаю, что Вам стоило бы сохранить эту пометку.
            0
            Интересное совпадение. Сейчас нахожусь на конференции it2days и там как раз рассказывают про разработку для wp7.
              +4
              Какая-то однобокая статья. Например, не сказано, что у Android есть встроенная поддержка базы данных SQLite для локального хранения информации. Т.е. статья выглядит так, как будто все то, что есть в Android, есть и в Windows Phone 7, хотя это не так.
                –1
                Какой-то однобокий и глупый коментарий, человека который ничерта не знает о Silverlight как о платформе, но умудряеться что-то говорить о нем. Это мода такая? Я ничего не знаю, но выскажусь?

                siaqodb.com/
                code.google.com/p/csharp-sqlite/
                winphone7db.codeplex.com/

                и это так… на вскидку…

                PS: пользуйтесь поиском прежде чем что-то заявлять, а то в глупой ситуации можете оказаться…
                  +2
                  Мне кажется, есть небольшая разница между встроенной в Android framework поддержкой баз данных и использование сторонних библиотек для Windows phone 7. В статье речь шла про базовую функциональность. Поправьте, если я ошибаюсь.
                    +3
                    Я думаю что gridem имел ввиду что вся статья идет на сравнении «вот в wp7 есть то же что в андроиде», а по теме «Хранение данных» указан только вариант хранения в wp7 такими выражениями, которые наталкивают на мысль что в Андроиде нет встроенной работы с БД.
                      0
                      Во-первых, в статье не слово не сказано о «локальной» базе данных.

                      Во-вторых, в статье говориться про «Isolated Storage», если вы программировали под Android то должны знать про «openFileOutput, openFileInput, Context.MODE_PRIVATE», это фактически и являеться аналогом «Isolated Storage»

                      developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int%29

                      В-третих, все остальное являеться вашими «мыслями» и «домыслами», и говорить "… как будто все то, что есть в Android, есть и в Windows Phone 7, хотя это не так", тоесть заявлять что в Windows Phone 7 чегото нет, при этом не зная Silverlight — не только опрометчиво, но и глупо.
                        +2
                        Еще раз хочу обратить ваше внимание что для человеку слабо знакомому с программированиием на одной или обоих платформах без комментария gridema про SQLite покажется именно то что в Андроиде нет инструментов по работе с БД, возможно это повлияет на выбор платформы для разработки.
                        Короче говоря статья помимо фактов содержит еще некорректный рекламный контекст, хотя возможно это было сделано и непреднамерено.
                          +3
                          Просто процетирую еще раз что сказал gridema

                          >> Т.е. статья выглядит так, как будто все то, что есть в Android, есть и в Windows Phone 7,
                          >> хотя это не так.

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

                          — PS (небольшой оффтоп): Вы кстати все «дурацкие» высказывания защищаете? Если так… то почему не заступаетесь за меня? :)

                          Нет, ну честно, мне смешно вас читать, из ваших слов получается, что «неграмотный» коментарий сделанный явно не экспертом, по программированию на данных платформах… сделал ПОЛЕЗНОЕ ДЕЛО… вам в политику надо податся, у вас явно талант…

                          Какой еще рекламный «контекст»? Где тут хоть одно плохое слово про Android. Или теперь для «фанатов» сравнение это уже оскорбление? Вам самому не смешно? О_О
                            0
                            Успокойтесь уже. На выбор платформы для разработки в конечном итоге повлияет только её распространенность, т.е количество потенциальных юзеров.
                              0
                              Я просто объяснял то, что показалось мне. Кроме того, я точно не являюсь фанатом программирования под Андроид, поэтому и подумал что не только мне может подобное показаться.

                              0
                              Видимо подразумевается, что человек, читающий статью под названием «Разработка под Windows Phone 7 для Android-разработчиков», знает что есть в Андроиде, а чего нет.
                      –2
                      Какое может быть сходство в разработке, если языки разные. А то что элементы называются похоже, ну так они на то и одинаковые, чтобы не называться по-разному.
                        0
                        Минусующим коммент, я например на Java пишу, а на C# — нет. Для меня сходства маловато будет для легкого перехода.
                          0
                            0
                            Пока не попросят, писать на C# не начну :) Главное чтобы ТСД на WP7 вдруг не перевели. Как WP7 и WinCE связаны? Unmanaged-код писать-то можно?
                        +1
                        Мне всегда нравились такие сравнения. Они помогают не только перейти с Android на WP7, но и наоборот, с WP7 на Android (:
                          –3
                          У вас смайлик не по-русски написан.
                            +2
                            Статья дает толчок, что типа все прекрасно, ребята, идите к нам. А уже там глубже выясняется, что все далеко не так радужно с портированием, как нам расписывают. Примером этому может служить «разнообразие» стандартного софта в MS Marketplace. Все те продукты, к которым привыкли пользователи Android/iOS/WinMo/Symbian, тут просто отсутствуют.
                            Я конечно понимаю, что рынок — молодой. Но вот, к примеру, написать современный мессенджер, задача не из легких в WP7, т.к. все современные системы поддерживают многозадачность, которая гарантирует связь мессенджера с сервером, а тут мы имеем что-то среднее между полноценными пуш-уведомлениями и отсутствием связи, как таковой. Иными словами, мессенджер постоянно теряет сессию, его нужно постоянно проверять, чтобы он был бы онлайн и т.п. подобные прелести.
                              +2
                              Вы еще забыли упомянуть, что WP7 (официально) поддерживает только HTTP протокол. Приходится использовать промежуточный сервер, а нагрузка сами-знаете…
                            +2
                            Хорошая статья. Правда у меня изучение шло в обратном направлении. Сначала я изучал WP7, а сейчас больше изучаю Android. Тоже находил много общего и даже начал составлять для себя такую же табличку схожести. Возможно это дело привычки, но программирование под WP7 понятнее и логичнее что-ли, а вот сама система Android нравится больше — ближе по духу.
                              +2
                              Я сам программирую под Android, тестирую и отлаживаю приложение на своём nexus'е. Так что я из того же лагеря:) Появилось желание изучить и WP7, благо с C# и .NET знаком. Наверно, полезно знать, как написать своё мобильное приложение под любую из популярных платформ. Да и на фриланс-биржах заказчики нередко требуют реализацию сразу для всех платформ.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                +2
                                Это мнение «очередного эксперта»?
                                  0
                                  Британских учёных.
                                0
                                На мой взгляд статье недостаёт раздела, в котором подробно сравнивается процесс продаж через Android Market и Microsoft Store. Со всеми шагами, регистрация, публикация, комиссии, вывод средств.
                                  0
                                  Тогда статья должна была бы называться «Организация продаж под Windows Phone 7 для Android-разработчиков», не так ли?
                                    0
                                    Я думаю, что более полное содержание статьи более важно для достижения той цели, которую ставит Microsoft, привлекая в свои ряды Android-разработчиков.

                                    Если мы говорим не об энтузиастах-программистах, то конечная цель — это прибыль. Какую выгоду получат Android-программисты, начав работать с Windows Phone 7. Сравнение трудозатрат на организацию продаж — важная часть этой картины.

                                      0
                                      Я не то чтобы не согласен насчет продаж и прочих способов конвертировать прямоту рук и извилистость мозга в улучшение жизни, напротив, многие тут этим живут. Но, сдается мне, цель статьи — показать, что не так страшен черт, как его Малевич - писать под WP7 не сложнее, чем под Андроид.

                                      А если еще про продажи тут писать — представляете, сколько «экспертов» и «защитников свободы» набежит?
                                  +1
                                  Нужно поставить поставить систему от микрософт, sdk от него же. Заплатить деньги за то и другое и ещё за право писать программы для их устройств и ради чего? Свободные приложения запрещены, да и смысл писать их заплатив деньги за всё это? Платные? Пользователей нет, система недоделана. Лучше написать прогу для того-же эпла в этом случае. Пусть уж микрософт проплатит статью: wp7 для IOS разработчиков.
                                    0
                                    1. Средства разработки бесплатны для всех. ОС бесплатна для студентов по DreamSpark.
                                    2. За право публиковать приложения нужно заплатить $100 в год. Бесплатно для студентов.
                                    3. Бесплатные приложения более чем разрешены
                                    4. Почему не написать одну и ту же прогу и для эпла, и для WP7?
                                      0
                                      1. Возможно, уже давно не слежу. Уже не студент, сколько стоит Win7 чтобы можно было разрабатывать?
                                      2. Ага, $100 в год, не студент.
                                      3. Бесплатные разрешены, свободные запрещены. Есть разница.
                                      4. Потому что, для эпла нужен МакОс, для WP7 Windows. Да и зачем? Лучше тогда две проги написать для эпла если есть любовь к walled garden.
                                        0
                                        1. Цены на Win7 устанавливаются продавцами — посмотрите на Softkey или Allsoft например. Подойдет любая версия
                                        2. Да, заработать можно в разы больше
                                        3. Что именно вы хотите сделать?
                                        4. Решение за вами. Сейчас на WP7 marketplace 12500 приложений.
                                          0
                                          Нет свободных лицензий кроме GPL и Столлман пророк его?

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

                                    Самое читаемое