Qt on Android and BB10 experience

Finally I have managed to port a small desktop app to Android and Blackberry 10. The app was based on QWidgets and was based on Qt 4.8.  The app was not for open distribution unfortunately so I can’t share the app. However, I can share some experiences:

Blackberry 10:  I just changed to the Blackberry-provided qmake, ran qmake and make, and the app compiled without any changes for Blackberry 10. However, packaging the app requires a few additional steps. You have to obtain signing keys (which I already had), provide a bar-descriptor.xml and then run the blackberry-nativepackager command. The process is generally well-documented and went fine. I was able to test on a Blackberry Z10. I initially ran into an issue that I had forgotten to specify the proper permissions in the bar-descriptor for accessing files, but once I corrected it things ran “ok”. Most of the widgets actually rendered fine and layout scheme worked as expected. However, things were not perfect either. For example, the file picker dialog was not very nice but at least the app was servicable. The lack of integration with BB10 UI conventions is an issue though so will have to see if there is a way to integrate stuff like swipe-down menus from a pure QWidget (or perhaps Qt Quick 1/2) based app without using Cascades.

Android:  For Android, I used Android 5.1 and actually used Qt Creator 2.8.1 to set everything up. Changing to Qt 5.1 required very minimal changes such as a couple of ifdefs for changed header file names. Qt Creator asked for Android SDK and NDK paths, and after that setup most of the things automatically including inbuilt simulator support. If you connect a device over adb, those are recognized as well for deployment and testing.  Qt Creator was automatically generating unsigned APKs but doesn’t seem to generate signed apk’s, or at least I couldn’t figure out how.
Overall, things were going smoothly on Android .. until I actually ran the app. Turns out QWIdgets look really ugly on Android and some of the layouting doesn’t really work the way you would want. Some widgets, like QComboBox used for implementing drop-down menus, did not render correctly while some others like file dialogs were ugly and almost unusable. After a few careful changes, I was able to make it work but still integration was poor.

I would say, at least on Android, you should try to avoid QWidgets and start to use QML. QML will allow you far more control over the look, feel and layout of your app. I do hope that something like Qt Quick Controls come to Android because raw QML is a bit too much DIY. The other issue is that, I am still not clear on how Qt based apps can integrate with Android UI guidelines such as integration with the back button.  I am also not clear how you can integrate, say, invoking the email application or the web browser. Need to figure these out next.

 

 

 

AMD Jaguar vs AMD Llano (K10) at same clocks

AMD recently launched their Kabini APUs and the A4-5000 has been reviewed by a number of websites. However, I haven’t been able to find a review that compares it to other x86 architectures at the same clocks. I happen to have a notebook with a AMD Llano based A8-3500M in it. This is a quad-core unit @ 1.5GHz, the same clock as A4-5000. Now, A8-3500M also has a boost mode that takes it to over 2GHz for some single-threaded workloads but I disabled that boost mode for this test. My Llano test system is running Win7 Home Premium (64-bit) and has dual-channel 8GB RAM installed. I don’t have a A4-5000 to test, so I referenced Anandtech for Cinebench 11.5 (64-bit multithreaded) and Mozilla Kraken, PCPer for Euler3D and Techreport for 7-zip.

Test results:

Test Jaguar Llano K10 Jaguar % of K10
Euler3D 0.971 Hz 1.41 Hz 68.9%
Cinebench 11.5 1.5 1.9 78.9%
Mozilla Kraken 6512.7 5883 90%
7-zip (compress) 3793 MIPS 5317 MIPS 71.3%
7-zip (decompress) 5397 MIPS 6152 MIPS 87.7%

For 7-zip, I just ran it as follows: 7z.exe b 3 -mmt4 -mmd25 as the default number of passes is way too long, but it should give us a decent idea 🙂

Overall, we are looking at between 70-90% of K10 performance at the same clocks in this test, which is quite good for a small dual-issue core. We don’t have any data on how the benchmarks scale with clock speed though. Hopefully that data will become clearer in the future when reviewers get their hands on the A6-5200 which has Jaguar cores clocked @ 2GHz.

Snapdragon S4 devboard

Found an interesting upcoming single-board computer (SBC) with quad-core Krait @ 1.7Ghz and Adreno 320. At $149, it looks interesting. Still only in -pre-order though. Might get one if the software support is right. Have been burnt before with devboards with interesting hardware but crap drivers so will wait and watch for now. Particularly interested to see if it supports OpenCL, and whether OS options include fully-supported Linux and not just Android.

Link: http://www.inforcecomputing.com/product/moreinfo/ifc6410.html

Update: The company confirmed that the board supports OpenCL on GPU! Currently they have an Android image based on Jelly Bean 4.1.2. Linux seems to be on the roadmap but no ETA I believe.

 

Blackberry Z10 impressions after two months

I have had the Blackberry Z10 for more than two months now as my full-time device. The impression is mostly positive.

  • The email and messaging experience is great. The always-available unified Blackberry Hub really does work well. Integration with Exchange ActiveSync accounts work great with full push support, as is expected from a smartphone these days. IM, SMS, BBM, Twitter etc are all integrated into the hub too and the whole messaging experience is very well thought out. At the first blush, it may not seem like a big deal but there are a lot of little things throughout the UI that make the experience very good.  Still waiting for the Skype app though.
  • Virtual keyboard is up there with the best.
  • Web browsing experience is pretty good. Web standards support is great with good HTML5 support. WebGL is enabled by default. Javascript engine is decently optimized and overall page rendering speed is also competitive. Flash is also available, though disabled by default.
  • Overall gesture-based UI works fine and is quite consistent, at least for apps that are not Android ports.
  • Multitasking system is actually pretty nice and much easier to understand conceptually and operate than the multitasking view on, say, Android ICS.
  • Game availability is also decent. Some fun titles I have seen so far include Jetpack Joyride, Bejeweled 2 and Chimpact.
  • HDMI functionality is also pretty decent. I connected the Z10 to a HDMI monitor using the micro-HDMI port and it mirrored the display on the screen. However, Z10’s aspect ratio is not perfectly 16:9 and thus there are small black bars on the side of the mirrored output. However, that is not a huge issue and playing back media, or opening apps or web browsing,  all work fine. Mirroring the display over HDMI appears to be no impact on performance at all. Games also work flawlessly over HDMI.
  • Under-the-hood, it is powered by POSIX compliant QNX and Blackberry provides very good tools for a variety of languages including C/C++ and HTML5+JS. Android apps can also be ported over in many cases as mentioned previously but the “native” option is to write in C/C++ using Cascades UI toolkit. I will cover the dev environment separately sometime. Suffice to say, it is very good.
  • Maps is one of the weaker areas for Blackberry 10. The default Blackberry Maps app offers turn-by-turn navigation support for driving.  But Blackberry Maps offers no support for walking directions or public transport and requires a constant data connection with no offline support.  Third-party apps, such as Wisepilot, are also not all that great. In short, the offering do not match up to competitors like Nokia Maps or Google Maps.
  • Camera is also only average. Autofocus often takes its sweet time, and image quality is passable. Not bad in a pinch, but nowhere close to my old Nokia N8.