안드로이드는 분명 리눅스 기반 맞습니다.

그리고 안드로이드와 리눅스는 분명 호환되는 부분이 많습니다. 그렇기에 Termux(https://termux.com/) 같은 앱도 존재합니다.

 

하지만 새삼스럽게도 리눅스에서 안드로이드 모바일 게임을 위한 앱플레이어는 마땅한게 없다는 이야기를 많이 들었습니다.

사실 당연하다면 당연한건데 리눅스에서 게임을 별로 잘 안 하거든요. 앱플레이어 같은거 만드는 곳이 주로 중국인데 중국에서 제대로 만들리가... (소위 채굴이 숨어있다던지 많은 일들이 있었습니다.)

 

아주 없지는 않았습니다. Genymotion이 꽤 괜찮은 그래픽 가속을 보여주는 안드로이드 가상머신이었으니까요. (https://www.genymotion.com/)지금도 상당히 괜찮고 꽤나 편리한 모습을 보여줍니다.

그런데 OpenGL의 버전은 계속 올라가는데 Genymotion의 OpenGL지원은 딱 OpenGL ES2.0까지인것 같습니다.

최신 게임에서는 텍스처가 많이 깨지더군요. (제 옵티머스 시스템 문제일수도 있습니다.)

 

사실 윈도우에서도 그렇지만 앱플레이어라는게 별게 아닙니다.

그냥 Android-x86(https://www.android-x86.org/)을 기반으로 x86, amd64 CPU에서 ARM혹은 AARCH64를 호환하는 libhoudini를 가상머신에 설치해서 돌아가게 만든 것에 불과합니다. 그리고 이러한 가상머신은 VMware, Virtualbox, Qemu등이 있지요.

 

그래서 처음에는 VMware를 써봤는데 그래픽가속이 되는데 역시 OpenGL ES 2.0이 한계였습니다. 옛날게임은 문제가 없지만 요즘 게임은 OpenGL ES 3.0을 넘어서 Vulkan으로 나오니 대응이 안 되는 겁니다.

 

Virtualbox는 그냥 화면이 안 뜹니다. 3D 가속을 넣으면 화면이 안 뜨는것으로 봐서 Virtualbox의 가상 그래픽카드는 지원이 안 되는 것 같습니다.

 

남은건... Qemu하나네요.

정확히 말하자면 Qemu/KVM입니다. KVM이라는게 커널기반 가상화라는건데 이거 하나만 써도 왠만한 리눅스 기반 가상화는 다 해먹을 수 있습니다. 그리고 레드햇의 전폭적인 지지를 지원을 받고 있기에 요즘의 가상화 서버는 이걸로 돌아간다고 보시면 됩니다.

 

https://linuxhint.com/android_qemu_play_3d_games_linux/

 

How to Run Android in QEMU to Play 3D Android Games on Linux

Android-x86 is a free and open source project that aims to provide Android images for x86 systems. With new features, numerous compatibility patches and bug fixes over Android Open Source Project, Android-x86 is the most robust solution currently available

linuxhint.com

최근에 발견한 것인데 QEMU와 KVM으로 안드로이드의 3D 게임을 돌리는 튜토리얼입니다.

 

대충 요약하면 우선 KVM이 지원 되는지 확인

egrep -c '(vmx|svm)' /proc/cpuinfo

여기서 0이 아닌 다른 숫자만 나오면 됩니다.

 

QEMU 및 KVM 설치 

sudo apt install qemu qemu-kvm
sudo adduser `id -un` kvm

그리고 안드로이드가 설치될 이미지 만들기

qemu-img create -f qcow2 androidx86_hda.img 64G

저는 넉넉하게 64GB를 넣었습니다. 요즘 폰은 1TB 넘어가는 세상이라 64GB는 작은편이지요.

그리고 Android-x86 iso이미지를 다운로드

https://www.android-x86.org/download.html

 

Download | Android-x86

 

www.android-x86.org

그건 알아서 여기서 버전 맞추어 알아서 잘 해주시면 됩니다.

그 다음 iso파일과 위에서 만든 img 파일을 같은 곳에 넣어주고 다음 명령을 실행합니다. 

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-device virtio-mouse-pci -device virtio-keyboard-pci \
-serial mon:stdio \
-boot menu=on \
-net nic \
-net user,hostfwd=tcp::5555-:5555 \
-device virtio-vga,virgl=on \
-display gtk,gl=on \
-hda androidx86_hda.img \
-cdrom android-x86_64-8.1-r3.iso

아래의 iso파일은 다운로드 받은 파일 이름에 맞추어 바꿔주셔야 합니다.

 

그러면 짠하고 QEMU가 실행되면서 안드로이드가 설치화면이 뜹니다.

처음 설치하시는 분은 감이 안 잡히실텐데 Installation 눌러주시고 Create/Modify 눌러주시고 N 눌러주시고 엔터,엔터 W 누르고 yes 순으로 해주시면 됩니다. 그리고 설치가 끝나면 Reboot

 

그 다음에는 안드로이드 폰 쓰시던 그 느낌으로 쓰시면 됩니다.

 

이제 다음부터는

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-device virtio-mouse-pci -device virtio-keyboard-pci \
-serial mon:stdio \
-boot menu=on \
-net nic \
-net user,hostfwd=tcp::5555-:5555 \
-device virtio-vga,virgl=on \
-display gtk,gl=on \
-hda androidx86_hda.img \

이렇게 마지막 줄을 제외한 나머지를 사용하시면 되는데...

 

복잡하죠?

그래서 그냥 이미지와 스크립트를 만들었습니다.

 

 

 

 

https://mega.nz/file/yEUBWQBI#DLBYSNGAAZ6m8AaNOv-J_WOXE4QOC5kTdVHdNI8C4Bs

 

 

1.03 GB file on MEGA

 

mega.nz

 

위 파일을 다운 받아 압축을 풀면

tar.gz파일은 압축파일이니 넘어가고 이렇게 3개의 파일이 나옵니다.

데비안, 우분투 용으로 설명합니다.

우선 qemu_install.sh파일을 실행(터미널에서 실행하세요. 관리자 권한이 필요합니다.)해서 qemu와 kvm을 설치하고 그 다음에 run.sh를 실행하면 그냥 세팅이 완료된 안드로이드가 짠하고 나옵니다.

qemu에서 안드로이드 부팅

만약 아무 화면이 안 뜨신다면 혹시 옵티머스는 아닌지 확인 부탁드리면서 옵티머스를 꺼주시면 됩니다.

Nvidia X server Setting 에서 PRIME Profile을 on-demand로 해주시면 됩니다. 그리고 필요할때마다 가속은 https://moordev.tistory.com/355

 

우분투에서의 Nvidia Optimus

Nvidia Optimus란 기술은 노트북과 같은 모바일 기기에서 배터리를 효율적으로 쓰기 위해 만들어진 기술입니다. 인터넷같이 가벼운 작업은 성능낮은 내장 그래픽으로 돌리고 게임같은 그래픽카드

moordev.tistory.com

여기를 참고

 

이제 그냥 쓰시면 됩니다. Play스토어에 구글로그인을 하고 앱을 설치하시면 됩니다. ARM Traslator도 설치가 되어 있어서 그냥 실행이 될겁니다.

 

흔한 안드로이드 태블릿의 화면 그대로

만약 인터넷이 안 된다면 와이파이 설정에서 VirtWifi 연결해주시면 됩니다. 다만 마우스가 문제가 될겁니다. Ctrl+Alt+G를 누르면 가상머신에 잡힌 마우스가 호스트로 나오게 됩니다. 

 

혹시나 하고 요즘 핫한 게임인

요거 돌려봤는데 아주 잘 되는군요. OpenGL ES 3.0이 되니까 어느정도 커버가 되는것 같습니다.

 

어쨌건 안드로이드 앱플레이어로 상당히 쓸만하지 않나요? 만약 리셋하고 싶다면 압축을 풀어서 img 파일을 덮어버리면 됩니다.

,