Upload
espen-riskedal
View
39.222
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Explains how to install Necessitas (Qt for Android), how to use it, and how to publish to the Android Market. Based on Necessitas 0.3 (3rd alpha) Slides are from Qt Developer Days 2011 in San Fransisco
Citation preview
Targeting Android with Qt
Espen Riskedal / cutehacks.com@snowpong
Introduction
About me,and about the talk.
About me
● Trolltech and Nokia
● Symbian and Windows CE
● Co-founded cutehacks.com
● Still believe in Qt Everywhere
Espen Riskedal@snowpong
We make apps
Purpose of this talk
“Teach you how to publish Qt apps in the Android market”
I have a vested interest.
Agenda
● Introduction
● Qt on mobile platforms
● Necessitas
● Publishing to Android Market
● Conclusion
2.3.x “Gingerbread”● Google Nexus S● December 2010● Linux kernel 2.6.35
Photo: flickr.com/quinnanya/CC / Some rights reserved
Qt on mobile platforms
A brief introduction on which mobile platforms you can target with Qt.
Today's mobile platforms
Supported by Qt
Almost supported by Qt
Some Android details
● 4 major releases
● ARM and x86
● Linux
● Dalvik
Well known models
Galaxy S2 Tab 10.1 Xperia Play
Android API levels
Platform version API Level VERSION_CODE
... ... ...
Android 2.3 – 2.3.2 9 GINGERBREAD
... ... ...
Android 2.1.x 7 ECLAIR_MR
... ... ...
Android 1.5 3 CUPCAKE
... ... ...
Android platform distribution
http://developer.android.com/resources/dashboard/platform-versions.html
A possible future for Qt
1.6 “Donut”● Acer Liquid A1● September 2009● Linux kernel 2.6.29
Photo: flickr.com/quinnanya/CC / Some rights reserved
Necessitas
Necessitas is a community port of Qt for Android. Its founder and main developer is BogDan Vatra.
Installing Necessitas
● OpenJDK (and Ant)
● Necessitas 0.3 (3rd alpha)
http://bit.ly/qtand03 ● Linux
● not root
Default values are OK
Included components
Android SDKAndroid NDKQt, QtWebKit, QtMobilityQt Creatorgdb / gdbserverAntJDK
Adding an emulator
Getting a USB connection
● Enable USB debugging● Settings->Applications->Development
● Check connectioncd android-sdk/platform-tools./adb devices
304D1...6203B05E device???????????????? no permissions
● Restart if neededsudo ./adb kill-serversudo ./adb devices
Install Ministro / Ministro 2
A “Hello Qt Quick” example
● Qt Quick Project → Qt Quick Application● Name
● Target (Android / armv5)
● Next/Next/Next
● Add QtDeclarative
● Press Ctrl-R
Let's do it for real
Our “funky” main.qmlimport QtQuick 1.0
Rectangle { anchors.fill: parent gradient: Gradient { GradientStop { position: 0.0; color: "red" } GradientStop { position: 0.33; color: "yellow" } GradientStop { position: 1.0; color: "green" } } Rectangle { id:ball; width:100; height:100; radius: 50 color:"black" Behavior on x { PropertyAnimation{ duration:500; easing.type: Easing.OutBounce} } Behavior on y { PropertyAnimation{ duration:500; easing.type: Easing.OutBounce} } } MouseArea { anchors.fill: parent onClicked: { ball.x=mouse.x ball.y=mouse.y } }}
Psychedelic bouncy ball
Added files explained
In addition to the .pro and .h/.cpp files:android/AndroidManifest.xmlandroid/build.xmlandroid/res/*android/src/.../ministro/*android/src/.../origo/Qt*
How does it really work?
Necessitas status
● SDK (almost) complete for
● Windows, Linux and Mac
● Qt Creator
● Deploy libraries and app
● Run app
● Debug app
● Signs the app
Popularity of Necessitas
● ~10000 downloads of 0.2.1 (2nd alpha)
● ~3200 downloads of 0.3 so far (3rd alpha)
● ~5000 views of my Münich slides
Necessitas roadmap
● Alpha3 (just released!)● Lots of fixes● Signing for Android Market● OpenGL etc.● ...
● Alpha4● Android Style● Menu integration● ...
● Beta● Refactor Java wrapper code● Promise BIC● …?
Porting an actual app
Nokia N9 / Nokia 700Samsung Galaxy S2
Changes needed
● Use the right QML file and showFullScreen()
● Hack around font issue
● Add app icons
● Set package name
● Set minSdkVersion
QML and showFullScr...
--- a/main.cpp
+++ b/main.cpp
@@ -50,14 +56,16 @@ int main(int argc, char *argv[])
-#elif defined (Q_OS_SYMBIAN)
+#elif defined (Q_OS_ANDROID) || defined(Q_OS_SYMBIAN)
view.setSource(QUrl("qrc:/qml/Main.qml"));
view.showFullScreen();
#else
Font hack
--- a/main.cpp
+++ b/main.cpp
@@ -29,6 +29,12 @@ int main(int argc, char *argv[])
application.setOrganizationDomain("cutehacks.com");
application.setOrganizationName("Cutehacks");
+#if defined(Q_OS_ANDROID)
+ QFont boldFont = application.font();
+ boldFont.setBold(true);
+ application.setFont(boldFont);
+#endif
Setting app icons
commit a91fa2461ced0e75270b71c41ee80309e0697777
Author: Espen Riskedal <[email protected]>
Date: Sun Oct 9 22:17:31 2011 +0200
added proper icons where it counts
android/res/drawable-hdpi/icon.png
android/res/drawable-ldpi/icon.png
android/res/drawable-mdpi/icon.png
Setting package name
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<manifest package="eu.licentia.necessitas...
+<manifest package="com.cutehacks.fly" ...
Setting minSdkVersion
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -14,4 +14,5 @@
<supports-screens android:largeScreens="t...
<uses-permission android:name="android.pe...
<uses-permission android:name="android.pe...
+ <uses-sdk android:minSdkVersion="7"/>
</manifest>
3.x “Honeycomb”● Motorola Xoom● February 2011● Linux kernel 2.6.36
Photo: flickr.com/quinnanya/CC / Some rights reserved
Publishing to Android Market
Sometimes the easy part is writing the app. The hard part is getting it published.
.APK format explained
● .JAR and .ZIP● Typically includes:
META-INF/ res/ AndroidManifest.xml classes.dex resources.arsc
● Native apps also include: libs/armeabi/
Two publishing options
Ministro
+ dev friendly
+ updates
+ multiple archs
+ space / bandwidth
- UX
- updates
- BIC
Bundling Qt
+ UX
+ BIC
+ custom fixes
- space / bandwidth
- less archs
- no updates
Bundling Qt with your app
Target one arch (ARMv5)
Set relatively high API level
Only include the actually needed libs
Disable Ministro dependencies
Beware of SSL certs
Here be dragons :-)
Publishing with Ministro
cd android/
ant release
This produces Fly-unsigned.apk in the
shadowbuild directory.
Getting an A.M. account
http://market.android.com/publish
You'll need:
A credit card with 25USD
A phone number
Name, email and phone
Paying
Credit-card needed
One time fee of 25USD
Order sent
Distribution agreement
We can publish free apps!
Sign up for merchant
We can make money!
Signing the .APK
Create keykeytool -genkey -v -keystore cutehacks-release-key.keystore -alias cutehackskeystore -keyalg RSA -keysize 2048 -validity 10000
Sign packagejarsigner -verbose -keystore cutehacks-release-key.keystore android/bin/Fly-unsigned.apk cutehackskeystore
Verifying the signature
Verify signaturejarsigner -verify -verbose Fly-unsigned.apk 585 Tue ... META-INF/MANIFEST.MF 706 Tue ... META-INF/CUTEHACK.SF 1327 Tue ... META-INF/CUTEHACK.RSAsm 2932 Tue ... AndroidManifest.xmlsm 1500 Tue ... resources.arscsm 3064 Tue ... res/drawable-hdpi/icon.pngsm 1543 Tue ... res/drawable-ldpi/icon.pngsm 2347 Tue ... res/drawable-mdpi/icon.pngsm 86680 Tue ... classes.dexsm 164020 Tue ... lib/armeabi/libfly.so s = signature was verified m = entry is listed in manifest
Rename Fly-unsigned.apk to Fly-release.apk
Actually publishing
http://market.android.com/publish
You'll need:
Signed APK (max 50MB)
High-res app icon (512x512)
Two screenshots (min 320x480)
Title & Description
Upload .APK
Set name and screenshots
In the store
Installation UX with Ministro
Press app
Press “FREE”
Press “OK”
Installation UX with Ministro
Press app
Press “Yes”
Press “Ministro”
Installation UX with Ministro
Press “Install”
Press “Accept”
Press “Yes”
Installation UX with Ministro
2.0/2.1 “Eclair”● Motorola Droid● October 2009● Linux kernel 2.6.29
Photo: flickr.com/quinnanya/CC / Some rights reserved
Conclusion
Let's summarize and look at the future.
Summary
Qt on mobile: Potential bright future
Necessitas: Out-of-the-box with rough edges
Android Market: Quick and easy
Qt's future
Qt 5 – Qt Quick and scenegraph
“The next billion”
iOS and BBX
Open Governance
Information on Necessitas
Mailinglist for users:http://groups.google.com/group/android-qt
Mailinglist for devs/contributors:https://mail.kde.org/mailman/listinfo/necessitas-devel
Repositories:http://community.kde.org/Necessitas/Repositories
Wiki:http://sourceforge.net/p/necessitas/home/necessitas/
It's already possible
Fly inAndroid Market
Fly installedon phone
http://bit.ly/cuteflyhttps://market.android.com/details?id=com.cutehacks.fly
Questions?
Thank you!
@snowpong (Twitter)