Как установить Android-приложения на Windows Phone
Компания Microsoft в рамках проекта Astoria разработала простой способ запуска Android-приложений на мобильных устройствах под управлением Windows 10. Вчера файлы проекта попали в Сеть, и теперь любой пользователь может установить apk-файл программы на свой Windows Phone.
Компания Microsoft в последнее время прикладывает большие усилия для популяризации своей мобильной платформы, но особыми успехами похвастаться, увы, не может. Все потуги маркетологов и программистов разбиваются о заколдованный круг, в котором оказался Windows Phone: «пользователи не приходят из-за скудного выбора приложений, а разработчики игнорируют из-за малого количества пользователей».
Однако с выходом Windows 10, которая, как известно, будет универсальной системой для всех платформ, всё может измениться. В Microsoft придумали кардинальный выход из ловушки, в которой оказались их мобильные устройства. Проект Astoria — это специальный инструмент для разработчиков, который призван максимально облегчить портирование и запуск Android-программ на мобильных устройствах под управлением Windows.
Презентация этого проекта намечалась на осень 2015 года вместе с финальным релизом Windows 10 Mobile. Однако что-то пошло не так, и вчера документация и файлы Project Astoria утекли в Сеть. И вот какая интересная информация стала достоянием общественности:
- Project Astoria позволит пользователям Windows 10 Mobile беспрепятственно устанавливать Android-приложения в том случае, если они не используют в своей работе сервисы Google Play. В противном случае разработчикам всё же потребуется выполнить небольшую модификацию.
- Наряду с Windows, Project Astoria SDK будет доступен также для Mac, но позднее.
- Для установки apk-файла приложения понадобится Java JDK (1.7 или старше), Android Studio и умение работать с Android Debug Bridge (adb).
- В настоящее время поддерживается ограниченный перечень устройств, но в дальнейшем он будет расширен. Вот этот список: Nokia Lumia 920, Nokia Lumia 925, Nokia Lumia 929 (icon), Nokia Lumia 830, Nokia Lumia 930, Nokia Lumia 1020, Nokia Lumia 1520, Nokia Lumia 635, Nokia Lumia 730, Nokia Lumia 820, Nokia Lumia 435, Nokia Lumia 928.
Некоторые любопытные пользователи уже успели опробовать выложенные в Сеть инструменты и установили Android-приложения на устройства под управлением Windows 10 Mobile. Оказалось, что процесс этот очень прост и доступен практически любому продвинутому пользователю. Вы сможете увидеть подробное пошаговое руководство в следующем видео. Ссылки на необходимые файлы приводятся в комментариях к этому ролику на YouTube.
Эта новость не может не порадовать всех обладателей мобильных гаджетов под управлением операционной системы от компании Microsoft. Наконец-то они смогут устанавливать любые необходимые им программы и перестать завидовать богатству выбора у конкурентов. Однако сможет ли это спасти платформу Windows Mobile? Предлагаем высказать своё мнение в комментариях.
Портирование и локализация приложения на Windows Phone 8
В предыдущей статье я рассказал как разработать судоку для windows 8.1, в этой расскажу как портировать приложение на Windows Phone 8 и локализовать его на несколько языков.
Для начала создаем проект шаблона Windows Phone
В этом решении я скопировал необходимые элементы управления из проекта Windows 8.1 в проект Windows Phone. Это решение не является лучшим, но оно самое быстрое. В следующих статьях я покажу как делать кроссплатформенные решения.
Сейчас же вернемся к портированию приложения. В игре на телефоне решено было сделать постраничную навигацию. Создано 4 страницы:
Игра начинается со страницы GamePage. Если нет сохраненной игры — необходимо отправить пользователя на экран создания новой игры:
Работа с файлами и сессиям в Windows 8.1
В шаблоне Windows 8.1 автоматически будет создан класс SuspensionManager , который реализует механизм сохранения сессий. Тогда в классе страницы необходимо определить метод NavigationHelperLoadState и NavigationHelperSaveState . Код NavigationHelperLoadState показан ниже, сохранения состояния происходит похожим образом.
Работа с файлами и сессиям в Windows Phone 8
На телефоне работа с файлами немного отличается. Есть такое понятия, как IsolatedStorageSettings. Понятие это пришло из Silverlight версии 2. Как понятно из названия этот тип предназначен для хранения файлов и данных изолированно на локальной файловой системе. Это значит, что другое приложение, помимо вашего не получит доступ к этим данным.
Найденные особенности
Windows Phone 8 не позволяет сохранять шрифты в ресурсах xaml. Такой код на платформе WP8 не валиден:
Поэтому пришлось разделить файлы ресурсов и очистить лишнее из WP8.
Работа с разметкой
Очень порадовала работа с разметкой. Во-первых нет необходимости делать верстку приложения для 3-х видов как в Win 8.1 (Full, Filled, Snapped). Важно правильно сделать верстку для экрана в целом. В судоку поддерживается только вертикальное положение экрана (горизонтальное поддерживаться на 99% не будет).
После адаптации верстки, стилей и размеров объектов необходимо протестировать на различных устройствах и экранах.
Локализация названия приложения
В отличии от Windows 8.1, описание приложений производится на сайте https://dev.windowsphone.com при настройки публикации. А название хранится в приложении. Но не все так просто 🙂
Есть такое понятие как Display Name и Tile Title. Первое будет использоваться в маркете и списке приложений на телефоне. Второе используется как надпись на тайле, если такая опция выбрана.
Как описано в MSDN How to localize an app title for Windows Phone (ссылки в конце) — нам нужно создать C++ DLL, в которой будет файл ресурсов, содержащий 2 поля: название и название для тайла. Для каждого языка нужно создать свою dll. Да, это грустно. Но на помощь приходит проект WP8 Localize. Скачиваем инструмент, заполняем поля и автоматически создаем dll для всех необходимых языков. Пару часов этим мы сэкономили точно.
После создания всех dll, их необходимо добавить в проект. Мне удобнее, чтобы они все были в отдельной папке. Я назвал ее Langs и поместил их все туда. Не забываем изменить BuildAction=Content.
В файле WPAppManifest.xml изменяем название и тайл на @Langs/AppResLib.dll,-100 и @Langs/AppResLib.dll,-200 соответственно.
На этом этап локализации названия приложения и тайла закончен. Приступаем к изменению языка для контента приложения.
Локализация Xaml
В Windows Phone 8 инструменты для локализации стали гораздо лучше чем в 7-й версии. Создаем или находим класс LocalizedStrings.
Создаем папку Resources в проекте. Для каждого поддерживаемого языка создаем файл ресурсов AppResources.LOCALE.resx (например AppResources.resx и AppResources.ru.resx). Второй шаг — создание ресурсов в файле App.xaml:
Тем самым даем возможность биндинга в xaml.
Сам файл выглядит следующим образом:
Важное отличие, что здесь это конкретно файл текстовых ресурсов, а не объектов. Т.к. происходит связывание (биндинг) и генерация кода ресурсов — разделитель точка использоваться не может. Далее необходимо настроить связку для текстовых элементов к ресурсам.
Для страницы Новая игра:
Локализация поддерживается и в режиме верстки (в Expression Blend все правильно подхватывается)
Локализация из кода
ApplicationBar не поддерживает локализацию на биндингах. Для этого при создании проекта создается закомментированный код метода BuildLocalizedApplicationBar . Но нет ничего сложного написать несколько строк для построения меню приложения.
Включение локализации
В отличии от Windows 8.1 локализацию нужно включить вручную. Для этого в app.xaml.cs в метод App добавляем вызов метода InitializeLanguage .
В AssemblyInfo указываем культуру по умолчанию:
В файле WPAppManifest.xml на вкладке Packaging указываем настройки приложения: список поддерживаемых языков, язык по умолчанию.
Выводы
Локализация приложения Windows Phone 8 в некоторых местах кардинально отличается от той же локализации в Windows 8.1. Однако ничего сложного в этом нет. Важно иметь полную инструкцию перед созданием локализации или добавления поддержки нового языка. Надеюсь эта статья поможет при создании мультиязычного приложения. Посмотреть на результат можно здесь:
Источники
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
Похожие публикации
Локализация мобильных приложений. Часть 2
Локализация .NET приложения, а в частности ASP.NET WebForms
Локализация мобильных приложений (совместно с Nokia)
Средняя зарплата в IT
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Комментарии 15
В Windows Phone 8 инструменты для локализации стали гораздо лучше чем в 7-й версии. Создаем или находим класс LocalizedStrings.
Все «просто и логично» — для локализации имени создаем нативные dll для каждого языка, содержащие каждая одну строку кода и новое имя…
Конечно, WP 8 Localize помогает, да и самому их создать не проблема, но очень уж хочется кому-то внедрить что-то в сжатые сроки (или сраки) за такую реализацию…
P.S. Файлы ресурсов от W8 отлично читаются в WP8, вполне можно их перенести и сделать собственный заменитель W8 класса ResourceLoader, который будет выглядеть как-то так:
В результате имеем тот же синтаксис, что и в коде W8 приложения.
Это да… Вообще весь SDK попахивает недоделками. Очень многих стандартных классов из .NET Framework просто нет, порой это добивает…
Позиция Microsoft по поводу MVVM вообще радует, сами толкают его, а при этом UI компоненты достаточно скудно его поддерживают, элементарно тап обработать через ICommand — надо написать свой UI элемент, очень часто приходится события из UI прокидывать во ViewModel используя страницу как посредник, очень запарывает… + никаких тебе базовых компонентов для MVVM, я свои делал. MVVMLight не прижился
В ListBox нет футеров/хедеров, сделать список с несколькими типами элементов очень муторно… В общем, когда встает задача поработать с более менее сложным UI в windows phone, я сразу начинаю думать о костылях, которые придется придумать в этот раз.
Для навигации на другие страницы из ViewModel пришлось написать свой NavigationHelper, чтобы не прокидывать во ViewModel инстанс NavigationService.
В стек навигации приложения вообще не влезть, сколько страниц там лежит не узнать, только если считать их самому, что собственно и пришлось сделать.
То что работа с сетью через HttpWebRequest намерено оставлена только асинхронная — это просто финиш… Я конечно понимаю зачем, чтобы всякие криворукие разработчики не дергали сеть из UI потока, но блин, когда у тебя архитектурно запросы к api это несколько слоев логики, как правило асинхронность добавляют в самом верхнем слоее, чтобы не тащить за собой коллбеки по всем слоям, но тут тебя блин заставляют это делать…
Радости такая разработка особо не приносит, учитывая что Visual Studio без решарпера умна как пробка, ничего почти не подсказывает (блин, не IDE, а редактор с хорошим дебаггером), особенно когда эти злополучные биндинги строк пишешь, хоть вешайся блин, вот пример:
это даже не до конца влезло блин, после андроидового «@string/bla_bla» печально смотреть
Я извиняюсь, наболело просто, а тут вроде wp разработчики собрались, можно и поплакаться…
Забыл сказать про самый ад — это Windows Phone Marketplace:
- Нормально работает только в IE
- На самом деле глючит даже в самом IE
- Даже бета билд публикуется в течение 2х часов, очень блин круто, когда тестировщик ждет из за этого
- Публичные билды публикуются в течение 5ти дней! У них блин и так на платформе приложений не хватает, но нет, надо еще и паблишинг усложнить, достать разработчиков не только скудным SDK, тупой IDE, но еще и стором своим. Ты блин стараешься им помочь, но палки в колеса вставляют как могут ребята
- Как то раз мы хотели разрешить публикацию только в нескольких странах, а там список почти 200 элементов, есть кнопка выбрать все, а снять все нет! Ручками, ага… я уж думал скрипт написать
Если тут есть представители Microsoft, связанные с windows phone, откликнитесь пожалуйста, нам есть о чем поговорить