Отладка Проектов Xamarin Из Virtualbox На Эмуляторе Android

На днях я решил попробовать использовать 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

Перезагружаю виртуальную машину и снова возникает ошибка.



Отладка проектов Xamarin из VirtualBox на эмуляторе Android

Выключаю виртуальную машину, а в ее настройках отключаю виртуализацию полностью (параметр Система → Ускорение → Интерфейс паравиртуализации → «Отсутствует»), при этом VT-X/AMD-V остаётся включенным!

Отладка проектов Xamarin из VirtualBox на эмуляторе Android

Запускаю виртуальную машину и нажимаю кнопку отладки во встроенном эмуляторе VisualStudio. Теперь студия радостно сообщает, что VT-X у меня вообще нет (хотя у меня есть процессор Intel Core i5 + эмуляция чипсета ICH9).

Какие бы комбинации я ни пробовал, результат был один и тот же.

Встроенный эмулятор студии на VirtualBox вообще не запускается.

Та же проблема с AndroidStudio на виртуальной машине - не запускается эмулятор Android.

Отладка проектов Xamarin из VirtualBox на эмуляторе Android

Я пытаюсь установить HAXM на виртуальную машину, но, к сожалению, безуспешно.



Отладка проектов Xamarin из VirtualBox на эмуляторе Android

Пошарив в голове, я наткнулся на вот это: запрос на функцию , где пользователи просят выполнить 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 показывает активное соединение (оно должно быть только одно).



Отладка проектов Xamarin из VirtualBox на эмуляторе Android

И вот наконец-то он - результат, которого я так долго ждал:

Отладка проектов Xamarin из VirtualBox на эмуляторе Android

Теперь несколько выводов, ради которых я затеял эту проверку: 1. Отладка таким способом не стабильна.

При сборке проекта время от времени случаются зависания; генерируются ошибки, которые можно устранить путем перезапуска VisualStudio и эмулятора.

2. Запуск AndroidStudio на виртуальной машине отключает соединение ADB с хостом.

Поэтому для AndroidStudio на виртуальной машине нужно искать другие варианты отладки с помощью эмулятора или использовать физическое устройство.

3. Физическое устройство не требует отладки через сетевой порт. Виртуальная машина видит его как USB-устройство (нужно его просто подключить в настройках).

И немного оффтопика:

  • Запуск уже установленного приложения с помощью Xamarin.Forms занимает значительное время (гораздо больше, чем обычные проекты Java).

  • Помимо очень большого размера приложения (HelloWorld занимает более 12 МБ), мы также получаем Mono Shared Runtime (42 МБ) и поддержку Xamarin Android (для API23 — 23 МБ).

Сейчас сижу и думаю, а стоит ли вообще так тащить за собой фреймворк? Теги: #Visual Studio #xamarin.forms #Android #VirtualBox #Android Studio #xamarin #отладка #эмулятор #Visual Studio #разработка Android #C++ #xamarin
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.