윈도우 또는 리눅스환경에서 Qt프레임웍기반의 안드로이드를 위한 프로그램을 개발할 수 있다. 이글에서는 윈도우 환경에서 개발하는 방법을 설명한다.

 

먼저 안드로이드를 위한 컴파일된 Qt를 설치해야하는데 Qt 홈페이지를 방문해서 Qt Online Installer for Windows를 다운로드 받아 실행하거나 Qt가 설치되어 있다면 MaintenanceTool 을 실행한다.

 

Select Components에서 Android x86 및 Android ARMv7을 선택하고 설치한다.

 

안드로이드용 Qt설치가 끝났다면 안드로이드 개발관련 도구들을 다운로드받아야하는데 Android 스튜디오를 다운받을 수 도 있지만 이 글에서는 명령줄 도구로된 것을 사용할 것이다.

 

참고로 Android SDK 도구 버전 25.3.0 이상에서는 SDK 패키지 관리를위한 sdkmanager 와 AVD (Android Virtual Device) 관리를 위한 avdmanager를 명령 줄 도구로만 제공한다는 점을 알아두기 바란다.

 

그리고 한가지 더 중요한 사항은 Qt 버전을 v5.9 이하로 개발할 경우 SDK 도구 패키지 v25.2.5 이하를 사용한다.

 

Android SDK 다운로드 및 설치

 

Android NDK 다운로드 및 설치

Java JDK 다운로드 및 설치

 

윈도우에서는 기본 USB드라이버로 디버깅할 수 없으므로 Google USB드라이버를 설치한다.

CMD(명령프롬프트)를 실행하고 sdkmanager 폴더로 이동한 후 sdkmanager.bat "extras;google;usb_driver" 실행.

(리눅스나 맥에서는 필요치 않다. 자세한 내용은 이곳을 참고)

 

QtCreator설정

Option - Devices의 Android탭에서 JDK, SDK, NDK의 설치 및 폴더 경로를 설정한다. 

 

SDK 25.3 이후  SDK Manager, AVD Manager는 더이상 GUI를 제공하지 않지만 Qt Creator는 Android package목록을 제공하므로 간단하게 패키지를 설치할 수 있다.

 

패키지 설치 

 

이제 안드로이드 디바이스를 연결하고

다음과 같은 디버깅을 허용할지 묻는 팝업이 뜨면 확인을 누른다.

 

프로젝트를 만들때 kit은 아래처럼 처음에 설치한 Android kit을 선택한다.

 

프로젝트 생성 완료 후 Run을 실행하고 그림처럼 연결된 안드로이드 디바이스를 선택하면 잠시 후  선택한 장치에서 프로그램이 실행된다.

 

아래 캡쳐 이미지는 Qt기본 예제(webView)를 안드로이폰에서 실행한 것이다. 

블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,

전에 Qt4.8 버전에서의 정적빌드하는 방법에 대해 설명했는데,

이번에는 Qt5.4버전에서의 정적빌드에 대해 알아보겠습니다.

Qt4.8버전과 대략적으로 비슷하지만 약간 달라진 부분이 있습니다.

이제 설명을 시작하겠습니다.


http://www.qt.io/download-open-source/# 


먼저 위의 링크로 접속해서 Qt5.4 offline을 다운받아야 합니다.


 


하단에 Windows Host 제목의 Qt5.4.0 for Windows 32bit (MinGW 4.9.1, 852MB) 를 다운받아 설치합니다.

설치과정은 별다른 설정이 없으므로 생략합니다.


http://download.qt.io/official_releases/qt/5.4/5.4.0/single/

이제 위의 링크로 접속해서 소스코드를 다운받습니다.


qt-everywhere-opensource-src-5.4.0.zip


과 같은 이름의 파일이 있습니다.

해당 파일을 다운받습니다.


위의 Qt5.4 오프라인 버전을 설치하면 C:\Qt\Qt5.4.0\5.4폴더가 있습니다.

이 위치에 qt5-opensource-src-5.4.0.zip파일을 압축해제 해줍니다.


 


그러면 위와 같이 폴더가 존재하게 됩니다.

(위의 android_armv7은 아마 안보일겁니다. 제가 안드로이드버전을 설치해서 보이는 겁니다.)


C:\Qt\Qt5.4.0\5.4\qt-everywhere-opensource-src-5.4.0\qtbase\mkspecs\win32-g++


위의 경로에 보면 qmake.conf파일이 있습니다.

해당 파일을 메모장으로 열어줍니다.


중간에 QMAKE_LFLAGS가 있습니다.


QMAKE_LFLAGS            = -static -static-libgcc


다음과 같이 수정해줍니다.

그리고 저장한 후 닫아줍니다.


 


시작에서 Qt 프롬프트를 실행합니다.

위의 사진과 같은 곳에 Qt5.4.0 프롬프트가 존재할겁니다.(사진은 퍼온겁니다.)


콘솔창에 다음과 같이 입력합니다.


cd "C:\Qt\Qt5.4.0\5.4\qt-everywhere-opensource-src-5.4.0\qtbase"

그리고 다음을 입력합니다.


configure -static -release -opengl desktop -opensource


그리고 묻는 창에 y를 입력하여 configure를 진행합니다.

1분 내외로 작업이 끝나는데 이후에 다음과 같이 입력합니다.


mingw32-make sub-src


그러면 30분 내외의 시간동안 정적빌드에 들어갑니다.

 


전부 완료되면 다음과 같이 결과가 보입니다.


이제 창을 닫고 Qt Creator를 실행합니다.

메뉴바에서 Tool - options를 클릭합니다.




왼쪽의 Build & Run탭에서 Qt Versions 탭으로 간 다음, Add를 클릭합니다.



C:\Qt\Qt5.4.0\5.4\qt-everywhere-opensource-src-5.4.0\qtbase\bin


위의 경로에 보면 qmake.exe가 있습니다.

이것을 선택하고 열기를 누릅니다.

그리고 Version name을 적절히 변경해줍니다. 저는 Qt5.4.0(qt-static)으로 지었습니다.

 

다시 Kits 탭으로 가서 Add를 클릭합니다.

그리고 Name을 Qt5 static으로 입력하고, Qt version을 방금 만든 Qt5.4.0(qt-static)으로 선택하고 OK를 클릭합니다.


 

이제 새로운 프로젝트를 만들어서 Release모드로 실행해보면 다음과 같이 제대로 빌드 후 실행이 되는 것을 확인할 수 있습니다.


 


빌드된 폴더에 들어가서 실행파일을 보니 용량이 14메가바이트로 굉장히 늘었음을 확인할 수 있습니다.

이제 이 파일을 Qt를 설치하지 않은 다른 컴퓨터에서 원활하게 실행할 수 있게됩니다.

여기까지가 Qt5.4버전에서의 정적빌드 방법입니다.


여기서 조금 더 개선된 방식을 사용하자면 용량을 줄이는 방법이 있습니다.


제가 첨부파일로 올린 upx391w.zip을 다운받아 압축을 풉니다.

저는 이곳에 upx.exe파일이 있습니다.

C:\Users\remoc_000\Desktop\upx391w\upx391w\upx.exe


그리고 방금 빌드한 파일은 다음 경로에 있습니다.


C:\Users\유저\Documents\Qt\build-qt_static_001-Qt5_static-Release\release\qt_static_001.exe


이제 명령 프롬프트를 실행합니다.

명령프롬프트는 시작 - 보조프로그램에 있습니다.


명령 프롬프트에 다음과 같이 입력합니다.

"C:\Users\유저\Desktop\upx391w\upx391w\upx.exe" -9 -o "C:\Users\유저\Documents\Qt\build-qt_static_001-Qt5_static-Release\release\result.exe" "C:\Users\유저\Documents\Qt\build-qt_static_001-Qt5_static-Release\release\qt_static_001.exe"

 


그러면 다음과 같이 압축이 진행됩니다.

사용하지 않는 코드는 버리는 과정입니다.


 그러면 이렇게 완료가 됩니다. 


그리고 result.exe파일이 생성되면서 용량은 5.4메가바이트로 1/3로 줄어듭니다.

이제 네이버 블로그에도 올릴 수 있게되었네요.


여기까지가 Qt5.4 정적빌드 방법입니다.

블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,

환경은 아래와 같습니다.
OS: Ubuntu 14.04 LTS (32bit)
Cross compiler: arm-linux-gnueabi


1. tslib 설치

git clone https://github.com/kobolabs/tslib
 * 버그 fix 버전.

cd tslib

chmod 755 autogen-clean.sh
chmod 755 autogen.sh

./autogen-clean.sh
./autogen.sh

./configure --build=i386-linux --host=arm-linux -prefix=/rootech/lib/tslib CC=/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc CXX=/usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++ \
--enable-shared --disable-h3600 --disable-corgi --disable-collie --enable-input --disable-arctic2 --disable-ucb1x00 --disable-mk712

make
sudo make install

sudo rm /rootech/lib/tslib/etc/ts.conf
sudo vi /rootech/lib/tslib/etc/ts.conf
{

module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

} // 이 부분은 configure 한 설정에 맞게 필요한 모듈의 주석을 지워주시면 됩니다.

cd /rootech/lib/tslib/lib
sudo ln -s libts-1.0.so.0.0.0 libts-0.0.so.0



2. Qt5.3.1 소스 다운로드 후 압축해제
 * 다운은 아래 주소에서 가능
http://download.qt-project.org/archive/qt/5.3/5.3.1/single/

sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev

sudo apt-get install libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev



3. qmake.conf 파일 수정
cd qt-everywhere-opensource-src-5.3.1
vim ./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

...

  1. modifications to g++.conf
QMAKE_CC                = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc
QMAKE_CXX               = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++
QMAKE_LINK              = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++
QMAKE_LINK_SHLIB        = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-g++

  1. modifications to linux.conf
QMAKE_AR                = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-ar cqs
QMAKE_OBJCOPY           = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-objcopy
QMAKE_NM                = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-nm -P
QMAKE_STRIP             = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-strip

QMAKE_LFLAGS += -Wl,-rpath-link=/rootech/lib/tslib/lib

...



4. configure 옵션
cd ~/qt-everywhere-opensource-src-5.3.1/qtbase/

./configure -v \
-arch arm \
-xplatform linux-arm-gnueabi-g++ \
-device-option CROSS_COMPILE=arm-linux-gnueabi \
-prefix /rootech/qt/5.3.1 \
-opensource \
-confirm-license \
-I/rootech/lib/tslib/include -L/rootech/lib/tslib/lib -tslib \
-no-c++11 -no-wayland -force-pkg-config -no-largefile -no-accessibility

make
sudo make install


5. 타겟보드 환경변수 설정

*****************************************************
TSLIB_CONFFILE: ts.conf 의 경로
TSLIB_CALIBFILE: touch calibration파일이 저장 될 경로
QT_QPA_PLATFORM: -platform 옵션
QT_QPA_GENERIC_PLUGINS: -plugin 옵션
*****************************************************
{

export TSDIR=/rootech/lib/tslib
export TSLIB=/rootech/lib/tslib/lib
export TSLIB_ConFFILE=$TSDIR/etc/ts.conf
export TSLIB_CALIBFILE=$TSDIR/etc/pointercal
export TSLIB_PLUGINDIR=$TSDIR/lib/ts
export TSLIB_TSDEVICE=/dev/input/event1
export PATH=$TSDIR/bin:$PATH
export LD_LIBRARY_PATH=$TSLIB:$LD_LIBRARY_PATH

export QWS_DISPLAY=Linuxfb:mmsize=200x120
export QT_QPA_PLATFORM=$QWS_DISPLAY
export QWS_MOUSE_PROTO=Tslib:$TSLIB_TSDEVICE
export QT_QPA_GENERIC_PLUGINS=$QWS_MOUSE_PROTO

export QTDIR=/rootech/qt/5.3.1
export QTLIB=$QTDIR/lib
export QTINC=$QTDIR/include
export PATH=$QTDIR/bin:$PATH
export QMAKESPEC=$QTDIR/mkspecs/linux-arm-gnueabi-g++
export LD_LIBRARY_PATH=$QTLIB:$LD_LIBRARY_PATH

}


6. 참고 자료 link
http://qt-project.org/wiki/Building-Qt-5-from-Git
http://qt-project.org/doc/qt-5/linux-requirements.html
http://gpupowered.org/node/8



devilqoo 14-11-12 19:31
 
다음에 빌드할 일 있을 때 유용하게 참고하도록 하겠습니다. :)
때끼 15-01-21 15:31
 
혹시 이렇게 빌드 하여 타겟에 빌드된 환경을 넣었을때 qt 어플들이 동작을 하는지 문의를 드려봐도 될까요?

root@freescale ~$ ./dials
 Segmentation fault

전 이렇게 qt5 의 예제 어플들이 전부 동작 하지 않아서 댓글을 달아 봅니다.
성일 15-02-12 16:58
 
./configure -v -arch arm -xplatform llinux-arm-gnueabi-g++ -device-option CROSS_COMPILE=arm-linux-gnueabi -prefix /home/sikim/qt-everywhere-opensource-src-5.4.0 -opensource -confirm-license -no-c++11 -no-wayland -force-pkg-config -no-largefile -no-accessibility
하면 아래와 같은 오류가 발생합니다

The specified system/compiler is not supported:

      /home/sikim/qt-everywhere-opensource-src-5.4.0/qtbase/mkspecs/llinux-arm-gnueabi-g++

틀린부분이 없는것 같은데 원인을 모르겠습니다

'소프트웨어 > Qt' 카테고리의 다른 글

안드로이드 Qt 프로그래밍  (0) 2019.08.22
Qt5.4 정적 빌드하기  (0) 2019.04.30
블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,