VirtualBox — как альтернатива эмулятору ARM в Android SDK. Установка, настройка, подключение к среде разработки Eclipse и интернету
Наверняка многие из вас имели дело с эмулятором, поставляемым в комплекте Android SDK от компании Google. И, вероятно, очень многих разочаровала крайне медленная работа данного эмулятора, начиная от загрузки и заканчивая медленной работой вашего приложения. Речь идет об эмуляторе системы Android с поддержкой команд ARM-процессоров. Но ведь есть же в SDK образы системы Android для x86 процессоров, скажут многие, и будут правы. Но дело тут в том, что для эмуляции OS Android с поддержкой виртуализации x86-процессоров необходимо приложение HAXM от Intel, которое отказывается устанавливаться на компьютеры с процессорами фирмы AMD. Есть ли выход из данной ситуации для владельцев систем на базе AMD?
Ответ есть! И он заключается в использовании VirtualBox — свободнораспространяемой системы эмуляции с поддержкой виртуализации от фирмы Oracle. И не верьте тем, кто говорит, что настроить интернет на виртуальной машине можно только со специальным образом Андроида с поддержкой Ethernet. Поддержка Ethernet’а есть везде, просто в меню настроек Андроида нет такого пункта.
Что же нам нужно для успешной отладки своих приложений в виртуальной машине VirtualBox и настройки интернета?
Для этого необходимо скачать и установить последнюю версию VirtualBox’а, а так же скачать нужные вам образы ОС Android вот отсюда: http://www.android-x86.org/download
Запускаем VirtualBox и создаем виртуальную машину с такими параметрами:
Выделяем 256 Мб оперативной памяти, 128 Мб для видеоадаптера и создаём виртуальный диск размером 1 Гб (можно большего и меньшего размера под ваши потребности) типа VHD.
В настройках виртуальной машины подключаем скачанный образ системы Android:
Запускаем нашу виртуальную машину и видим:
Выбираем установку ОС «Андроид» на наш виртуальный жесткий диск и жмем Enter.
Далее выбираем первый пункт меню «Create/Modify partitions» и опять жмём Enter.
Теперь нужно создать первичный раздел Linux.
Выбираем пункт New, затем Primary, видим что-то вроде «Size (in MB): 1069,29» и жмём Enter, далее опять нажимаем Ввод на пункте Bootable и затем выбираем пункт Write.
На вопрос записать ли таблицу разделов на жесткий диск, вводим слово «yes».
После жмём на пункт Quit и видим следующее меню:
Выбираем первый пункт меню и далее выбираем пункт меню ext3 и жмём Ввод, далее нас спросят «Do you want to install boot loader GRUB?» — выбираем Yes, нажимаем Ввод. Далее нас спросят, «хотим ли мы, чтобы директория /system была доступна для чтения/записи?» — также выбираем Yes и нажимаем клавишу Ввод.
Если вы сделали все правильно, то вы увидите вот такую картинку с процессом установки ОС «Андроид» на виртуальный диск:
Поздравляю! Вы только что установили ОС «Андроид» для систем на базе x86-процессоров на виртуальный диск вашей виртуальной машины.
Но радоваться пока еще рано.
Теперь вы должны увидеть следующее окно:
Выбирите в этом окне пункт меню Машина, затем пункт Закрыть. нажмите на чекбокс «Выключить» и нажмите кнопку Ok.
После того, как вы выключили виртуальную машину, вы должны убрать из виртуального CD-привода образ с системой Андроид: Изъять диск из привода. Он нам больше не понадобится.
Этим мы устанавливаем доступные для нашей виртуальной системы разрешения экрана, которые нам предпочтительно использовать. Жмём Ввод, и все изменения будут внесены в конфигурационные файлы виртуальной машины. Обратите внимание на имя вашей виртуальной машины, в моём примере это «Android 4.0 RC2».
После этого запускаем нашу виртуальную машину:
На первом пункте меню «Android-x86 4.0-RC2» нажимаем клавишу с латинской буквой «A», появится меню с конфигурационной строкой загрузки ОС в конце которой
будет написано «SRC=/android-4.0-RC2», после букв RC2 ставим пробел и пишем «vga=ask» и жмём Ввод. Потом еще раз Ввод. Появится вот такой экран:
Видим 4 созданные нами ранее видеорежима. Набираем на клавиатуре «361» и давим Ввод:
Далее настраиваете ваш Андроид как вам удобно. Не забывайте в меню виртуальной машины выбрать пункт «Машина» и пункт «Выключить интеграцию мыши». После этого вы можете кликнуть левой кнопкой мыши на окне с Андроидом и управлять им с помощью мышки. Выход из этого режима (по умолчанию) клавиша правый Ctrl.
Если Андроид впал в спячку и не реагирует на мышку, то пробудить его можно клавишей «контекстное меню» (нарисовано меню со стрелкой курсора), которая должна располагаться рядом с клавишей «Windows» (с изображением флага).
А теперь самое время подключить нашу среду разработки к виртуальной машине!
В меню окна нашей виртуальной машины жмем «Машина», «Настроить. », «Сеть», «Проброс портов», давим на иконку «+» и создаем новое правило для проброса портов:
IP адрес хоста 127.0.0.1, а IP гостя в моём случае 10.0.2.15. Узнать IP гостя можно следующим образом: в окне с Андроидом жмём комбинацию «Alt+F1» (выход из консоли «Alt+F7»). Попадаем в консоль, где вводим команду netcfg и давим Ввод:
Теперь после проделанных ранее манипуляций, пишем в консоли Windows «adb connect 127.0.0.1:5556» и вуаля!
А теперь самое вкусное!
Смотрим в настройках вашей сети DNS адреса провайдера,
Нажимаем в окне Андроида «Alt+F1» и вводим (в моем случае это DNS адрес 80.243.64.67):
(Вы должны ввести DNS адрес своего провайдера интернета).
Virtualbox sdk что это
Welcome to the VirtualBox Main API documentation. This documentation describes the so-called VirtualBox Main API which comprises all public COM interfaces and components provided by the VirtualBox server and by the VirtualBox client library.
VirtualBox employs a client-server design, meaning that whenever any part of VirtualBox is running – be it the Qt GUI, the VBoxManage command-line interface or any virtual machine –, a dedicated server process named VBoxSVC runs in the background. This allows multiple processes working with VirtualBox to cooperate without conflicts. These processes communicate to each other using inter-process communication facilities provided by the COM implementation of the host computer.
On Windows platforms, the VirtualBox Main API uses Microsoft COM, a native COM implementation. On all other platforms, Mozilla XPCOM, an open-source COM implementation, is used.
All the parts that a typical VirtualBox user interacts with (the Qt GUI and the VBoxManage command-line interface) are technically front-ends to the Main API and only use the interfaces that are documented in this Main API documentation. This ensures that, with any given release version of VirtualBox, all capabilities of the product that could be useful to an external client program are always exposed by way of this API.
The VirtualBox.Session class is a regular component. You can create as many Session objects as you need but all of them will live in a process which issues the object instantiation call. Session objects represent virtual machine sessions which are used to configure virtual machines and control their execution.
The naming of methods and attributes is very clearly defined: they all start with a lowercase letter (except if they start with an acronym), and are using CamelCase style otherwise. This naming only applies to the IDL description, and is modified by the various language bindings (some convert the first character to upper case, some not). See the SDK reference for more details about how to call a method or attribute from a specific programming language.
Открытая платформа виртуализации VirtualBox
Технологии виртуализации в последнее время вызывают большой интерес не только у крупных компаний, использующих их для повышения эффективности информационной инфраструктуры в составе комплексных решений. Конечные пользователи также увидели преимущества применения настольных платформ виртуализации как на работе, в повседневной деятельности, так и дома. Множество вариантов использования виртуальных машин, широко рекламируемые вендорами платформ виртуализации, с повышением мощностей пользовательских аппаратных платформ постепенно начинают серьезно рассматриваться пользователями как надежные инструменты повышения эффективности работы с различным программным обеспечением и операционными системами. Технологии виртуализации позволяют на одном физическом компьютере (хосте) запускать одновременно несколько виртуальных машин со операционными системами (гостевыми ОС).
Конечно, на этом варианты использования виртуальных машин дома не заканчиваются. Пользователи придумывают все новые и новые способы применения виртуальных машин, а также используют различные средства управления и утилиты для повышения удобства работы с виртуальными машинами. При этом производители платформ виртуализации рассматривают домашних пользователей как достаточно перспективный сегмент рынка и стараются сделать развертывание и применение виртуальных машин максимально простым.
Обзор существующих настольных платформ виртуализации
Так сложилось, что в индустрии платформ виртуализации пользователи привыкли к традиционным продуктам, которые развиваются на протяжении нескольких лет и предоставляют необходимый уровень функциональности. Однако лидер в области производства ПО для виртуализации, компания VMware, ориентируется в основном на коммерческое использование своих платформ, и хотя ее мощная платформа виртуализации VMware Workstation 6 является по множеству параметров лучшей на данный момент, у нее есть один неоспоримый минус — она не бесплатна. Пользователи могут также загрузить с сайта бесплатный продукт VMware Player, предназначенный для «проигрывания» виртуальных машин, однако создавать их в нем нельзя. Продукт VMware Server направлен на использование в корпоративной среде для виртуализации серверов малых предприятий и тоже не подходит для домашних пользователей.
Компания Microsoft предлагает пользователям бесплатный продукт Virtual PC, который, однако, не обладает необходимым функционалом, удовлетворяющим требованиям всех категорий пользователей. Нужно также отметить, что Virtual PC доступен только для рабочих станций с операционными системами семейства Windows, что также отсекает определенный сегмент пользователей.
Компания Parallels также предлагает настольные платформы виртуализации Parallels Workstation для Windows и Linux хостов, а также Parallels Desktop для Mac OS X, которые тоже не являются бесплатными. К тому же, в связи с успешными продажами продукта Parallels Desktop, компания Parallels, кстати, принадлежащая российской компании SWsoft, несколько приостановила развитие продукта Parallels Workstation и довольно давно не выпускала его новых версий.
Стоит отметить, что сторонники решений Open Source хотели бы использовать свободную платформу виртуализации с открытым исходным кодом, какой является, например, платформа Xen.
Долгое время рынок платформ виртуализации находился в подвешенном состоянии касательно сегмента домашних пользователей: с одной стороны, производители систем виртуализации наращивали функционал и предлагали все новые средства управления, с другой конечные пользователи не хотели платить за них. В связи с этим, некоторым компаниям пришлось предоставить бесплатные системы виртуализации (например, VMware Server и Microsoft Virtual Server), которые в основном покрывали потребности корпоративных пользователей. Но вопрос об использовании виртуальных машин дома, по-прежнему, оставался открытым.
В 2006 году на рынке настольных платформ виртуализации появился новый игрок. Немецкая компания InnoTek представила продукт VirtualBox для виртуализации десктопов с открытым исходным кодом, в разработке которого (за исключением некоторых компонентов) может принять участие любой желающий. VirtualBox является достойным кандидатом на то, чтобы заполнить пустующую нишу среди настольных платформ виртуализации.
О платформе VirtualBox
Эмулируемое аппаратное окружение
Платформа VirtualBox исполняет код гостевой системы нативно (прямой передачей инструкций процессору хоста). Этот подход работает хорошо для кода, исполняющегося в кольце третьей гостевой системы, для кода гостевой системы, исполняющегося в нулевом кольце, требующего привилегированных инструкций, необходим его перехват платформой виртуализации. Для этой цели VirtualBox использует оригинальный подход: код, исполняющийся в нулевом кольце гостевой системы, исполняется в первом кольце хостовой системы, которое не используется в архитектуре Intel.
Уникальные функции VirtualBox
Поддерживаемые гостевые и хостовые системы
Нужно отметить, что в данный момент портирование VirtualBox на платформу OS/2 еще не закончено, и на сайте разработчика присутствуют лишь общие инструкции по сборке системы. При использовании VirtualBox на этой платформе возникают многочисленные проблемы, которые предстоит решить разработчикам.
Список гостевых систем, поддерживаемых VirtualBox, весьма обширен и вполне может соперничать с коммерческими платформами виртуализации. На данный момент поддерживаются следующие гостевые ОС:
| Гостевая ОС | Статус в данный момент | Примечание |
| Семейство ОС Windows | ||
| Windows Vista | Работает, Guest VM Additions доступны | Необходимо установить драйвер сетевой карты вручную (описано в пользовательской документации) |
| Windows 2000 | Работает, Guest VM Additions доступны | |
| Windows XP | Работает, Guest VM Additions доступны | |
| Windows Server 2003 | Работает, Guest VM Additions доступны | |
| Windows NT | Работает, Guest VM Additions доступны | Некоторые проблемы на старых пакетах обновления, рекомендуется наличие пакета обновления версии не менее 6а |
| Windows 98 | Работает, но не доступны Guest VM Additions | |
| Семйство ОС Linux | ||
| Ubuntu 5.10/6.06 Desktop/7.04 herd 5 | Работает, Guest VM Additions доступны | |
| Ubuntu 6.06 Server/6.10 | Работает, Guest VM Additions доступны | Могут быть проблемы с загрузкой ОС |
| Debian 3.1 | Работает, Guest VM Additions доступны | |
| SUSE 9/10.0/10.2 | Работает, Guest VM Additions доступны | |
| Mandrake 10.1 | Работает, Guest VM Additions доступны | |
| Fedora Core 1/4/5/6 | Работает, Guest VM Additions доступны | |
| Red Hat Enterprise Linux 3 and 4 | Работает, Guest VM Additions доступны | |
| Red Hat Linux 9 | Работает, Guest VM Additions доступны | |
| Red Hat Linux 7 | Не работает | |
| Linspire 4.5 | Работает, Guest VM Additions доступны | |
| Slackware 10.1 | Работает, Guest VM Additions доступны | |
| Conectiva 10 | Работает, Guest VM Additions доступны | |
| Xandros 3 | Не работает | |
| Семейство ОС BSD | ||
| FreeBSD | Работает частично | Известны проблемы с версией для FreeBSD 6.2 |
| PC-BSD 1.3 | Не работает | |
| OpenBSD | Работает, но не доступны Guest VM Additions | |
| Другие ОС | ||
| DOS | Работает | Ограниченно тестировалось |
| OS/2 | Работает частично | Необходимо наличие поддержки Intel VT |
| Novell Netware 6.5 | Не работает | |
| BeOS 5 | Не работает | |
| Syllable | Не работает | |
| Visopsys | Не работает | |
| ReactOS | Не работает | |
| Solaris 10 | Работает частично | Не на всех версиях работает стабильно, проблемы с сетью |
Компания InnoTek заявляет также, что практически все операционные Linux-системы с версией ядер 2.4 и 2.6 должны работать в качестве гостевых. Для достижения лучшей производительности рекомендуется версия ядра 2.6.13.
Как видно из приведенного выше списка, поддерживается множество Linux-платформ, что предоставляет широкие возможности по обучению работы с ними в виртуальных машинах на базе VirtualBox.
Принцип работы VirtualBox
Графический интерфейс VirtualBox имеет два основных окна: главное и консоль виртуальной машины.
Виртуальная машина с запущенной в ней гостевой системой инкапсулирует в себе необходимые детали реализации гостевой ОС и ведет себя по отношению к хостовой системе как обычное приложение.
Процесс установки гостевой системы на платформе VirtualBox весьма прост и не требует от пользователя дополнительных усилий. При создании виртуальной машины необходимо выбрать тип устанавливаемой гостевой системы, определить количество выделяемой ей оперативной памяти и создать виртуальный диск фиксированного размера или динамически расширяющийся по мере его заполнения в гостевой системе. Дальнейший процесс установки происходит так же, как и в других платформах виртуализации. После того, как гостевая ОС будет установлена, необходимо также установить Guest VM Additions в целях оптимизации гостевой системы и улучшения ее взаимодействия с хостовой ОС.
Связь эмулятора виртуальных машин QEMU и VirtualBox
По заявлениям разработчиков VirtualBox техники, заимствованные ими из QEMU, позволили им сэкономить значительное количество времени и повысить надежность платформы.
Возможности открытой разработки VirtualBox
Помимо полнофункциональных версий VirtualBox для свободного использования, компания InnoTek предлагает ограниченные версии платформы с открытым исходным кодом для различных хостовых систем. Исходный код VirtualBox хранится в системе управления версиями Subversion (svn) и может быть скачан с сайта компании InnoTek. Чтобы извлечь исходный код платформы из онлайнового сервера Subversion, в операционной системе Linux необходимо выполнить команду: svn co http://virtualbox.org/svn/vbox/trunk vbox
Также последнюю версию исходных кодов системы VirtualBox единым архивом можно скачать со страницы загрузок по адресу: http://www.virtualbox.org/wiki/Downloads.
Принцип организации исходного кода можно узнать из Wiki на сайте InnoTek по адресу: http://www.virtualbox.org/wiki/Source_code_organization.
Также компания InnoTek на своем сайте ведет публичный багтрекер, в котором можно узнать обо всех присутствующих на данный момент проблемах и составить отчет об ошибке, внеся описание проблемы при работе с платформой в базу ошибок VirtualBox.
И, конечно, каждый может принять участие в разработке открытой версии платформы, войдя в состав сообщества Open Source на сайте virtualbox.org.
Преимущества и недостатки VirtualBox
Рассмотрев основные возможности VirtualBox, можно сказать, что у этой платформы виртуализации определенно есть будущее, поскольку она готова занять пустующую нишу в сфере настольных систем виртуализации как мощная, производительная, удобная и, главное, бесплатная платформа. Безусловным плюсом системы является ее кроссплатформенность и поддержка со стороны сообщества Open Source. Большой список поддерживаемых гостевых и хостовых операционных систем открывает широкие возможности по применению VirtualBox в контексте различных вариантов использования.
Среди бесплатных платформ VirtualBox, определенно, одна из лучших на данный момент. При этом компания InnoTek ориентируется не только на конечных пользователей. Наличие таких функций, как RDP сервер и iSCSI initiator, говорит, что в будущем платформа может серьезно использоваться в производственной среде. Дружественный интерфейс пользователя вкупе с высокой производительностью VirtualBox сейчас имеют множество приверженцев во всем мире.
Между тем, у VirtualBox есть и некоторые проблемы: прежде всего, это проблемы со стабильностью на многих хостовых платформах и отсутствие совместимости формата виртуальных дисков с другими системами виртуализации. Также, на данный момент функциональность системы уступает коммерческим платформам (в частности, VMware Workstation 6), однако темпы развития VirtualBox говорят, что в скором времени ее функциональность значительно увеличится. Попробуйте использовать виртуальные машины VirtualBox, и, возможно, эта платформа займет достойное место среди необходимого программного обеспечения на вашем десктопе.
Автоматизация работы с VirtualBox: Резервное копирование
VirtualBox — достаточно универсальная, простая и бесплатная платформа виртуализации, что и обеспечило ей широкую популярность, однако, часто не хватает её функциональности для того, чтоб решить ту или иную задачу. Этот недостаток можно частично компенсировать разработав собственные инструменты применяя SDK. Т.к. информации по этой теме в интернете немного в этой статье хочу рассказать о том, как реализовать не требующее остановки резервное копирование виртуальной машины с использованием Python API для VirtualBox. Люди обладающие серьёзным опытом работы с VirtualBox вряд ли найдут в здесь что-то новое, но тем кто недавно работает с VirtualBox и хоть немного умеет програмировать думаю будет интересно.
Задача
О снэпшотах
Для того чтоб сохранять и восстанавливать состояние ВМ используются так называемые снимки состояния системы (Snapshots). Работают они следующим образом: Когда еще не сделано ни одного снимка, образ виртуального диска ВМ хранится в одном большом файле с разрешением vdi и каким-то понятным человеку именем (по умолчанию это название виртуальной машины). ВМ по мере своей работы читает и пишет в этот файл. Когда создается снимок системы, VirtualBox создает два файла в расширениями vdi и sav и именами из букв цифр и чёрточек. Что-то вроде <4a34e84c-aad0-4486-85d2-2d7fbb472d70>.sav. <4a34e84c-aad0-4486-85d2-2d7fbb472d70>– это id снимка, он нам пригодится позже. Файл в разрешением sav – это сохраненное состояние системы, по сути содержимое оперативки. А в файл с разрешением vdi с этого момента начинают писаться все изменения, которые ВМ делает со своим диском. Это означает, что если у нас есть хотя бы один снэпшот, то файл с образом диска используется только для чтения, и можно его смело копировать.
Когда снимок удаляется – vdi-файл снимка сливается (в смысле merge) с vdi-файлом своего предка, если снимок было всего один, то непосредственно с образом диска. Надеюсь, понятно объяснил. Вообще, снимки можно выстраивать в длинные цепочки и в деревья, но пока нам этого делать не понадобится.
Алгоритм
Чтоб в итоге получить актуальную копию ВМ и ничего не поломать, поступим следующим образом:
Перейдем к практике
Для начала нам потребуется машина с установленным VirtualBox и Python. Я использовал Ubuntu 10.10, VirtualBox 4.0.4 и Python 2.6, так же тестировал на Windows 7 c Python 2.7. [C незначительными изменениями] всё должно работать и на других системах.
Чтобы API стало доступно нужно скачать и установить SDK с официального сайта www.virtualbox.org/wiki/Downloads. Для того, чтоб установить его на Ubuntu понадобилось прописать путь к каталогу с VirtualBox и запустить инсталятор. У меня это выглядело вот так:
# export VBOX_INSTALL_PATH=/usr/lib/virtualbox
# python vboxapisetup.py install
Под Windows устанавливаем аналогично
C:\vbpx\sdk\installer> c:\python27\python.exe vboxapisetup.py install
но при первом запуске скрипта на Windows 7 получил ошибку
ImportError: No module named win32com
Установил требуемый модуль — всё заработало. Скачать для своей версии его можно отсюда:
sourceforge.net/projects/pywin32/files/pywin32/Build216
В архиве с SDK лежит папка docs, а в ней в разных форматах документация по API. Это самый главный источник информации, поэтому советую пробежаться по ней глазами хотя бы для того, чтоб примерно представлять все наши возможности.
После изучения документации, а так же некоторых статей, ссылки на которые будут ниже у меня получилось вот что:
Disclaimer: возможно код не соответствует всем питоновым стилистическим правилам, т.к. обычно пишу на других ЯП. Если что-то режет глаз, пишите — поправлю.



















