Programming/Qt

VirtualBox 가상환경의 리눅스(Ubuntu)에 안드로이드용 Qt 설치 및 AVD(Emulator)에서 실행해 보기

변화의 물결1 2024. 9. 13. 16:48

 

 

 

 

안녕하세요.

 

리눅스용 안드로이드용 Qt 설치해야 할 일이  있어서 테스트한 내용을 정리해 보았습니다.

안드로이드용 Qt를 윈도우에서는 설치하는 것은 크게 문제 되지 않았습니다. 의외로 리눅스에서는 조금 어려움이 있었습니다. 안드로이드 스튜디오, 리눅스, JDK 등 버전 호환성 잘 맞게 설치하여 한번에 실행된다면  좋은 일이라고 생각됩니다.

 

 위와 버전 문제등으로 AVD(에뮬레이터)가 작동하지 않는 등 경우가 있다는 것도 알아두시면 좋을 듯합니다.

 

결론적으로 PC 테스트 환경 등으로 여러 곳에 테스트하지 못해서 완벽하게 동작한다는 결론을 보지 못했습니다. 그렇지만 이렇다 정도 참고하시면 좋을 듯합니다.

 


 

1. 테스트 환경

 

 1차 테스트는 VirtualBox에 Ubuntu22.04 LTS 버전을 설치해서 진행하였으며, 2차는 기존에 Ubuntu20 버전이 설치된 것이 있어서 그 위에 설치해 보았습니다.

 

 

2. 안드로이드 스튜디오 설치

 

 현재 버전은 윈도우처럼 Installer로 되어 있지 않아서 몇 가지 작업을 해주어야 합니다.

설치방법은 그렇게 어려운 것이 아니라서 간략하게 기술했습니다. 조금 자세한 내용 링크를 참고하시면 됩니다.

 

간단하게 요약하면,

1) apt로 update, upgrade

sudo apt-get update && sudo apt-get upgrade

2) 추가 32bit 라이브러리 설치

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386

3) OS 버전에 맞은 tar.gz 다운로드하기

https://developer.android.com/studio?hl=ko

4) 원하는 디렉터리를 생성하고 tar.gz을 옮긴 후 파일 압축 풀기

tar zxf androidStudio.tar.gz (예)

5) 압축 푼 디렉터리 내에 android-studio/bin 디렉터리로 이동해서 설치 스크립트 실행

 ./studio.sh

 

6) 설치 화면에서 기타 설정 등 하고 Finish

  

 

2. JDK 설치

JDK 설치는 간단하게 진행할 수 있습니다. 여기서는 JDK 17버전을 사용했습니다. apt로 파일을 설치합니다.

 

$ sudo apt install openjdk-17-jdk

 

environment 파일에서 JAVA_HOME 환경변수를 설정한다.

 

$ sudo vi /etc/environment

 

 JAVA_HOME=”/usr/lib/jvm/java-17-openjdk-amd64”

 

 

 

환경 변수 적용 및 확인

$ source /etc/environment
$ echo $JAVA_HOME

 

 

참고) JDK 삭제하고 싶다면,

 

$ sudo apt remove openjdk-17-jdk

 

 

3. Qt6.7 for Android 설치

 

1) 필요 라이브러리 설치

 

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get -y install build-essential openssl libssl-dev libssl1.0 libgl1-mesa-dev libqt5x11extras5 '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev

 

 

2) Qt6.7 다운로드 및 설치

 

 Qt6.7 버전을 설치하는 방법은 2가지가 있을 수 있습니다. 소스를 받아서 빌드해서 설치하는 방법과 인스톨러로 설치하는 방법이 있습니다. 여기서는 간편하게 인스톨러 버전으로 진행했습니다.

 

- 소스 다운로드

https://download.qt.io/archive/qt/

 

- Installer 다운로드

https://download.qt.io/official_releases/online_installers/

 

 

 

다운로드를 완료했다면 실행 권한을 주고 프로그램 설치합니다.

 

$ chmod +x qt-online-installer-linux-x64-4.8.0.run
$ ./qt-online-installer-linux-x64-4.8.0.run

 

 

인스톨러를 이용할 경우 로그인이 필요합니다. 그래서 가입한 후 다음을 실행할 수 있습니다.

 

 

 

인스톨러 버전마다 선택하는 메뉴형태가 달라지던데, 만약 Linux Desktop용 프로그램을 만들지 않고 안드로이드나 iphone만 한다면 Qt for Mobile로 선택하고, 모든 것이 다 필요하다 거나 선택적으로 하겠다면 Custom Installation을 선택하면 됩니다.

 

 Custom Installation을 선택하고 Qt버전(Qt 6.7.2)을 선택하면 모든 모듈이 선택되어 각종 소스와 라이브러리를 다운로드하는데 오랜 시간이 걸립니다. 불필요한 옵션을 제거하고 설치하시기를 권장드립니다. 

 

Qt for Mobile로 할 경우 모바일 빌드 환경에 필요한 것만 다운로드하므로 빨리 설치됩니다.

 

Linux용 Qt Component 다운로드하는데 서버 쪽 속도가 나오지 않아 시간이 오래 걸렸지만, 기다리며 설치를 마무리했습니다. 불필요한 소스나 라이브러리 선택하지 않아도 시간 오래 걸렸습니다.

 

 

  

Qt Creator실행하면 메인화면을 볼 수 있습니다.

 

 

 

3) Android를 위한 환경 설정

 

 메뉴는 Qt 버전마다 조금 차이가 있었습니다. 6.7.2 기준으로 보면 “Tools->External->Configure...->Kits” 가서 보면 “안드로이드 관련한 내용이 없네”라고 할 수 있습니다.

 

 

 

 Device 탭으로 이동해서 Android 탭으로 이동합니다.

 

 

“Set Up SDK” 버튼을 누르고 SDK Manager 누르면 Android 설치하면서 기본 설치한 버전에 맞는 여러 가지 내용들을 가져옵니다.

 

 

JDK Location에 앞에서 설정한 디렉터리를 입력합니다. apt로 17버전을 설치했다면 비슷할 것이라고 생각됩니다. /usr/lib/jvm/java-17-openjdk-amd64

 

사용할 안드로이드 OS 혹은 API에 맞는 버전의 SDK를 SDK Manager에서 선택해서 추가로 설치합니다. 현재 시점에서 Platform 35 SDK는 잘 동작하지 않았습니다.

 

 

 

4) AVD 추가

 

 에뮬레이터를 생성하기 위해서 Device의 Device 탭으로 이동해서 “Add->Android Device”를 선택합니다.

 

 

 

 Name을 지정하고 Architecture는 x86_64, Target API는 설치한 SDk 및 테스트 위한 버전을 선택합니다.

 

 

 

이제 Kits 메뉴로 돌아가면 안드로이드 빌드 환경이 나타난 것을 알 수 있습니다. 그런데 안드로이드 빌드 설정(Auto-detected)에 노란색 경고 아이콘이 나온다면 Qt Creator를 한번 종료 후 재시작하면 정상적으로 나타납니다.

 

 

 

4. Widget Application 실행

 

Create Project를 해서 간단한 Widget 하나 생성합니다.

 

 

 

Kit 설정은 Android Qt ... x86_64를 선택합니다. 만약 에뮬레이터가 아니라 최신 스마트폰에 바로 디버깅 및 테스트한다면 arm64_v8a를 선택하면 됩니다. 둘 다 선택해도 됩니다.

 

 

 

실행할 장치(Run device)와 빌드 옵션을 선택합니다. 앞에서 만든 Emulator와 Debug모드를 선택합니다. 스마트폰 직접 개발할 경우 개발자(디버그) 모드를 활성화해서 연결하면 Run Device로 나타납니다.

 

 

 

 

프로젝트 설정 메뉴 중 “Build Android APK” 항목에서 개발에 맞는 SDK와 build-tools 버전이 맞지 않으면 빌드가 되지 않습니다. 그래서 서로 잘 확인 혹은 변경해 보면서 테스트가 필요합니다.

 

 

 

실행을 버튼을 눌러 Build와 Deploy를 진행합니다.

결론적으로 Build 되었지만, Deploy에서 에러가 발생합니다. AVD가 실행되지 않았기 때문입니다.

 

 

 

첫 번째 문제는

처음 실행을 하면 VirtualBox(가상환경)에서 가상 장비를 돌리기 때문에 추가적인 설정(가상화기능을)을 해줘야 했습니다. 처음에는 VirtualBox에 "설정->시스템->프로세서" 메뉴 중 VT-x 부분을 선택할 수가 없습니다.

  

간단하게 윈도우 명령어 창에서 VirtualBox 경로로 이동한 후 아래와 입력해 주면 가상화 기능을  활성화할 수 있습니다.

ubuntu22_android_note_note 부분은 VirtualBox에서 사용자가 만든 가상머신 이름입니다.

 VBoxManage.exe modifyvm ubuntu22_android_note_note --nested-hw-virt on

 

 

위와 같이 설정을 해주면 에스티드 VT-x/AMD-V 가 선택됩니다.

 

 

 

확장된 기능에 네스티드 VT-x가 선택된 것을 확인할 수 있습니다. 

 

 

위와 같이 설정하고 VirtualBox를 다시 실행하고 Qt로 실행을 하면 VT-x와 GPU 관련 알림 창이 나타납니다.

 

 

 

PC 사양이 문제일 수도 있지만,  Emulator 창이 나타나는데 엄청 느리게 실행되었습니다.

중간중간에 “Emulator is not responding” 메시지가 나타나지만 Wait를 해주면 실행 결과를 볼 수 있습니다.

 

 

 

UI에 버튼을 추가한 widget App를 확인할 수 있습니다.

 

 

 

두 번째 기존 VirtualBox가 아닌 Ubuntu 20 버전 PC에서 동일하게 작업했을 경우,

 Nvidia 그래픽카드를 최신 버전까지 업데이트해 주었는데, 어떤 이유인지 모르게만, 그래픽카드 관련 에러라는 메시지를 내면서 AVD가 실행되지 않았습니다. Android Studio에서도 유사한 결과가 나왔습니다.

 

 

5. 결  론

 

 핑계(?)이기도 하지만, 테스트한 환경이 VirtualBox, 기존 개발 PC다 보니 깔끔하게 결론으로 보기에는 결과가 부족한 듯합니다.

 

 Linux 환경 세팅만 잘해주면 VirtualBox내의 Linux에서 AVD를 실행해서 동작하는 것을 확인했습니다. 참고로 많이 느리게 보일 수 있다입니다. ^^;

 

 기존 우분투 리눅스에서도 Emulator(AVD)로 실행해서 Qt for Android를 실행할 수 있지만, 그래픽 카드등 드라이버 문제로 작동하지 않을 수도 있다입니다.

 

 

감사합니다.

 

 

<참고 사이트>

1. 안드로이드 스튜디오 리눅스 설치

https://developer.android.com/studio/install?hl=ko#linux

2. JDK 설치

https://languagestory.tistory.com/154

3. Qt 설치

http://web.stanford.edu/dept/cs_edu/resources/qt/install-linux

4. Enable Nested VT-X/AMD-V in Virtualbox: How to?

https://bobcares.com/blog/enable-nested-vt-x-amd-v-in-virtualbox/

 

 

반응형