- Cross-platform mobile development in Visual Studio
- Build an app for Android, iOS, and Windows (.NET Framework)
- Target Android, iOS, and Windows from a single code base
- Design one set of pages that render across all devices by using Xamarin.Forms
- Share code between Android, iOS, and Windows apps
- Target Windows 10 devices
- Build an app for Android, iOS, and Windows (HTML/JavaScript)
- Build an app for Android, iOS, and Windows (C++)
- Build a cross-platform game for Android, iOS, and Windows by using Visual Studio tools for Unity
- Программируем под Windows Mobile 6
- WinMobile вчера
- WinMobile сегодня
- Дорожный чемоданчик
- Время — деньги
- Напишите письмецо…
- Мониторим процессы
- Файловый менеджер
- Позвони мне, позвони
- The End
Cross-platform mobile development in Visual Studio
You can build apps for Android, iOS, and Windows devices by using Visual Studio. As you design your app, use tools in Visual Studio to easily add connected services such as Microsoft 365, Azure App Service, and Application Insights.
Build your apps by using C# and the .NET Framework, HTML and JavaScript, or C++. Share code, strings, images, and in some cases even the user interface.
If you want to build a game or immersive graphical app, install Visual Studio tools for Unity and enjoy all of the powerful productivity features of Visual Studio with Unity, the popular cross-platform game/graphics engine and development environment for apps that run on iOS, Android, Windows, and other platforms.
Build an app for Android, iOS, and Windows (.NET Framework)
With Visual Studio Tools for Xamarin, you can target Android, iOS, and Windows in the same solution, sharing code and even UI.
Learn more |
---|
Install Visual Studio (VisualStudio.com) |
Learn about Xamarin in Visual Studio (VisualStudio.com) |
Xamarin mobile app development documentation |
DevOps with Xamarin apps |
Learn about Universal Windows apps in Visual Studio (VisualStudio.com) |
Learn about the similarities between Swift and C# (download.microsoft.com) |
Target Android, iOS, and Windows from a single code base
You can build native apps for Android, iOS, and Windows by using C# or F# (Visual Basic is not supported at this time). To get started, install Visual Studio, select the Mobile Development with .NET option in the installer.
If you already have Visual Studio installed, re-run the Visual Studio Installer and select the same Mobile Development with .NET option for Xamarin (as above).
When you’re done, project templates appear in the New Project dialog box. The easiest way to find Xamarin templates is to just search on «Xamarin.»
Xamarin exposes the native functionality of Android, iOS, and Windows as .NET classes and methods. This means your apps have full access to native APIs and native controls, and they’re just as responsive as apps written in the native platform languages.
After you create a project, you’ll leverage all of the productivity features of Visual Studio. For example, you’ll use a designer to create your pages, and use IntelliSense to explore the native API’s of the mobile platforms. When you’re ready to run your app and see how it looks, you can use the Android SDK emulator and run Windows apps natively. You can also use tethered Android and Windows devices directly. For iOS projects, connect to a networked Mac and start the iOS emulator from Visual Studio, or connect to a tethered device.
Design one set of pages that render across all devices by using Xamarin.Forms
Depending on the complexity of your apps design, you might consider building it by using Xamarin.Forms templates in the Mobile Apps group of project templates. Xamarin.Forms is a UI toolkit that lets you create a single interface that you can share across Android, iOS, and Windows. When you compile a Xamarin.Forms solution, you’ll get an Android app, an iOS app, and a Windows app. For more details, see Learn about mobile development with Xamarin and the Xamarin.Forms documentation.
Share code between Android, iOS, and Windows apps
If you’re not using Xamarin.Forms and choose to design for each platform individually, you can share most of your non-UI code between platform projects (Android, iOS, and Windows). This includes any business logic, cloud integration, database access, or any other code that targets the .NET Framework. The only code that you can’t share is code that targets a specific platform.
You can share your code by using a shared project, a Portable Class Library project, or both. You might find that some code fits best in a shared project, and some code makes more sense inside a Portable Class Library project.
Learn more |
---|
Sharing Code Options (Xamarin) |
Code sharing options with .NET |
Target Windows 10 devices
If you want to create a single app that targets the full breadth of Windows 10 devices, create a universal Windows app. You’ll design the app by using a single project and your pages will render properly no matter what device is used to view them.
Start with a Universal Windows Platform (UWP) app project template. Design your pages visually, and then open them in a preview window to see how they appear for various types of devices. If you don’t like how a page appears on a device, you can optimize the page to better fit the screen size, resolution, or various orientations such as landscape or portrait mode. You can do all of that by using intuitive tool windows and easily accessible menu options in Visual Studio. When you’re ready to run your app and step through your code, you’ll find all of the device emulators and simulators for different types of devices together in one drop-down list that is located on the Standard toolbar.
Learn more |
---|
Intro to the Universal Windows Platform |
Create your first app |
Develop apps for the Universal Windows Platform (UWP) |
Build an app for Android, iOS, and Windows (HTML/JavaScript)
If you’re a web developer, and you’re familiar with HTML and JavaScript, you can target Windows, Android, and iOS by using Visual Studio Tools for Apache Cordova. These apps can target all three platforms and you can build them by using the skills and processes that you’re most familiar with.
Apache Cordova is a framework that includes a plug-in model. This plug-in model provides a single JavaScript API that you can use to access the native device capabilities of all three platforms (Android, iOS, and Windows).
Because these APIs are cross-platform, you can share most of what you write between all three platforms. This reduces your development and maintenance costs. Also, there’s no need to start from scratch. If you’ve created other types of web applications, you can share those files with your Cordova app without having to modify or redesign them in any way.
To get started, install Visual Studio and choose the Mobile Development with Javascript feature during setup. The Cordova tools automatically install all third-party software that’s required to build your multi-platform app.
After you’ve installed the extension, open Visual Studio and create a Blank App (Apache Cordova) project. Then, you can develop your app by using JavaScript or Typescript. You can also add plug-ins to extend the functionality of your app, and APIs from plug-ins appear in IntelliSense as you write code.
When you’re ready to run your app and step through your code, choose an emulator, such as the Apache Ripple emulator or Android Emulator, a browser, or a device that you’ve connected directly to your computer. Then, start your app. If you’re developing your app on a Windows PC, you can even run it on that. All of these options are built into Visual Studio as part of the Visual Studio Tools for Apache Cordova.
Project templates for creating Universal Windows Platform (UWP) apps are still available in Visual Studio so feel free to use them if you plan to target only Windows devices. If you decide to target Android and iOS later, you can always port your code to a Cordova project.
Learn more |
---|
Install Visual Studio (VisualStudio.com) |
Get started with Visual Studio Tools for Apache Cordova |
Learn about the Visual Studio Emulator for Android (VisualStudio.com) |
Build an app for Android, iOS, and Windows (C++)
First, install Visual Studio and the Mobile Development with C++ workload. Then, you can build a native activity application for Android, or an app that targets Windows or iOS. You can target Android, iOS, and Windows in the same solution if you want, and then share code between them by using a cross-platform static or dynamic shared library.
If you need to build an app for Android that requires any sort of advanced graphics manipulation, such as a game, you can use C++ to do it. Start with the Native Activity Application (Android) project. This project has full support for the Clang toolchain.
When you’re ready to run your app and see how it looks, use the Android Emulator. It’s fast, reliable, and easy to install and configure.
You can also build an app that targets the full breadth of Windows 10 devices by using C++ and a Universal Windows Platform (UWP) app project template. Read more about this in the Target Windows 10 devices section that appears earlier in this topic.
You can share C++ code between Android, iOS, and Windows by creating a static or dynamic shared library.
You can consume that library in a Windows, iOS, or Android project, like the ones described earlier in this section. You can also consume it in an app that you build by using Xamarin, Java, or any language that lets you invoke functions in an unmanaged DLL.
As you write code in these libraries, you can use IntelliSense to explore the native APIs of the Android and Windows platforms. These library projects are fully integrated with the Visual Studio debugger so you can set breakpoints, step through code, and find and fix issues by using all of the advanced features of the debugger.
Learn more |
---|
Download Visual Studio (VisualStudio.com) |
Install cross-platform mobile development with C++ |
Learn more about using C++ to target multiple platforms (VisualStudio.com) |
Install what you need, and then create a C++ native activity application for Android |
Learn more about sharing C++ code with Android and Windows apps (VisualStudio.com) |
Cross-platform mobile development examples for C++ |
Build a cross-platform game for Android, iOS, and Windows by using Visual Studio tools for Unity
Visual Studio Tools for Unity is a free extension for Visual Studio that integrates Visual Studio’s powerful code editing, productivity, and debugging tools with Unity, the popular cross-platform gaming/graphics engine and development environment for immersive apps that target Windows, iOS, Android, and other platforms including the web.
With Visual Studio Tools for Unity (VSTU), you can use Visual Studio to write game and editor scripts in C# and then use its powerful debugger to find and fix errors. The latest release of VSTU brings support for Unity 2018.1 and includes syntax coloring for Unity’s ShaderLab shader language, better synchronization with Unity, richer debugging, and improved code generation for the MonoBehavior wizard. VSTU also brings your Unity project files, console messages, and the ability to start your game into Visual Studio so you can spend less time switching to and from the Unity Editor while writing code.
Программируем под Windows Mobile 6
Добрые дяди из Apple привыкли решать за пользователя, какое ПО и какие опции ему нужны. Что ж, это выбор их пользователей. Мы же с тобой берем… и просто сами кодим то, что нам нужно. Старая добрая Винда была и остается другом юзеров и программистов, выбирающих свой собственный путь.
WinMobile вчера
Еще буквально несколько лет назад мобильная платформа страдала дефицитом программного обеспечения. Трудно поверить, но, чтобы найти нужную тулзу, приходилось нехило попотеть. А потом еще раз напрячься в попытках отыскать заветный крэк (Странно, а вроде все неплохо находилось, – Прим. Dr.Klouniz). Отсутствие софта обуславливалось тем, что для разработки программ под новую платформу не было удобной IDE. Да, был могучий Visual C++, в котором, если мне не изменяет память, были соответствующие мастера. Но, к сожалению, их возможностей не хватало. Когда в 2003 году я попробовал замутить первую программу для КПК, то сразу понял, что моих нервов не хватит для интимных отношений с ужасной «Visual Studio». После Delphi эта среда кажется уж больно непродуманной и непонятной. Такое чувство, что пересаживаешься с «мерса» на «Волгу».
WinMobile сегодня
Сегодня Windows Mobile сильно преобразилась. Она доросла аж до шестой версии и теперь ее можно считать действительно комфортной и удобной ОС. Это было достигнуто как за счет улучшения внешнего вида, так и за счет упрощения процесса разработки софта. Сейчас уже не составляет труда найти продвинутый почтовик или навороченный текстовый редактор. Более того, многие разработчики уже взяли за правило выпускать мобильные версии своих настольных продуктов. Для Windows Mobile уже давно появились клоны WinRAR, TotalCommander, WinZIP, MS Office и т.д. Появление большого количества программ объясняется в первую очередь развитием платформы .NET. Создавать софт на базе этой технологии чрезвычайно просто – и очень привычно для кодеров, которые выросли на таких языках как Delphi/C++ Builder. Последние версии Visual Studio словно переродились: они стали удобными и поистине функциональными. Приготовься, в рамках этой статьи мы совершим небольшой трип в волшебную и многоцветную страну WM 6.0.
Дорожный чемоданчик
Отправляясь в путешествие, нельзя забывать про вещи первой необходимости. Выброси из своего походного чемоданчика проверенный временем Delphi, в этот раз он не пригодится. Вместо него достань VisualStudio (версию выбери как можно свежее; лично я отдаю предпочтение самой последней – 2008). Помимо студии нам также потребуется SDK для работы с функциями, характерными для коммуникаторов – sms, телефония и т.д. И SDK, и саму VS ты всегда можешь слить с www.microsoft.com.
Время — деньги
Будем считать, что ты успешно скачал и установил нужный SDK, а это значит, что можно двигаться дальше. Запускай VisualStudio и создавай новый проект для Visual C# типа Smart Device. Сразу после выбора типа проекта перед тобой должно появиться окно.
В этом окне тебе надо выбрать платформу (Target platform) для которой мы планируем создавать приложение, а также версию .NET Фреймворка (.NET Compact Framework version) и шаблон приложения (Templates). Для наших примеров в качестве платформы установи Windows Mobile 5.0 Smartphone SDK (если ты качал 6-ю версию SDK, то выбирай именно ее). С ней тебе будут доступны все необходимые пространства имен для работы со специфическими функциями коммуникаторов/смартфонов. Версию Фреймворка стоит выбирать, исходя из той, которая установлена на твоем девайсе. Например, на моем коммуникаторе Toshiba Portege G900 тусуется .NET Framework 2.0, поэтому я выбрал именно эту версию.
Внимание! Если на твоем устройстве до сих пор установлена первая версия .NET Framework, то бегом на microsoft.com и скачивай хотя бы вторую. Первая уж больно сильно урезана в плане функционала. Все, теперь остается только выбрать шаблон для нашего приложения. Для сегодняшних примеров нам вполне подойдет Device Application. Клацай «Ок» – и VisualStudio сгенерирует новый пустой проект.
По умолчанию VS создает чистый проект для мобильных устройств со скином в виде этого самого девайса. По правде говоря, «дизайнить» форму в таком виде не очень удобно, поэтому потрудись сразу отключить отображение скина. Сделать это можно, кликнув правой клавишей мыши по форме и выбрав в контекстном меню «Show Skin». После этого нехитрого действия ты увидишь более-менее привычный вид формы.
Пустой проект готов и настало время привести его в рабочий вид. Готовь мышку, сейчас мы будем раскидывать элементы управления. Сегодня мы разберем не один, а сразу несколько примеров. Для такого «проекта» нужна соответствующая форма. Кстати, варианта формы с кучей закладок я для себя не нашел. Поэтому советую тебе не заморачиваться и пойти тем же путем, что и я – бросить и растянуть по всей форме компонент TabControl, а затем создать в нем пять закладок:
Думаю, назначение закладок пояснять не нужно. Все и так очевидно по их названиям… Что? Тебе интересно, что это за закладка «Полезности»? OК, сейчас объясню. Здесь расположено несколько кнопок, которые выполняют некоторые полезные для пользователя или западлостроителя действия: поворот экрана, выключение/перезагрузка системы.
Напишите письмецо…
С дизайном формы покончено, пора переходить к кодингу. Первое, чему мы сегодня научимся – отправлять SMS. Этими короткими сообщениями пользуется каждый из нас, а раз так, неплохо бы научиться отправлять их программно. Зачем? Цели могут быть разными. Например, некоторые на основе полученных знаний смогут закодить простенькую программку, которая будет транслитерировать весь кириллический текст, тем самым, позволяя сэкономить свои кровные на отправке SMS. Другие могут через sms «выводить» с вражеской территории различную полезную информацию. Итак, создай обработчик события для одной единственной кнопки с надписью «отправить» и напиши в нем следующий код:
Кода немного, так что быстренько переписывай и возвращайся сюда за разъяснениями. В самой первой строчке я проверяю, заполнено ли поле с получателем (если нет, то делать ничего не нужно). Учти, что для демонстрационного примера такой проверки вполне достаточно, но для создания реального приложения ее будет маловато. Если ты решишь в будущем закодить тулзу для отправки сообщений, то я рекомендую тебе проверять номер получателя с помощью регулярных выражений. Только так можно быть уверенным, что это действительно номер, а не чехарда из букв и цифр. Проверив номер получателя, можно переходить непосредственно к отправке. Для отправки SMS в SDK есть готовый класс – SmsMessage. Как и полагается, перед тем как начать работать с классом, нужно создать его экземпляр. Именно это я и делаю во второй строчке кода. Инициализировав класс, нужно не теряться, а сразу начать заполнять его свойства. К счастью, их немного:
Разобравшись со свойствами, можно переходить к методам, а методов всего один – Send(). В примере вызов метода Send() я заключаю в блок операторов исключительных ситуаций. Это делается на случай неожиданных ошибок. Попробуй сейчас сохранить внесенные изменения и собрать проект. Не спеши паниковать, если VS нервно матерится. Просто добавь новое пространство имен (Microsoft.WindowsMobile.PocketOutlook) – и опять попытайся собрать проект. Что, не хочет? Ok, don’t worry. Зайди в меню Project -> Add Reference. В появившемся окне выбери нужную сборку и нажми «ОК». Теперь проект должен успешно собраться. Можешь уже сейчас залить свежеиспеченную прогу в свой девайс и протестировать. А я начну разбирать следующий пример.
Мониторим процессы
На мой взгляд, один из главных минусов WinMobile – это отсутствие встроенных средств для просмотра списка активных задач или процессов. В написании такой тулзы нет ничего сложного, но почему-то многие программисты пытаются неплохо заработать на подобных программах. Мне на глаза попадался продвинутый диспетчер задач с кучей разных ненужных функций по цене $30. Нехило? Лично для меня это много, и свои честно заработанные денежки я предпочитаю тратить на что-нибудь другое. Итак, создавай обработчик события Clicлk() для кнопки «Обновить», расположенной на второй закладке. Напиши здесь всего одну строчку кода:
Код самой процедуры ты можешь найти на соответствующей врезке. Начинай его переписывать, а я потружусь объяснить, что в нем происходит.
Взглянув на листинг, ты наверняка удивился – для получения списка процессов потребовалась всего одна строчка (перебор и добавление каждого из них в ListView не считаем). Если ты хоть раз пробовал кодить «диспетчер процессов» под Win32 (конечно кодил; ][акер уже не раз писал об этом), то наверняка помнишь, что для получения списка активных процессов приходилось вызывать кучу API-функций и совершать много телодвижений, – а тут все как-то просто и быстро. Но не так просто, как кажется на первый взгляд!
Строка «process_list = TaskManager.Process.GetProcesses()» говорит о том, что получение процессов происходит посредством вызова метода GetProcess() класса Process. Класс Process является разработкой Cristian Forsberg и, благодаря ему, работа с процессами превращается в сплошное удовольствие. Точнее, в одну строку. Все, что нам требуется, – это получить список всех процессов посредством вызова всего-навсего одного метода – GetProcess() . После этого остается только запустить перебор в цикле и вытащить информацию о каждом из них. Всю эту информацию (количество потоков, имя процесса, pid) я и добавляю в ListView. Остальную черную работу делает хорошо продуманный класс. Кстати, модуль с классом ты можешь взять с нашего диска, а после выхода журнала в свет и на www.vr-online.ru будет доступен немного переработанный вариант этого класса, с возможностью получать путь к файлу процесса. Будем считать, что список процессов у нас получен. Теперь нужно научиться им управлять – убивать лишние. Для решения этой нетрудной задачки у класса Process есть метод Kill(). Реализация процесса завершения – ниже:
Силами этого нехитрого кода я выковыриваю выделенный процесс и просто вызываю вышеозвученный метод. Просто до безобразия!
Файловый менеджер
Файловый менеджер – тулза, без которой я не могу представить ни одного своего рабочего дня. На «большом» компе я комфортно юзаю бесплатный UnrealCommander (практически клон TotalCommander’a). С недавнего времени необходимость в функциональном файловом менеджере появилась и при работе на коммуникаторе. Опять же, я не стал заморачиваться с Resco Explorer и его маленькими друзьями, а решил попробовать закодить все самостоятельно. Создай пустую функцию FileList и наполни ее тело (Хе-хе, – прим. Dr.Klouniz) кодом из соответствующей врезки. Как обычно, возвращайся за разъяснениями.
В самом начале я меняю вид курсора. Получение списка файлов – дело небыстрое, особенно на мобильных девайсах. Поэтому, чтобы лишний раз не смущать пользователя, лучше выбрать привычный курсор для тормозных операций и спать спокойно. После такой хитрой подготовки (нервной системы пользователя) ничто не помешает нам перейти непосредственно к получению списка файлов. Сначала получим список директорий (пусть они будут сверху, как и принято во всех файловых менеджерах,) а уже после этого пробежимся по файлам. Для получения директорий я использую класс Directory. У этого класса есть метод GetDirectories(), позволяющий получить список папок по переданному в качестве единственного параметра пути. Получив список папок, их обязательно нужно добавить в контейнер-коллекцию, чтобы потом их можно было удобно отсортировать (foldersList.Sort();).
Отсортировав список директорий, можно приступать к добавлению найденных папок в ListView. После добавления папок я приступаю к получению файлов. Алгоритм получения списка файлов точно такой же, поэтому я не стану заострять на нем внимание. Теперь создай обработчик события Click() для кнопки «Перейти». По ее нажатию мы будем запрашивать содержимое конкретной папки. Все, что нам требуется написать в этом обработчике – вызов функции FileList(). Если сейчас запустить пример, то уже реально начать путешествие по файловой системе. Набери в поле для ввода пути любой адрес (например, My Documents) и нажми на кнопку «Перейти». Если при переписывании листинга ты не допустил ошибок, то через мгновение ListView должен заполниться списком файлов (рисунок 8).
Итак, теперь наш менеджер умеет отображать список файлов, но кое-чего ему явно не хватает: какой может быть файловый менеджер без возможности выполнения стандартных операций (создание папок, копирование и удаление файлов, запуска программы)? Поэтому нам волей не волей, но придется расширять функционал. OК, начнем с удаления файлов. Удалить файл не проблема (гораздо труднее его восстановить:)). От нас требуется лишь вызвать метод Delete() класса File. В качестве одного единственного параметра метод принимает полный путь к тому файлу, который должен быть удален. Список файлов у нас в ListView. Есть у нас и путь к папке, в которой мы работаем (tbPath). Значит, все, что нам нужно – это прибавить имя файла к полному пути к папке, в которой мы сейчас находимся, и выполнить метод Delete():
Копирование файла реализуется аналогичным способом, но с одним отличием – здесь требуется вызывать не метод Delete(), а метод Copy(), которому нужно передать два параметра:
Определить файл-источник можно таким же способом, как и при удалении, поэтому еще раз приводить код я не буду. Папки создаются посредством вызова метода CreateDirectory(). Метод принимает всего один параметр – путь к создаваемой папке. Как видишь, встроенные классы существенно упрощают работу с файлами и папками, позволяя совершенно забыть о неудобном использовании Windows API. Совсем другая история с запуском файлов.
Так уж получилось, но разработчики C# не снабдили нас удобным классом для запуска внешних программ. Печально, но не смертельно. Уже известный нам Cristian Forsberg, помимо класса для работы с процессами, любезно предоставил на суд общественности класс ShellExecute, позволяющий стартовать программы. Подключи модуль с классом к своему проекту и, вызвав метод Start(), передай ему путь к запускаемому файлу. Дальнейшее – работа класса. Я не стану приводить пример кода запуска, так как в нем ничего нет трудного. В крайнем случае, на DVD тебя ждет полный исходник со всеми рассмотренными классами.
Позвони мне, позвони
Мы уже познакомились с отправкой SMS, получением процессов, выполнением операций с файлами… дошел черед и до телефонии! Я специально оставил это на закуску, ведь благодаря классам работать с ней просто и писать кучу кода не понадобится. Не буду многословным, просто взгляни на этот код:
Этих трех строчек достаточно, чтобы совершить звонок по номеру (конечно, платному! :)), введенному в поле tbTellNumber. Второй параметр (false) метода Talk говорит о том, что номер нужно набирать сразу же, не ожидая разрешений.
The End
Программировать для Windows Mobile, используя технологию .NET, чрезвычайно быстро и удобно. Сегодняшние примеры – лишнее тому подтверждение. Обрати внимание, мы рассматривали только демонстрационные примеры, но на их основе вполне реально написать настоящие хакерские тулзы. Например, ты без труда сможешь отправлять с девайса владельца всю нужную тебе инфу посредством sms или устроить самую настоящую прослушку средь бела дня (автоматически набрал нужный номер в нужное время и. ). И пускай потом жертва вспоминает, как его телефон смог позвонить, стоя на блокировке. На этой славной ноте я хочу закончить свою сказку и попрощаться с тобой. Удачи в нелегких кодерских делах! Как обычно, все твои вопросы я жду на мыло.