Etc/2021

[GCP] GCP(Google Cloud Platform)에서 AOSP Cuttlefish를 이용한 안드로이드 웹 에뮬레이터 사용하기 (feat. 오징어 발사)

메바동 2021. 6. 4. 17:07
728x90

 요즘 Flutter로 앱 개발하는 것을 공부하고 있는데, 언제 어디서나 같은 환경에서 공부하고 있던 코드를 이어서 진행하고 싶었다. 그래서 한 달 정도 클라우드에서 안드로이드 에뮬레이터를 돌리며 Flutter 공부를 하고 싶었다.

 

찾아보니 에뮬레이터는 가상화를 사용해야 하기 때문에 중첩 가상화(nested virtualization)를 지원하는 클라우드를 사용해야 했고, GCP(Google Cloud Platform)와 마이크로소프트의 Azure가 중첩 가상화를 지원하는 것 같았다.

Azure는 대학생 때 이미 무료 체험을 다 끝냈었고, GCP는 사용한 적이 없었다.

 

GCP를 처음 이용하는 사람은 3개월 동안 자유롭게 사용할 수 있는 300$의 크레딧이 주어지기 때문에 한 달 정도만 사용하면 되는 나한테는 높은 사양의 인스턴스를 만들어 사용하기 딱 좋았다.

 

그렇게 무료로 받은 크레딧으로 중첩 가상화 환경을 만들고 안드로이드 스튜디오를 다운로드하고 안드로이드 에뮬레이터를 실행했는데 아무래도 우분투 20.04 환경의 중첩 가상화에서는 안드로이드 에뮬레이터를 원활하게 돌릴 수 없었다.

 


그래도 포기할 수 없어 열심히 찾아보던 중 AOSP, 안드로이드 오픈 소스 프로젝트에서 진행 중인 cuttlefish에 대해 알게 되었다.

 

다음으로 오징어 발사! 구글 번역기를 돌리니 오징어 발사가 되었다.

 

물론 나는 클라우드 환경에서 안드로이드 에뮬레이터를 사용하기 위해 cuttlefish를 사용하지만 그냥 리눅스 환경이라면 cuttlefish를 이용해 웹 환경에서 에뮬레이터를 실행하거나, VNC를 사용하여 접속할 수 있다.

 

 

 

💡 사전 준비

우선 GCP에서 이용하려는 사람의 경우 이전 포스팅에 작성한 GCP 중첩 가상화 환경 구성하기 포스팅을 참고하길 바란다. GCP가 아닌 일반 리눅스 환경에서 구성하려는 사람도

 

grep -c -w "vmx\|svm" /proc/cpuinfo

 

명령어를 사용하여 다음과 같이 0이 아닌 숫자가 나오는지 확인해야 한다.

 

 

또는

 

cpu-checker를 사용해

 

sudo apt install cpu-checker -y
kvm-ok

 

kvm-ok 명령어를 실행했을 때 

 

 

다음과 같이 나와야 한다.

여기까지 문제가 없다면 이제 Cuttlefish를 위해 필요한 패키지들을 설치해 주어야 한다.

 

sudo apt-get install -y build-essential devscripts fakeroot git psmisc qemu-kvm unzip zip
sudo apt-get install -y cdbs config-package-dev debhelper

 

 

 

💡 Cuttelfish 사용하기

위 단계를 모두 마쳤다면 이제 Cuttlefish를 설치하고 사용하면 된다.

 

우선 터미널을 실행하고

 

git clone https://github.com/google/android-cuttlefish

 

git 명령어를 사용하여 Cuttlefish를 다운로드한다.

 

cd android-cuttlefish

 

그런 다음 다운로드한 Cuttlefish 폴더로 이동한다.

 

debuild -i -us -uc -b

 

위의 명령어를 입력한다. 만약 위에 있던 사전 준비를 하지 않았다면 이 단계에서 오류가 날 것이다. 

오류가 발생한다면 위에 사전 준비에서 건너뛴 부분이 없는지 다시 한번 살펴본다.

 

 

이렇게 Finished running lintian.이라고 뜬다면 그다음으로는

 

sudo dpkg -i ../cuttlefish-common_*_amd64.deb || sudo apt-get install -f

 

위의 명령어를 실행해 준다.

여기까지 모두 완료가 되었다면 sudo reboot를 이용하여 재부팅해준다.

 

재부팅이 완료되면 사용자 권한을 추가해 주어야 한다. 현재 접속 중인 사용자와 root 계정 모두 등록해 준다.

 

sudo usermod -aG cvdnetwork "${사용자}"
sudo usermod -aG kvm "${사용자}"

 

 

cat /etc/group | grep -E 'cvdnetwork|kvm'

 

을 입력하였을 때

 

 

위와 같이 등록한 사용자 이름이 붙어있다면 정상적으로 권한이 등록된 것이다.

 

이제 

 

http://ci.android.com/

 

Branch Grid

 

ci.android.com

 

이곳에 접속하여 AOSP를 다운로드한다.

 

 

접속하면 위와 같은 화면이 나오는데 branch는 사용할 특정 버전이 없으면 aosp-master 그대로 두고 다운로드하고 싶은 특정 버전이 있다면 검색을 해서 해당 버전을 다운로드하면 된다.

 

이제 가장 상단의 이름 중에서 aosp_cf_x86_64_phone을 찾고 userdebug를 눌러준다. 이렇게 하면 가장 최신 빌드가 나타나게 된다.

 

 

최신 빌드가 나타나게 되면 녹색의 넓은 부분을 클릭해준다.

그렇게 되면 하단부에 위와 같은 창이 나타나게 되는데 나타난 창의 Artifacts를 눌러준다.

 

 

그러면 이렇게 파일들이 나타나게 되는데 여기서 aosp_cf_x86_64_phone-img-${version}.zip 파일과 cvd-host_package.tar.gz 파일을 찾아 다운로드한다.

 

 

목록에서 파일을 찾아 클릭하면 다운로드가 시작된다.

혹시라도 파이어폭스의 사생활 보호 모드나 크롬의 시크릿 모드가 켜져 있을 경우에는 다운로드가 되지 않으니 다운로드할 때에는 해당 기능을 이용하지 않아야 한다.

 

이제 다운로드된 파일을 하나의 폴더에 풀어주면 된다.

 

mkdir cf
cd cf
tar xvf ${다운로드 경로}/cvd-host_package.tar.gz
unzip ${다운로드 경로}/aosp_cf_x86_64_phone-img-${버전}.zip

 

 

이제 Cuttlefish를 실행해 주기 위해 해당 경로에서

 

sudo HOME=$PWD ./bin/launch_cvd

 

명령어를 실행해 주면 https://localhost:8443에서 안드로이드 에뮬레이터를 사용할 수 있게 된다.

 

오징어 발사 성공!

 

보면 해상도의 상태가 매우 매우 매우 별로인 것을 볼 수 있다.

 

 

이는 초기 해상도 설정이 720x1280로 설정되어 있기 때문인데 이를 픽셀 5의 해상도와 맞춰주도록 하겠다.

 

 

 

💡 Cuttelfish 해상도 변경하기

해상도를 변경하는 방법은 정말 간단하다.

나는 우선 픽셀 5와 같은 해상도와 dpi로 설정해주려고 한다.

 

나무위키 감사해요.

 

우선 Cuttlefish를 실행 중이라면 우선 종료한다.

 

그다음 위에서 만든 cf 폴더의 etc/cvd_config에 있는 cvd_config_phone.json을 수정해주면 된다.

 

 

파일을 열어보면 위와 같이 내용이 적혀 있다. 그냥 저기서 수치만 변경해주면 끝이 난다.

 

 

이렇게 변경을 해 준 다음 저장을 하면 끝이다.

 

조금 더 선명한 오징어 발사

 

다시 Cuttlefish를 실행하면 적용이 된 것을 볼 수 있다.

 

 

VS Code에서 Flutter 프로젝트를 작업 중일 때 기기 목록에서도 Cuttlefish 에뮬레이터가 정상적으로 나타난다.

 

 

Flutter 샘플 프로젝트까지 정상적으로 구동되는 것을 확인할 수 있다.

 

 

 

 

GCP에 GUI 환경을 만들고 VS Code와 Cuttlefish를 이용하여 Flutter 앱 테스트를 할 수 있게 되었다!!

 

 

 

나는 아예 클라우드 환경에서 소스도 수정해 보면서 공부하려고 이렇게 만들었지만, 그냥 linux server에 Cuttlefish를 올려서 웹 에뮬레이터 환경을 구성해서 사용해도 충분히 좋을 것 같다.

 

가상 환경에서 안드로이드 에뮬레이터를 실행하고 싶거나 안드로이드 웹 에뮬레이터를 구성하고 싶은 사람들은 Cuttlefish를 사용하면 좋을 것 같다.

728x90