학교 프로젝트 수업으로 한 드론 회사와 컨택을 하게 되었다.
우리 팀이 맡은 일은 현재 회사의 드론을 제어하는 앱으로 사용중인 'qgroundcontrol'을 개선한 회사만의 앱을 만드는 것이다.
qgroundcontrol은 오픈 소스로, qt qml로 작성되어 있다.
???
먼저 QT는 GUI 프로그램 개발에 쓰이는 일종의 크로스플랫폼 프레임워크이고, QML은 Qt Modeling Language라고 한다.
모르겠으니 일단 빌드부터 시도해 보자!
우선, 윈도우에서는 오만가지 에러로 결국 실패했다. 결국 리눅스에서 진행해 보려 한다. Ubuntu 18.04이다.
먼저 qgroundcontrol의 developler guide를 보자
https://dev.qgroundcontrol.com/en/getting_started/
Getting Started · QGroundControl Developers Guide
No results matching ""
dev.qgroundcontrol.com
developer guide가 친절하게 잘 쓰여있다. 우선 프로젝트의 소스파일을 git clone으로 받아온다
- 저장소를 clone한다. 이때, git을 꼭 사용하라고 하는데 submodule을 업데이트하려면 git을 사용해야 한다고 한다.
git clone https://github.com/mavlink/qgroundcontrol.git --recursive - Update submodules :
git submodule update
다음은 qt를 설치해야 한다. 아래의 링크에서 받을 수 있다.
http://www.qt.io/download-open-source
Download Qt Open Source
The Qt framework is available under both open source and commercial licenses. Learn which license is right for you and get started with your development today!
www.qt.io
chmod +x qt-unified-linux-x64*
./qt-unified-linux-x64*
설치 과정에서 주의할 점이 하나 있다. qgroundcontrol은 qt 5.11.3버젼을 설치해야 한다.
왼쪽에 LTS에 체크 되어있는것을 풀고, Archive를 체크한 다음 Refresh를 누른다.
잠깐 기다렸다가, 5.11.3버젼에 체크하고 진행한다.
* 5.11.3 하위 메뉴를 열여서 필요한 것만 체크
설치가 완료되고 qt creator를 열어 groundcontrol project를 열어서 실행하려 해 보면
안된다
침착하게 sudo apt install libsdl2-dev
재부팅
하면 드뎌 리눅스 환경에서 빌드는 된다
====
이제 안드로이드에서 빌드를 해 보자
sdk, ndk, jdk를 설치해야 한다
1. sdk
일단 안드로이드 스튜디오 커맨드라인 툴 설치
(안드로이드 스튜디오가 있으면 건너뛰어도 되고, 안드로이드 스튜디오 쓸거면 커맨드라인 툴 말고 안드로이드 스튜디오 ide 설치해도 괜찮음!)
https://developer.android.com/studio
다운받고 원하는 디렉토리로 옮긴 다음 unzip sdk-tools*
그냥 속편하게 안드로이드 스튜디오 다운 ㄱ..
2. 안드로이드 ndk 다운
https://developer.android.com/ndk/downloads/index.html?hl=ko
NDK 다운로드 | Android NDK | Android Developers
개발 플랫폼에 맞는 NDK 패키지를 선택합니다. NDK 최신 버전 및 이전 버전의 변경사항에 관한 정보는 NDK 업데이트 기록을 참조하세요. 안정적인 최신 버전(r20) 플랫폼 패키지 크기(바이트) SHA1 체크섬 Windows 32비트 android-ndk-r20-windows-x86.zip 814417431 b605f7e2e7585af2fc9d59fe9ddad86b64b2bf03 Windows 64비트 android-ndk-r20-windows-x86
developer.android.com
다운받고 원하는 디렉토리로 옮긴 다음 unzip android-ndk*
3. openjdk 설치
*최신버전이 좋을 줄 알고 openjdk11 설치했다가 sdkmanager가 안열려서 8으로 다시 설치했다 ㅁㅊ..왜그런가 보니까 안드로이드에서 쓰는 자바 클래스나 함수같은것들 몇개가 사라지거나 옮겨졌다고 한다..8을 설치하자
# sudo add-apt-repository ppa:openjdk-r/ppa
# sudo apt install openjdk-8-jre
# sudo apt install openjdk-8-jdk
# java -version 으로 잘 설치되었는지 확인해보자
이제 필요한 3가지를 다 받았다. 다음으로 환경 변수를 설정해 주자
vi ~/.bashrc
export PATH=$PATH:/home/inhan/android-ndk-r20:/home/inhan/sdk/tools:/home/inhan/sdk/tools/bin (ndk폴더 경로,sdk경로, sdk/bin 경로)
source ~/.bashrc
그다음 sdkmanager로 안드로이드 빌드에 필요한 것들을 설치해야 한다.
sdkmanager --update
sdkmanager --list로 설치 가능한 리스트 확인 가능
sdkmanager "platforms;android-버젼"
sdkmanager "build-tools;버젼"
sdkmanager "platform-tools"
sdkmanager "emulator" (에뮬레이터로 실행할 사람만)
sudo apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
sudo apt-get install libsdl1.2debian:i386 (에뮬레이터로 실행할 사람만)
안드로이드 스튜디오 sdkmanager에 들어가서 필요한 것들을 설치해준다.
뭐 이것저것 다 설치하고 나서 qt creator-tools - tools - option - devices - android에 들어가서
jdk location, sdk location, ndk location을 차례대로 설정해 준다.(각자 설치한 경로로 지정!!)
*안드로이드 스튜디오 디렉토리 (Android) 안에 sdk폴더를 지정하면 된다
* jdk location을 찾는법은 sudo update-alternatives --config java 를 입력하면
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
나의 경우는 뭐 이런식으로 나오는데 /usr/lib/jvm/java-8-openjdk-amd64/까지 쳤을 때 OK가 떴다
다음으로 kits에서 android kits가 생겼는지 확인
혹시나 안뜨면 뭐 한번씩 닫았다 열어 보자
그러고 Option 창을 닫은 다음 qtcreator 왼쪽 메뉴에서 project 선택
Build&Run에 있는 새로 추가된 Android 관련 녀석들을 선택해주면 된다(첫번째 Android for armeabi-v7a로 선택해야함)
그렇게 빌드를 하면
또 안된다 아오 진짜
g++ 대신 clang을 사용하도록 지정해 줘야 한다.
당황하지 말고 다시 왼쪽 메뉴에서 Projects를 누른다
Build Steps 처음 qmake 오른쪽에 details를 눌러서
Additional arguments에 -spec android-clang 입력
그리고 창 맨위에 Build Settings라고 적힌 곳 밑에 있는 Debug를 Release로 바꿔서 똑같이 해준다.
이렇게 빌드를 하고 실행을 시키면
진짜 드디어 핸드폰에 설치가 된다
근데 이 앱은 Android 이전 버전에 맞게 개발되었기 때문에 제대로 작동하지 않을 수 있습니다
라는 오류가 뜨며 종료된다
그냥 안할래..
이다음엔 어떻게 해야 넘어갈 수 있는지 혹시 아시는 분 계시면 알려주시면 감사하겠습니다..