На днях я решил попробовать использовать Visual Studio с Xamarin для написания кроссплатформенного кода сразу для трёх мобильных платформ.
Так как я ранее имел дело с AndroidStudio, мне не хватало возможности портировать код на другие платформы.
В описании Сообщество Visual Studio 2017 Красиво сказано, что есть единая бизнес-логика для iOS, Android и Windows 10, единый подход к созданию элементов управления через Xamarin.Forms, собственный эмулятор Xamarin Instant Player и прочие вкусности.
Зачем платить больше, если можно получить бесплатно? Не долго думая, скачиваю и начинаю установку VisualStudio, выбираю нужные параметры и указываю путь на диске D. И почти сразу получаю предупреждение, что на диске C совсем не осталось места.
Как так? Но оказывается, что помимо VisualStudio в папку «Program Files» на диске С закидывается огромное количество инструментов, компонентов и утилит. Как я позже понял, их невозможно перенести.
Они должны находиться в папке на системном диске (у меня SSD диск С и на нем всего 5 ГБ свободного места).
Конечно, есть возможность создать символические ссылки в папку на диске D, но на работающей системе боюсь экспериментировать.
В итоге для эксперимента я решил установить VisualStudio в эмуляторе VirtualBox (он бесплатный и вполне функциональный).
Это небольшое дело.
Теперь все установлено, и я создаю свое первое приложение HelloWorld на C# из шаблонов.
Я пытаюсь запустить его на эмуляторе и получается облом.
Оказывается, Hyper-V нужно отключить; HAXM с ним не совместим.
делаю по инструкции
Перезагружаю виртуальную машину и.bcdedit /set hypervisorlaunchtype off
ничего.
Та же ошибка.
Ну думаю ок, попробую через PowerShell Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor
Перезагружаю виртуальную машину и снова возникает ошибка.
Выключаю виртуальную машину, а в ее настройках отключаю виртуализацию полностью (параметр Система → Ускорение → Интерфейс паравиртуализации → «Отсутствует»), при этом VT-X/AMD-V остаётся включенным!
Запускаю виртуальную машину и нажимаю кнопку отладки во встроенном эмуляторе VisualStudio. Теперь студия радостно сообщает, что VT-X у меня вообще нет (хотя у меня есть процессор Intel Core i5 + эмуляция чипсета ICH9).
Какие бы комбинации я ни пробовал, результат был один и тот же.
Встроенный эмулятор студии на VirtualBox вообще не запускается.
Та же проблема с AndroidStudio на виртуальной машине - не запускается эмулятор Android.
Я пытаюсь установить HAXM на виртуальную машину, но, к сожалению, безуспешно.
Пошарив в голове, я наткнулся на вот это: запрос на функцию , где пользователи просят выполнить HAXM внутри VirtualBox. Видимо это пока не реализовано, в отличие от VMWare.
Ну как человек со стажем уже не первый раз бубен накручиваю.
Вам необходимо запустить эмулятор на хосте и предоставить доступ к виртуальной машине по сети.
И тут возникает проблема — до эмулятора не достучаться.
Его IP (10.0.2.15) находится за пределами моей сети (192.168.1.x).
Переназначение IP сетевым картам ни на хосте, ни на виртуальной машине ничего не дает. Судя по всему служба ADB слушает только интерфейс 127.0.0.1, я так понимаю в целях безопасности.
По пути мне интересно статья о доступе к эмулятору с виртуальной машины , но, к сожалению, немного устаревший (Xamarin Android Player больше не поддерживается и изображения для него тоже не обновляются.
Последний поставляется с API 23).
Поэтому я решил все-таки заставить его работать с эмулятором Android. Наконец я делаю это инструкции проброс портов с помощью скомпилированной программы из источники (скомпилированный файл уже канул в Лету).
Вариант переадресации портов с помощью netsh не работает - нельзя указать 127.0.0.1 в качестве пункта назначения ( доказательство ).
Затем делаю «adb kill-server» на хосте и на виртуальной машине.
На виртуальной машине пишу «adb connect 192.168.1.2:5585» и.
получаю «версия сервера adb (36) не соответствует этому клиенту (39); убивая.
» Уже хорошо, но в чем проблема? Оказывается, у меня есть две службы adb на виртуальной машине.
Одна служба находится в «C:\Users\\AppData\Local\Android\sdk\platform-tools», а вторая — в «C:\Program Files (x86)\Android\android-sdk\platform-tools».
Один был установлен с AndroidStudio, второй с VisualStudio. Беру ту, которая идет в комплекте с AndroidStudio, и пробую еще раз.
Ура! На этот раз соединение установлено! Я получаю «подключение к 192.168.1.2:5585».
В VisualStudio мое работающее изображение автоматически появляется в эмуляторе Android на хосте.
Счетчик подключений в программе PortForwarding показывает активное соединение (оно должно быть только одно).
И вот наконец-то он - результат, которого я так долго ждал:
Теперь несколько выводов, ради которых я затеял эту проверку:
1. Отладка таким способом не стабильна.
При сборке проекта время от времени случаются зависания; генерируются ошибки, которые можно устранить путем перезапуска VisualStudio и эмулятора.
2. Запуск AndroidStudio на виртуальной машине отключает соединение ADB с хостом.
Поэтому для AndroidStudio на виртуальной машине нужно искать другие варианты отладки с помощью эмулятора или использовать физическое устройство.
3. Физическое устройство не требует отладки через сетевой порт. Виртуальная машина видит его как USB-устройство (нужно его просто подключить в настройках).
И немного оффтопика:
- Запуск уже установленного приложения с помощью Xamarin.Forms занимает значительное время (гораздо больше, чем обычные проекты Java).
- Помимо очень большого размера приложения (HelloWorld занимает более 12 МБ), мы также получаем Mono Shared Runtime (42 МБ) и поддержку Xamarin Android (для API23 — 23 МБ).
-
Несложное Описание Xslt
19 Oct, 24 -
Биология
19 Oct, 24 -
Первый Бюджетный Фаблет
19 Oct, 24