1 октября 2012 г.

Вертикальная (portrait) ориентация на Android x86 под VirtualBox

Думаю, большинство разработчиков и просто продвинутых пользователей уже слышало про порт ОС Android под x86 процессоры, который позволил запускать Андроид на компьютере через виртуальную машину, что намного производительнее, чем родной гугловский эмулятор. Для тех, кто не знаком с этим замечательным проектом, отправляю читать Тему на 4pda.

Итак, после того, как виртуальная машина настроена и работает, может возникнуть одно затруднение: не все приложения поддерживают альбомный режим, в котором по умолчанию работает Android x86. В этом случае они отображаются повёрнутыми на 90°, что, конечно, помогает размять шею, но едва ли удобно :). К тому же мышь при этом не разворачивается, что приводит к отличному разрыву шаблона.
Процесс добавления портретной ориентации несложен, но содержит несколько граблей, по которым я потоптался и которые изложу ниже.


Основная идея в добавлении портретного режима — это добавление собственного экранного разрешения виртуальной машины с другим (обратным) соотношением сторон. Т.е. если разрешение для альбомного режима 800*640, в портретном оно будет 640*800. К сожалению, менять ориентацию можно будет только через ребут виртуальной машины: на лету такой возможности нет.
Что ж, приступим к шаманствам.
Сперва добавим нужное разрешение в список опций VirtualBox. Закрываем виртуалку, открываем командную строку в директории, где установлена VirtualBox, и выполняем команду
VBoxManage setextradata "<And86_VM_Code>" "CustomVideoMode1" "400x600x16"
где <And86_VM_Code> — название вашей виртуалки с Андроидом (перечень всех виртуалок можно посмотреть командой VBoxManage list vms), а цифры 400x600 можно изменить на другие по вкусу. Главное — не менять название  CustomVideoMode, т.к. оно фиксировано. Можно добавлять несколько разрешений под другими номерами (CustomVideoMode2,  CustomVideoMode3, ...), но базовое название должно оставаться.

Запускаем виртуальный Андроид и дожидаемся "голубого экрана" с выбором вариантов загрузки.

Не мешкая (у нас несколько секунд, после чего начнётся загрузка первого варианта), выбираем Debug mode. Будет выдано энное количество строк, и последними должны идти такие:

Теперь всё готово к редактированию списка вариантов загрузок. Вводим команду
vi /mnt/grub/menu.lst


Указанный файл будет открыт в редакторе (на самом деле, редактором его может назвать лишь стойкий духом, неподготовленного человека он ввергнет в пучину ужаса. Но что есть, то есть, будем иметь дело с ним). Как видно, в файле содержатся данные тех трёх вариантов загрузки, которые были нам предложены на "голубом экране". Нам надо добавить новый пункт. Для этого копируем строки имеющегося пункта по следующей схеме:
1. Перевести курсор в конец последней непустой строки, нажать a, затем Enter и Escape. Это мы вставили новую пустую строку в конец файла.
2. Подвести курсор к любой строке, начинающейся с title.
3. Ввести команду yy, что скопирует текущую строку в буфер обмена.
4. Подвести курсор к пустой строке в конце файла.
5. Ввести команду p.
6. Повторить пп. 2-5 со строками kernel... и initrd...

Теперь у нас должно быть два одинаковых варианта загрузки. Переходим к редактированию командой i. Изменяем свежедобавленные строки следующим образом: в строке title... переименовать название варианта загрузки (между скобок), в строке  kernel... добавить текст DPI=160 vga=ask после слова s3_mode. То есть итоговые строки будут выглядеть примерно так (цветом выделены добавляемые части):
title Android-x86 2.3-RC1 (Custom video mode)
kernel /android-2.3-RC1/kernel_root=/dev/ram0 androidboot_hardware=eeepc acpi_sleep=s3_bios,s3_mode DPI=160 vga=ask SRC=/android-2.3-RC1 SDCARD=/data/sdcard.img
Строку initrd... менять не нужно.

Жмём Escape, cохраняем изменения командой :w, выходим из редактора командой :q.
Проверяем, что всё правильно, введя команду
cat /mnt/grub/menu.lst

Вводим команду exit, потом, через некоторое время, ещё раз exit. Это перестраховка на всякий случай, т.к. у меня пару раз изменения не сохранились, когда я после редактирования сразу делал сброс виртуалки.

Перегружаем виртуалку через меню VirtualBox (Машина - Сброс). В списке вариантов на "голубом экране" должен появиться наш:
Пробуем загрузится в нём, должен появиться запрос на вывод списка доступных разрешений и собственно сам список:

Ура! Последним в списке идёт то, что нам нужно. Для запуска ОС с этим разрешением достаточно ввести его код (в моём случае — 360).
Вуаля!



P.S. Для внеклассного чтения: Перечень команд vi (англ.)

23 комментария:

  1. Спасибо тебе, чувак. Только ты смог так разжевать,и только благодаря тебе я смог повернуть экран. Спасибо огромное заэту статью

    ОтветитьУдалить
    Ответы
    1. Привет! не надо запускать androidx86 через виртуалку, это прога ставится точно так же как и винда только на комп и занимает копеечное место, единственно нужно выделить (создать) диск на 10ГБ и вставлять ОС туда, а при загрузке компа уже выбирать какую ОСь будешь запускать винду,юбунту или андроид))

      Удалить
    2. Ребутать комп для того, чтобы поиграться с Андроидом, не кажется мне разумным

      Удалить
  2. при вводе
    D:\Games\Virtualbox>VBoxManage setextradata "" "CustomVideoMode1" "40
    0x600x16" выдает следующие
    VBoxManage.exe: error: Could not find a registered machine named ''
    VBoxManage.exe: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), compo
    nent VirtualBox, interface IVirtualBox, callee IUnknown
    VBoxManage.exe: error: Context: "FindMachine(Bstr(a->argv[0]).raw(), machine.asO
    utParam())" at line 804 of file VBoxManageMisc.cpp

    D:\Games\Virtualbox>

    ОтветитьУдалить
  3. т.е. привводе VBoxManage setextradata "" "CustomVideoMode1" "400x600x16"

    ОтветитьУдалить
  4. название виртуалки здесь в комментах почему то скрывается

    ОтветитьУдалить
  5. Автор, огромное тебе спасибо! Пытался по другим способам описанным в инете пробовать, но не получалось. Правда копировать строки не получилось, но ввести заново копию строки труда не составило ^^" Благодарю от всей души)

    ОтветитьУдалить
  6. На маркете ищете rotate и выбираете на свой вкус и цвет

    ОтветитьУдалить
  7. Приложение Rotate не меняет разрешение экрана, а дает возможность в альбомном режиме запускать приложения книжного формата, но это сильно не меняет ситуацию, т.к. нижняя часть картинки или меню тупо обрезается, что делает приложение не удобным или вообще не функциональным.

    ОтветитьУдалить
  8. Попробовал сделать это для Андроид 4.4 - не получилось. Там нет s3_mode. Вставил DPI=160 vga=ask перед SRC=, но не помогло. Нет нужного видеорежима в списке. Может vesa вместо vga писать надо?

    ОтветитьУдалить
  9. И если выбрать имеющийся в списке видеорежим, то размеры окна соответственно изменяются, но в нем вместо загрузки Андроид постоянно выводятся какие-то сообщения об ошибках.

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. У меня запускаются разрешения только с 16 битным цветом, если выбрать 32 бита ситуация такая же как Вы описали!

      Удалить
    3. У меня стоит Xubuntu и найти для редактирования файл с таблицей разрешений мне к сожалению не удалось((

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
    5. "У меня стоит Xubuntu и найти для редактирования файл с таблицей разрешений мне к сожалению не удалось(("
      Не понял. Редактирование списка доступных разрешений делается через VBoxManage. А menu.lst находится внутри виртуалки с Андроидом. Причем тут Хубунту?

      Удалить
  10. Этот комментарий был удален автором.

    ОтветитьУдалить
  11. Всем привет!Сейчас fndroidx86 может становиться как самостоятельная ОС на ПК, ненужно запускать через виртуальные машины (если у вас конечно не 32 гектара памяти)я опробовал её через неделю после её выхода, работает нормально, удалил потому что ставил для игры, но она идет только в горизонтальном положении, а так экран на всём остальном автоматом устанавливается так как положено,единственно нужно выделить (создать) диск на 10ГБ и вставлять ОС туда, а при загрузке компа уже выбирать какую ОСь будешь запускать винду,юбунту или андроид))

    ОтветитьУдалить
    Ответы
    1. Почему 32 гектара? Виртуалка пойдет, если есть хотя бы полгига свободной оперативы. Да и ребутаться в андроид едва ли многим понравится.

      Удалить
  12. CTRL+F9 CTRL+F10 CTRL+F11 CTRL+F12 в зависимости от нужной ориентации в уже запущенном эмуляторе VirtualBox и ненадо никаких заумных настроек делать

    ОтветитьУдалить
  13. Поставил Androidx86 на обычный ПК. Запускаю приложение для портретной ориентации. В итоге сам экран не поворачивается, а само приложение просто по середине экрана.
    Может в самом образе Androidx86 нужно что-то править?

    ОтветитьУдалить