During one of my projects, I had to port a Qt application to
Android, using the excellent necessitas
SDK. This excellent SDK made it possible to implement for Android
using C++, the NDK and Qt Creator as the preferred IDE. I started from
here to think I could use Qt Creator to more generally program in
C++/JNI to implement libraries for Android, with or without the Qt
libraries. This is how I did it.
Download the necessary tools
- Download the Qt libraries (I won't use the libraries, I only need the environment).
- Download Qt Creator.
- Download the Android NDK for your platform.
Add the Android platform specification
I took the platform specification used in the necessitas project
and modified it a bit. Look for the directory containing the platform
specifications (<qt_libs>/mkspecs), and place in there the platform
specification file and the qmake
configuration file. You'll have to define at least the
ANDROID_NDK_ROOT to the root of the NDK you downloaded.
Setup Qt Creator
In Qt Creator you can specify a new toolchain to use: go to the
preferences, "Build & Run", "Toolchains", "Add" and choose "GCC".
Then, select the gcc compile from the Android NDK (I see it under
<ndk_root>/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-g++).
You'll have to create a new build configuration in the project
properties: add a new specification with the default build
specification and name it differently. Also, under "Build Steps", add
"-spec android-g++" to the additional arguments. This will tell Qt
Creator to build according to the Android specifications we added
before. Also, select the Android toolchain in the "General" section.
Additional setup
Consider that I also had to remove QMAKE_INCDIR_QT in some cases because it was adding /usr/include to the include paths, thus making the build fail. You may want to add that to the qmake.conf file.Creating native executables for Android using qmake and Qt Creator
It is sometime useful to creato native executables for Android.
You can use this technique to do it very simply. For instance, this is
a test I created in a minute (you can use Qt Creator or the command
line directly):
nano TestProject.pro
QT -= core
gui
TEMPLATE = app
SOURCES = main.cpp
QMAKE_INCDIR_QT =
Now write a simple "Hello Android!" application:
nano main.cpp
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hello Android!\n");
return 0;
}
Now create the Makefile using qmake and the android platform
specification:
qmake -spec android-g++
make
You'll get a TestProject execuable compiled for arm platform using
the Android bionic C libraries. You can try uploading to an Android
emulator:
luca-macbook:test_project luca$ adb remount
remount succeeded
luca-macbook:test_project luca$ adb push TestProject /data
173 KB/s (34639 bytes in 0.195s)
luca-macbook:test_project luca$ adb shell
# cd /data
# ./TestProject
Hello Android!
# rm TestProject
I used this approach on both Mac OS X and Linux. Never tried on Windows.
That's an intrusting and wonderful.I read and really impressed from this topic .It's an intrusting and informative . It's relevant to the Android Specification.. Thanks for Submission.....
ReplyDeleteI thank you too. Same approach that I want to go. While being a Noob in Android-Dev I want to avod using Eclipse, since working with the latter is a pain, when it comes to professional objectives. This post gave me the hope, that QT-Creator can serve as a professional tool. Kind regards.
ReplyDelete